2 # Encoding: iso-8859-1 |
2 # Encoding: iso-8859-1 |
3 # vim: tw=80 ts=4 sw=4 noet |
3 # vim: tw=80 ts=4 sw=4 noet |
4 # ----------------------------------------------------------------------------- |
4 # ----------------------------------------------------------------------------- |
5 # Project : Basic Darcs to Mercurial conversion script |
5 # Project : Basic Darcs to Mercurial conversion script |
6 # ----------------------------------------------------------------------------- |
6 # ----------------------------------------------------------------------------- |
7 # Author : Sebastien Pierre <sebastien@xprima.com> |
7 # Authors : Sebastien Pierre <sebastien@xprima.com> |
|
8 # TK Soh <teekaysoh@gmail.com> |
|
9 # ----------------------------------------------------------------------------- |
8 # Creation : 24-May-2006 |
10 # Creation : 24-May-2006 |
9 # Last mod : 26-May-2006 |
11 # Last mod : 01-Jun-2006 |
10 # History : |
|
11 # 26-May-2006 - Updated |
|
12 # 24-May-2006 - First implementation |
|
13 # ----------------------------------------------------------------------------- |
12 # ----------------------------------------------------------------------------- |
14 |
13 |
15 import os, sys |
14 import os, sys |
16 import tempfile |
15 import tempfile |
17 import xml.dom.minidom as xml_dom |
16 import xml.dom.minidom as xml_dom |
33 # |
32 # |
34 # Utilities |
33 # Utilities |
35 # |
34 # |
36 # ------------------------------------------------------------------------------ |
35 # ------------------------------------------------------------------------------ |
37 |
36 |
38 def cmd(text, path=None): |
37 def cmd(text, path=None, silent=False): |
39 """Executes a command, in the given directory (if any), and returns the |
38 """Executes a command, in the given directory (if any), and returns the |
40 command result as a string.""" |
39 command result as a string.""" |
41 cwd = None |
40 cwd = None |
42 if path: |
41 if path: |
43 path = os.path.abspath(path) |
42 path = os.path.abspath(path) |
44 cwd = os.getcwd() |
43 cwd = os.getcwd() |
45 os.chdir(path) |
44 os.chdir(path) |
46 print text |
45 if not silent: print "> ", text |
47 res = os.popen(text).read() |
46 res = os.popen(text).read() |
48 if path: |
47 if path: |
49 os.chdir(cwd) |
48 os.chdir(cwd) |
50 return res |
49 return res |
51 |
50 |
52 def writefile(path, data): |
51 def writefile(path, data): |
53 """Writes the given data into the given file.""" |
52 """Writes the given data into the given file.""" |
54 f = file(path, "w") ; f.write(data) ; f.close() |
53 f = file(path, "w") ; f.write(data) ; f.close() |
|
54 |
|
55 def error( *args ): |
|
56 sys.stderr.write("ERROR:") |
|
57 for a in args: sys.stderr.write(str(a)) |
|
58 sys.stderr.write("\n") |
|
59 sys.exit(-1) |
55 |
60 |
56 # ------------------------------------------------------------------------------ |
61 # ------------------------------------------------------------------------------ |
57 # |
62 # |
58 # Darcs interface |
63 # Darcs interface |
59 # |
64 # |
62 def darcs_changes(darcsRepo): |
67 def darcs_changes(darcsRepo): |
63 """Gets the changes list from the given darcs repository. This returns the |
68 """Gets the changes list from the given darcs repository. This returns the |
64 chronological list of changes as (change name, change summary).""" |
69 chronological list of changes as (change name, change summary).""" |
65 changes = cmd("darcs changes --reverse --xml-output", darcsRepo) |
70 changes = cmd("darcs changes --reverse --xml-output", darcsRepo) |
66 doc = xml_dom.parseString(changes) |
71 doc = xml_dom.parseString(changes) |
67 res = [] |
|
68 for patch_node in doc.childNodes[0].childNodes: |
72 for patch_node in doc.childNodes[0].childNodes: |
69 name = filter(lambda n:n.nodeName == "name", patch_node.childNodes) |
73 name = filter(lambda n:n.nodeName == "name", patch_node.childNodes) |
70 comm = filter(lambda n:n.nodeName == "comment", patch_node.childNodes) |
74 comm = filter(lambda n:n.nodeName == "comment", patch_node.childNodes) |
71 if not name:continue |
75 if not name:continue |
72 else: name = name[0].childNodes[0].data |
76 else: name = name[0].childNodes[0].data |
109 else: |
113 else: |
110 print USAGE |
114 print USAGE |
111 sys.exit(-1) |
115 sys.exit(-1) |
112 # Initializes the target repo |
116 # Initializes the target repo |
113 if not os.path.isdir(darcs_repo + "/_darcs"): |
117 if not os.path.isdir(darcs_repo + "/_darcs"): |
114 print "No darcs directory found at: " + darc_repo |
118 print "No darcs directory found at: " + darcs_repo |
115 sys.exit(-1) |
119 sys.exit(-1) |
116 if not os.path.isdir(hg_repo): |
120 if not os.path.isdir(hg_repo): |
117 os.mkdir(hg_repo) |
121 os.mkdir(hg_repo) |
118 else: |
122 else: |
119 print "Given HG repository must not exist. It will be created" |
123 print "Given HG repository must not exist. It will be created" |
126 darcs_pull(hg_repo, darcs_repo, hash) |
130 darcs_pull(hg_repo, darcs_repo, hash) |
127 epoch = int(mktime(strptime(date, '%Y%m%d%H%M%S'))) |
131 epoch = int(mktime(strptime(date, '%Y%m%d%H%M%S'))) |
128 hg_commit(hg_repo, text, author, epoch) |
132 hg_commit(hg_repo, text, author, epoch) |
129 |
133 |
130 # EOF |
134 # EOF |
131 |
|