From: W. Trevor King Date: Sat, 16 Apr 2011 19:19:31 +0000 (-0400) Subject: Add --preserve-uuids to `be import-xml`. X-Git-Tag: 1.1.0~215 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=af99705c6e97544038209def209941d5a745c115;p=be.git Add --preserve-uuids to `be import-xml`. --- diff --git a/libbe/bug.py b/libbe/bug.py index adccf21..bbe6980 100644 --- a/libbe/bug.py +++ b/libbe/bug.py @@ -337,7 +337,7 @@ class Bug (settings_object.SavedSettingsObject): sep = '\n' + istring return istring + sep.join(lines).rstrip('\n') - def from_xml(self, xml_string, verbose=True): + def from_xml(self, xml_string, preserve_uuids=False, verbose=True): u""" Note: If a bug uuid is given, set .alt_id to it's value. >>> bugA = Bug(uuid="0123", summary="Need to test Bug.from_xml()") @@ -362,6 +362,10 @@ class Bug (settings_object.SavedSettingsObject): ['severity', 'status', 'creator', 'time', 'summary'] >>> len(list(bugB.comments())) 3 + >>> bugC = Bug() + >>> bugC.from_xml(xml, preserve_uuids=True) + >>> bugC.uuid == bugA.uuid + True """ if type(xml_string) == types.UnicodeType: xml_string = xml_string.strip().encode('unicode_escape') @@ -383,7 +387,8 @@ class Bug (settings_object.SavedSettingsObject): pass elif child.tag == 'comment': comm = comment.Comment(bug=self) - comm.from_xml(child) + comm.from_xml( + child, preserve_uuids=preserve_uuids, verbose=verbose) comments.append(comm) continue elif child.tag in tags: @@ -392,7 +397,7 @@ class Bug (settings_object.SavedSettingsObject): else: text = xml.sax.saxutils.unescape(child.text) text = text.decode('unicode_escape').strip() - if child.tag == 'uuid': + if child.tag == 'uuid' and not preserve_uuids: uuid = text continue # don't set the bug's uuid tag. elif child.tag == 'created': diff --git a/libbe/command/import_xml.py b/libbe/command/import_xml.py index b4da2fd..44205cb 100644 --- a/libbe/command/import_xml.py +++ b/libbe/command/import_xml.py @@ -76,6 +76,8 @@ class Import_XML (libbe.command.Command): help="If any comment's refers to a non-existent comment, ignore it (instead of raising an exception)."), libbe.command.Option(name='add-only', short_name='a', help='If any bug or comment listed in the XML file already exists in the bug repository, do not alter the repository version.'), + libbe.command.Option(name='preserve-uuids', short_name='p', + help='Preserve UUIDs for trusted input (potential name collisions).'), libbe.command.Option(name='comment-root', short_name='c', help='Supply a bug or comment ID as the root of any elements that are direct children of the element. If any such elements exist, you are required to set this option.', arg=libbe.command.Argument( @@ -131,11 +133,11 @@ class Import_XML (libbe.command.Command): for child in be_xml.getchildren(): if child.tag == 'bug': new = libbe.bug.Bug(bugdir=bugdir) - new.from_xml(child) + new.from_xml(child, preserve_uuids=params['preserve-uuids']) root_bugs.append(new) elif child.tag == 'comment': new = libbe.comment.Comment(croot_bug) - new.from_xml(child) + new.from_xml(child, preserve_uuids=params['preserve-uuids']) root_comments.append(new) elif child.tag == 'version': for gchild in child.getchildren(): diff --git a/libbe/comment.py b/libbe/comment.py index 6350e2c..8ffb3cd 100644 --- a/libbe/comment.py +++ b/libbe/comment.py @@ -340,7 +340,7 @@ class Comment (Tree, settings_object.SavedSettingsObject): sep = '\n' + istring return istring + sep.join(lines).rstrip('\n') - def from_xml(self, xml_string, verbose=True): + def from_xml(self, xml_string, preserve_uuids=False, verbose=True): u""" Note: If alt-id is not given, translates any fields to fields. @@ -360,6 +360,10 @@ class Comment (Tree, settings_object.SavedSettingsObject): >>> commB.alt_id = None >>> commB.xml() == xml True + >>> commC = Comment() + >>> commC.from_xml(xml, preserve_uuids=True) + >>> commC.uuid == commA.uuid + True """ if type(xml_string) == types.UnicodeType: xml_string = xml_string.strip().encode('unicode_escape') @@ -385,7 +389,7 @@ class Comment (Tree, settings_object.SavedSettingsObject): else: text = xml.sax.saxutils.unescape(child.text) text = text.decode('unicode_escape').strip() - if child.tag == 'uuid': + if child.tag == 'uuid' and not preserve_uuids: uuid = text continue # don't set the comment's uuid tag. elif child.tag == 'body':