bugdir: add `update` argument to BugDir.append().
authorW. Trevor King <wking@tremily.us>
Wed, 29 Aug 2012 18:54:33 +0000 (14:54 -0400)
committerW. Trevor King <wking@tremily.us>
Thu, 30 Aug 2012 03:29:56 +0000 (23:29 -0400)
This avoids a deepcopy error where the BugDir tries to update before
the Bug has had it's uuid assigned:

  Traceback (most recent call last):
    ...
    File ".../libbe/command/merge.py", line 168, in _run
      newCommTree = copy.deepcopy(bugB.comment_root)
    File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
      y = _reconstruct(x, rv, 1, memo)
    ...
    File "/usr/lib64/python2.7/copy.py", line 352, in _reconstruct
      y.append(item)
    File ".../libbe/bugdir.py", line 263, in append
      self._bug_map_gen()
    File ".../libbe/bugdir.py", line 152, in _bug_map_gen
      map[bug.uuid] = bug
  AttributeError: 'Bug' object has no attribute 'uuid'

libbe/bugdir.py

index 0399a82b0db30960edc07379a59ea16569299e1f..a3a388cf4f2324594ecdbc2522fb25f2c6f102fc 100644 (file)
@@ -255,14 +255,16 @@ class BugDir (list, settings_object.SavedSettingsObject):
     def new_bug(self, summary=None, _uuid=None):
         bg = bug.Bug(bugdir=self, uuid=_uuid, summary=summary,
                      from_storage=False)
-        self.append(bg)
+        self.append(bg, update=True)
         return bg
 
-    def append(self, bug):
+    def append(self, bug, update=False):
         super(BugDir, self).append(bug)
-        self._bug_map_gen()
-        if hasattr(self, '_uuids_cache') and not bug.uuid in self._uuids_cache:
-            self._uuids_cache.add(bug.uuid)
+        if update:
+            self._bug_map_gen()
+            if (hasattr(self, '_uuids_cache') and
+                not bug.uuid in self._uuids_cache):
+                self._uuids_cache.add(bug.uuid)
 
     def remove_bug(self, bug):
         if hasattr(self, '_uuids_cache') and bug.uuid in self._uuids_cache:
@@ -443,7 +445,7 @@ class BugDir (list, settings_object.SavedSettingsObject):
                 bg = bug.Bug(bugdir=self)
                 bg.from_xml(
                     child, preserve_uuids=preserve_uuids, verbose=verbose)
-                self.append(bg)
+                self.append(bg, update=True)
                 continue
             elif child.tag in tags:
                 if child.text == None or len(child.text) == 0: