diff options
author | W. Trevor King <wking@drexel.edu> | 2011-04-16 15:19:31 -0400 |
---|---|---|
committer | W. Trevor King <wking@drexel.edu> | 2011-04-16 15:19:31 -0400 |
commit | af99705c6e97544038209def209941d5a745c115 (patch) | |
tree | 3064c31339b841f9e0a7400e4c68e3d38217d0aa /libbe | |
parent | d3aded78a005078ac175b2664eda592c31341761 (diff) | |
download | bugseverywhere-af99705c6e97544038209def209941d5a745c115.tar.gz |
Add --preserve-uuids to `be import-xml`.
Diffstat (limited to 'libbe')
-rw-r--r-- | libbe/bug.py | 11 | ||||
-rw-r--r-- | libbe/command/import_xml.py | 6 | ||||
-rw-r--r-- | libbe/comment.py | 8 |
3 files changed, 18 insertions, 7 deletions
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 <in-reply-to> 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 <comment> elements that are direct children of the <be-xml> element. If any such <comment> 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 <uuid> fields to <alt-id> 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': |