From bfd72d4fcd742ee356ec22d2fa4de5e2db23dde2 Mon Sep 17 00:00:00 2001
From: "W. Trevor King" <wking@drexel.edu>
Date: Mon, 18 Jan 2010 09:28:16 -0500
Subject: [PATCH] Moved BugDir.duplicate_bugdir to RevisionedBugDir class

---
 libbe/bugdir.py | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/libbe/bugdir.py b/libbe/bugdir.py
index 951a4d5..90c21e1 100644
--- a/libbe/bugdir.py
+++ b/libbe/bugdir.py
@@ -292,23 +292,23 @@ class BugDir (list, settings_object.SavedSettingsObject):
     def sibling_uuids(self):
         return []
 
-    # methods for managing duplicate BugDirs
-
-    def duplicate_bugdir(self, revision):
-        """
-        Duplicate bugdirs are read-only copies used for generating
-        diffs between revisions.
-        """
-        storage_version = self.storage.storage_version(revision)
+class RevisionedBugDir (BugDir):
+    """
+    RevisionedBugDirs are read-only copies used for generating
+    diffs between revisions.
+    """
+    def __init__(self, bugdir, revision):
+        storage_version = bugdir.storage.storage_version(revision)
         if storage_version != libbe.storage.STORAGE_VERSION:
             raise libbe.storage.InvalidStorageVersion(storage_version)
-        s = copy.deepcopy(self.storage)
+        s = copy.deepcopy(bugdir.storage)
         s.writeable = False
         class RevisionedStorage (object):
             def __init__(self, storage, default_revision):
                 self.s = storage
                 self.sget = self.s.get
                 self.schildren = self.s.children
+                self.schanged = self.s.changed
                 self.r = default_revision
             def get(self, *args, **kwargs):
                 if not 'revision' in kwargs or kwargs['revision'] == None:
@@ -318,10 +318,16 @@ class BugDir (list, settings_object.SavedSettingsObject):
                 if not 'revision' in kwargs or kwargs['revision'] == None:
                     kwargs['revision'] = self.r
                 return self.schildren(*args, **kwargs)
+            def changed(self, *args, **kwargs):
+                if not 'revision' in kwargs or kwargs['revision'] == None:
+                    kwargs['revision'] = self.r
+                return self.schanged(*args, **kwargs)
         rs = RevisionedStorage(s, revision)
         s.get = rs.get
         s.children = rs.children
-        dbd = BugDir(s, from_storage=True)
+        s.changed = rs.changed
+        BugDir.__init__(self, s, from_storage=True)
+        self.revision = revision
 #        dbd = copy.copy(self)
 #        dbd.storage = copy.copy(self.storage)
 #        dbd._bug_map = copy.copy(self._bug_map)
@@ -368,7 +374,8 @@ class BugDir (list, settings_object.SavedSettingsObject):
 #                else:
 #                    assert 1==0, 'Unkown type "%s" for id "%s"' % (type, id)
 #        dbd.storage.readable = False # so we won't read in added bugs, etc.
-        return dbd
+#        return dbd
+    
 
 if libbe.TESTING == True:
     class SimpleBugDir (BugDir):
-- 
2.26.2