Fixed #bea/8fc# : be crashes on outdated id-cache
authorW. Trevor King <wking@drexel.edu>
Mon, 25 Jan 2010 01:39:00 +0000 (20:39 -0500)
committerW. Trevor King <wking@drexel.edu>
Mon, 25 Jan 2010 01:39:00 +0000 (20:39 -0500)
Also explicitly avoid loading or saving settings for root comments.

.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8fc5d6fa-cae1-451f-9817-3e4da6d0aac1/values
libbe/comment.py
libbe/storage/vcs/base.py

index 9fa55b6ee5694b05dce21228d8ff1b0360f764c5..28975afd31442f719ac6af69d544a42b7a0d2bf9 100644 (file)
@@ -7,7 +7,7 @@ reporter: W. Trevor King <wking@drexel.edu>
 severity: minor
 
 
-status: open
+status: fixed
 
 
 summary: be crashes on outdated id-cache
index 21118f0a10b297ff7fb35ade88b919eb39f53498..f850042ec6d8ae936801af6d86e54d2de448a073 100644 (file)
@@ -590,6 +590,8 @@ class Comment (Tree, settings_object.SavedSettingsObject):
     # methods for saving/loading/acessing settings and properties.
 
     def load_settings(self, settings_mapfile=None):
+        if self.uuid == INVALID_UUID:
+            return
         if settings_mapfile == None:
             settings_mapfile = \
                 self.storage.get(self.id.storage("values"), default="\n")
@@ -601,6 +603,8 @@ class Comment (Tree, settings_object.SavedSettingsObject):
         self._setup_saved_settings(settings)
 
     def save_settings(self):
+        if self.uuid == INVALID_UUID:
+            return
         mf = mapfile.generate(self._get_saved_settings())
         self.storage.set(self.id.storage("values"), mf)
 
index 7d4383f82b8765dfbda4b27d4d5e9508c48f9cf4..7068e4633677345f222e61308d91e093e7067573 100644 (file)
@@ -239,7 +239,11 @@ class CachedPathID (object):
         else:
             extra = fields[1:]
         if uuid not in self._cache:
-            raise InvalidID(uuid)
+            self.disconnect()
+            self.init()
+            self.connect()
+            if uuid not in self._cache:
+                raise InvalidID(uuid)
         if relpath == True:
             return os.path.join(self._cache[uuid], *extra)
         return os.path.join(self._root, self._cache[uuid], *extra)