Actually use fileid overrides when available.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 3 Jan 2007 10:46:12 +0000 (11:46 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Wed, 3 Jan 2007 10:46:12 +0000 (11:46 +0100)
TODO
fileids.py
tests/test_repos.py

diff --git a/TODO b/TODO
index 776089932192af104ac45b9ac46f529b30d63c0d..bc57fe22de997d1148b5ca873f26c4f23b4a4f5f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,5 @@
 - better tests for get_fileid_map()
+ - better tests for get_local_changes()
 - make scheme name part of revision id
 - fix commits in checkouts somehow
 - fix autorealm repository
index 2ee74cd6a1fb00c64a93fd51464dc828479c782f..70063d8b5bcbe05e747b9fd4b81f3f5a17de8530 100644 (file)
@@ -130,7 +130,7 @@ class FileIdMap(object):
                                         uuid, find_children)
         if find_children is not None:
             def get_children(path, revid):
-                (_, bp, revnum) = parse_svn_revision_id(revid)
+                (bp, revnum) = self.repos.parse_revision_id(revid)
                 for p in find_children(bp+"/"+path, revnum):
                     yield self.repos.scheme.unprefix(p)[1]
         else:
@@ -138,8 +138,12 @@ class FileIdMap(object):
 
         revid = generate_svn_revision_id(uuid, revnum, branch)
 
-        return self._apply_changes(lambda x: generate_file_id(revid, x), 
-                                   changes, get_children)
+        def new_file_id(x):
+            if renames.has_key(x):
+                return renames[x]
+            return generate_file_id(revid, x)
+         
+        return self._apply_changes(new_file_id, changes, get_children)
 
     def get_map(self, uuid, revnum, branch, renames_cb):
         """Make sure the map is up to date until revnum."""
@@ -173,7 +177,7 @@ class FileIdMap(object):
             pb.update('generating file id map', i, len(todo))
 
             def find_children(path, revid):
-                (_, bp, revnum) = parse_svn_revision_id(revid)
+                (bp, revnum) = self.repos.parse_revision_id(revid)
                 for p in self.repos._log.find_children(bp+"/"+path, revnum):
                     yield self.repos.scheme.unprefix(p)[1]
 
@@ -192,6 +196,7 @@ class FileIdMap(object):
                     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("/")
index f74476508648a6765b29ec36d0923b8f27e5beb1..1bde3f541eada4f5e3fb4d6f6d6409602de0b6e3 100644 (file)
@@ -592,6 +592,20 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         renames = repos.revision_fileid_renames("svn-v%d:1@%s-" % (MAPPING_VERSION, repos.uuid))
         self.assertEqual({"test": "bla"}, renames)
 
+    def test_fetch_fileid_renames(self):
+        repos_url = self.make_client('d', 'dc')
+        self.build_tree({'dc/test': "data"})
+        self.client_add("dc/test")
+        self.client_set_prop("dc", "bzr:file-ids", "test\tbla\n")
+        self.client_commit("dc", "Msg")
+
+        oldrepos = Repository.open(repos_url)
+        dir = BzrDir.create("f")
+        newrepos = dir.create_repository()
+        oldrepos.copy_content_into(newrepos)
+        self.assertEqual("bla", newrepos.get_inventory(
+            "svn-v%d:1@%s-" % (MAPPING_VERSION, oldrepos.uuid)).path2id("test"))
+
     def test_fetch_trunk1(self):
         repos_url = self.make_client('d', 'dc')
         self.build_tree({'dc/proj1/trunk/file': "data"})