Simplify return values of _apply_changes() functions. They now no longer
authorJelmer Vernooij <jelmer@samba.org>
Fri, 29 Dec 2006 05:17:51 +0000 (06:17 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Fri, 29 Dec 2006 05:17:51 +0000 (06:17 +0100)
return a revision id, as that is always the same.

fetch.py
fileids.py
tests/test_fileids.py

index bc72362901fcec305bcd3dec14fc80729ce95a80..57ceaad4e889a7b15bc8e7e8447ab994edde15b9 100644 (file)
--- a/fetch.py
+++ b/fetch.py
@@ -99,21 +99,19 @@ class RevisionBuildEditor(svn.delta.Editor):
         del self.inventory[self.inventory.path2id(path)]
 
     def close_directory(self, id):
-        revid = self.revid
-
         if id != ROOT_ID:
-            self.inventory[id].revision = revid
+            self.inventory[id].revision = self.revid
 
             file_weave = self.weave_store.get_weave_or_empty(id, self.transact)
-            if not file_weave.has_version(revid):
-                file_weave.add_lines(revid, self.dir_baserev[id], [])
+            if not file_weave.has_version(self.revid):
+                file_weave.add_lines(self.revid, self.dir_baserev[id], [])
 
     def add_directory(self, path, parent_baton, copyfrom_path, copyfrom_revnum, pool):
-        file_id, revision_id = self.id_map[path]
+        file_id = self.id_map[path]
 
         self.dir_baserev[file_id] = []
         ie = self.inventory.add_path(path, 'directory', file_id)
-        ie.revision = revision_id
+        ie.revision = self.revid
 
         return file_id
 
@@ -122,10 +120,9 @@ class RevisionBuildEditor(svn.delta.Editor):
         base_file_id = self.old_inventory.path2id(path)
         base_revid = self.old_inventory[base_file_id].revision
         if self.id_map.has_key(path):
-            file_id, revision_id = self.id_map[path]
+            file_id = self.id_map[path]
         else:
             file_id = base_file_id
-            revision_id = base_rev_id
         if file_id == base_file_id:
             self.dir_baserev[file_id] = [base_revid]
             ie = self.inventory[file_id]
@@ -140,7 +137,7 @@ class RevisionBuildEditor(svn.delta.Editor):
             self.inventory._byid[file_id] = ie
             ie.file_id = file_id
             self.dir_baserev[file_id] = []
-        ie.revision = revision_id
+        ie.revision = self.revid
         return file_id
 
     def change_dir_prop(self, id, name, value, pool):
@@ -200,10 +197,9 @@ class RevisionBuildEditor(svn.delta.Editor):
         base_file_id = self.old_inventory.path2id(path)
         base_revid = self.old_inventory[base_file_id].revision
         if self.id_map.has_key(path):
-            file_id, revid = self.id_map[path]
+            file_id = self.id_map[path]
         else:
             file_id = base_file_id
-            revid = base_rev_id
         self.is_executable = None
         self.is_symlink = (self.inventory[base_file_id].kind == 'symlink')
         file_weave = self.weave_store.get_weave_or_empty(base_file_id, self.transact)
@@ -229,13 +225,12 @@ class RevisionBuildEditor(svn.delta.Editor):
         assert checksum is None or checksum == actual_checksum
 
         if self.id_map.has_key(path):
-            file_id, revision_id = self.id_map[path]
+            file_id = self.id_map[path]
         else:
             file_id = self.old_inventory.path2id(path)
-            revision_id = self.old_inventory[file_id].revision
         file_weave = self.weave_store.get_weave_or_empty(file_id, self.transact)
-        if not file_weave.has_version(revision_id):
-            file_weave.add_lines(revision_id, self.file_parents, lines)
+        if not file_weave.has_version(self.revid):
+            file_weave.add_lines(self.revid, self.file_parents, lines)
 
         if file_id in self.inventory:
             ie = self.inventory[file_id]
@@ -243,7 +238,7 @@ class RevisionBuildEditor(svn.delta.Editor):
             ie = self.inventory.add_path(path, 'symlink', file_id)
         else:
             ie = self.inventory.add_path(path, 'file', file_id)
-        ie.revision = revision_id
+        ie.revision = self.revid
 
         if self.is_symlink:
             ie.symlink_target = lines[0][len("link "):]
index 90dfbe83eceff1cb674a918f2f3ec14bf08287c0..617e63e39cf5ddd186135478f5b484b68fca262d 100644 (file)
@@ -142,14 +142,14 @@ class FileIdMap(object):
                 # found the nearest cached map
                 next_parent_revs = [revid]
                 break
-            else:
-                todo.append((revid, paths))
-                continue
+            todo.append((revid, paths))
     
         # target revision was present
         if len(todo) == 0:
             return map
     
+        if len(map.keys()) == 0:
+            map = {"": (ROOT_ID, None)} # No history -> empty map
         todo.reverse()
 
         i = 0
@@ -166,7 +166,23 @@ class FileIdMap(object):
                     yield self.repos.scheme.unprefix(p)[1]
 
             parent_revs = next_parent_revs
-            map = self._apply_changes(revid, changes, find_children, map)
+            
+            revmap = self._apply_changes(revid, changes, find_children)
+            for p in changes:
+                if changes[p][0] == 'M':
+                    revmap[p] = map[p][0]
+
+            map.update(dict([(x, (revmap[x], revid)) for x in revmap]))
+            # Mark all parent paths as changed
+            for p in revmap:
+                parts = p.split("/")
+                for j in range(1, len(parts)):
+                    parent = "/".join(parts[0:len(parts)-j])
+                    assert map.has_key(parent), "Parent item %s of %s doesn't exist in map" % (parent, p)
+                    if map[parent][1] == revid:
+                        break
+                    map[parent] = map[parent][0], revid
+                    
             next_parent_revs = [revid]
             i = i + 1
 
@@ -179,35 +195,22 @@ class FileIdMap(object):
 
 class SimpleFileIdMap(FileIdMap):
     @staticmethod
-    def _apply_changes(revid, changes, find_children=None, map={}):
+    def _apply_changes(revid, changes, find_children=None):
+        map = {}
         sorted_paths = changes.keys()
         sorted_paths.sort()
         for p in sorted_paths:
             data = changes[p]
 
             if data[0] in ('A', 'R'):
-                map[p] = generate_file_id(revid, p), revid
+                map[p] = generate_file_id(revid, p)
 
                 if data[1] is not None:
                     mutter('%r:%s copied from %r:%s' % (p, revid, data[1], data[2]))
                     assert find_children is not None, 'incomplete data for %r' % p
                     for c in find_children(data[1], data[2]):
                         path = c.replace(data[1], p+"/", 1).replace("//", "/")
-                        map[path] = generate_file_id(revid, c), revid
+                        map[path] = generate_file_id(revid, c)
                         mutter('added mapping %r -> %r' % (path, map[path]))
 
-            elif data[0] == 'M':
-                if p == "":
-                    map[p] = (ROOT_ID, "")
-                assert map.has_key(p), "Map has no item %s to modify" % p
-                map[p] = map[p][0], revid
-            
-            # Mark all parent paths as changed
-            parts = p.split("/")
-            for i in range(1, len(parts)):
-                parent = "/".join(parts[0:len(parts)-i])
-                assert map.has_key(parent), "Parent item %s of %s doesn't exist in map" % (parent, p)
-                if map[parent][1] == revid:
-                    break
-                map[parent] = map[parent][0], revid
         return map
index 7c23f2ba4c47b0f2657f583335914bb0a5916bce..3ba69f6e0f3a11ffdbfa22c11c3ad497b03a808f 100644 (file)
@@ -153,8 +153,8 @@ class TestFileMapping(TestCase):
         revids = mappings.keys()
         revids.sort()
         for r in revids:
-            map = SimpleFileIdMap._apply_changes(r, mappings[r], 
-                                                 find_children, map)
+            revmap = SimpleFileIdMap._apply_changes(r, mappings[r], find_children)
+            map.update(dict([(x,(revmap[x],r)) for x in revmap]))
         return map
 
     def test_simple(self):
@@ -195,4 +195,4 @@ class TestFileMapping(TestCase):
                  ("svn-v%d:2@uuid-" % MAPPING_VERSION): {
                                    "foo/bla": ('M', None, None)}
                 })
-        self.assertEqual("svn-v%d:2@uuid-" % MAPPING_VERSION, map["foo"][1])
+        self.assertEqual("svn-v%d:1@uuid-" % MAPPING_VERSION, map["foo"][1])