Mercurial > public > mercurial-scm > hg
comparison contrib/darcs2hg.py @ 5350:bd706eb8bc25
darcs2hg: Added support for darcs tags.
author | Terry Smith <terry@t11e.com> |
---|---|
date | Tue, 11 Sep 2007 13:30:37 -0400 |
parents | ad8783fe20f7 |
children | 6b6104430964 |
comparison
equal
deleted
inserted
replaced
5349:ad8783fe20f7 | 5350:bd706eb8bc25 |
---|---|
111 doc = xml_dom.parseString(change) | 111 doc = xml_dom.parseString(change) |
112 for patch_node in doc.childNodes[0].childNodes: | 112 for patch_node in doc.childNodes[0].childNodes: |
113 summary_nodes = filter(lambda n: n.nodeName == "summary" and n.nodeType == n.ELEMENT_NODE, patch_node.childNodes) | 113 summary_nodes = filter(lambda n: n.nodeName == "summary" and n.nodeType == n.ELEMENT_NODE, patch_node.childNodes) |
114 for summary_node in summary_nodes: | 114 for summary_node in summary_nodes: |
115 change_nodes = filter(lambda n: n.nodeType == n.ELEMENT_NODE, summary_node.childNodes) | 115 change_nodes = filter(lambda n: n.nodeType == n.ELEMENT_NODE, summary_node.childNodes) |
116 if len(change_nodes) == 0: | |
117 name = filter(lambda n: n.nodeName == "name", patch_node.childNodes) | |
118 if not name: | |
119 error("Darcs patch has an empty summary node and no name: " + patch_node.toxml()) | |
120 name = name[0].childNodes[0].data.strip() | |
121 (tag, sub_count) = re.subn('^TAG ', '', name, 1) | |
122 if sub_count != 1: | |
123 error("Darcs patch has an empty summary node but doesn't look like a tag: " + patch_node.toxml()); | |
116 for change_node in change_nodes: | 124 for change_node in change_nodes: |
117 change = change_node.nodeName | 125 change = change_node.nodeName |
118 if change == 'modify_file': | 126 if change == 'modify_file': |
119 yield change, change_node.childNodes[0].data.strip() | 127 yield change, change_node.childNodes[0].data.strip() |
120 elif change == 'add_file': | 128 elif change == 'add_file': |
160 return int(tip) | 168 return int(tip) |
161 | 169 |
162 def hg_rename( hg_repo, from_file, to_file ): | 170 def hg_rename( hg_repo, from_file, to_file ): |
163 cmd("hg rename --after \"%s\" \"%s\"" % (from_file, to_file), hg_repo); | 171 cmd("hg rename --after \"%s\" \"%s\"" % (from_file, to_file), hg_repo); |
164 | 172 |
165 def hg_handle_change( hg_repo, change, arg ): | 173 def hg_tag ( hg_repo, text, author, date ): |
174 old_tip = hg_tip(hg_repo) | |
175 res = cmd("hg tag -u \"%s\" -d \"%s 0\" \"%s\"" % (author, date, text), hg_repo) | |
176 new_tip = hg_tip(hg_repo) | |
177 if not new_tip == old_tip + 1: | |
178 error("Mercurial tag did not work as expected: " + res) | |
179 | |
180 def hg_handle_change( hg_repo, author, date, change, arg ): | |
166 """Processes a change event as output by darcs_changes_summary. These | 181 """Processes a change event as output by darcs_changes_summary. These |
167 consist of file move/rename/add/delete commands.""" | 182 consist of file move/rename/add/delete commands.""" |
168 if change == 'modify_file': | 183 if change == 'modify_file': |
169 pass | 184 pass |
170 elif change == 'add_file': | 185 elif change == 'add_file': |
175 pass | 190 pass |
176 elif change == 'remove_directory': | 191 elif change == 'remove_directory': |
177 pass | 192 pass |
178 elif change == 'move': | 193 elif change == 'move': |
179 hg_rename(hg_repo, arg[0], arg[1]) | 194 hg_rename(hg_repo, arg[0], arg[1]) |
195 elif change == 'tag': | |
196 hg_tag(hg_repo, arg, author, date) | |
180 else: | 197 else: |
181 error('Unknown change type ' + change + ': ' + arg) | 198 error('Unknown change type ' + change + ': ' + arg) |
182 | 199 |
183 # ------------------------------------------------------------------------------ | 200 # ------------------------------------------------------------------------------ |
184 # | 201 # |
224 # --------------------------------YYYYMMDDHHMMSS | 241 # --------------------------------YYYYMMDDHHMMSS |
225 date = chash.split("-")[0] | 242 date = chash.split("-")[0] |
226 epoch = int(mktime(strptime(date, '%Y%m%d%H%M%S'))) | 243 epoch = int(mktime(strptime(date, '%Y%m%d%H%M%S'))) |
227 darcs_pull(hg_repo, darcs_repo, chash) | 244 darcs_pull(hg_repo, darcs_repo, chash) |
228 for change, arg in darcs_changes_summary(darcs_repo, chash): | 245 for change, arg in darcs_changes_summary(darcs_repo, chash): |
229 hg_handle_change(hg_repo, change, arg) | 246 hg_handle_change(hg_repo, author, epoch, change, arg) |
230 hg_commit(hg_repo, text, author, epoch) | 247 hg_commit(hg_repo, text, author, epoch) |
231 change_number += 1 | 248 change_number += 1 |
232 print "Darcs repository (_darcs) was not deleted. You can keep or remove it." | 249 print "Darcs repository (_darcs) was not deleted. You can keep or remove it." |
233 | 250 |
234 # EOF | 251 # EOF |