Rev 325: Simplify return values of _apply_changes() functions. They now no longer in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev

Jelmer Vernooij jelmer at samba.org
Fri Dec 29 05:21:16 GMT 2006


------------------------------------------------------------
revno: 325
revision-id: jelmer at samba.org-20061229051751-j93sydbdguw15i25
parent: jelmer at samba.org-20061229025004-qped8lkugogltskd
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Fri 2006-12-29 06:17:51 +0100
message:
  Simplify return values of _apply_changes() functions. They now no longer 
  return a revision id, as that is always the same.
modified:
  fetch.py                       fetch.py-20060625004942-x2lfaib8ra707a8p-1
  fileids.py                     fileids.py-20060714013623-u5iiyqqnko11grcf-1
  tests/test_fileids.py          test_fileids.py-20060622131341-19gyrlgqy8yl2od5-1
=== modified file 'fetch.py'
--- a/fetch.py	2006-12-29 02:50:04 +0000
+++ b/fetch.py	2006-12-29 05:17:51 +0000
@@ -99,21 +99,19 @@
         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 @@
         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 @@
             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 @@
         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 @@
         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 @@
             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 "):]

=== modified file 'fileids.py'
--- a/fileids.py	2006-12-29 02:50:04 +0000
+++ b/fileids.py	2006-12-29 05:17:51 +0000
@@ -142,14 +142,14 @@
                 # 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 @@
                     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 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

=== modified file 'tests/test_fileids.py'
--- a/tests/test_fileids.py	2006-12-29 02:04:14 +0000
+++ b/tests/test_fileids.py	2006-12-29 05:17:51 +0000
@@ -153,8 +153,8 @@
         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 @@
                  ("svn-v%d:2 at uuid-" % MAPPING_VERSION): {
                                    "foo/bla": ('M', None, None)}
                 })
-        self.assertEqual("svn-v%d:2 at uuid-" % MAPPING_VERSION, map["foo"][1])
+        self.assertEqual("svn-v%d:1 at uuid-" % MAPPING_VERSION, map["foo"][1])




More information about the bazaar-commits mailing list