Merge 0.4.
[jelmer/subvertpy.git] / tests / test_repos.py
index 44a63362e89ec337082a0b87aa3b814e6bdab460..df30ac38a5e9de1674815e7cf2900b8f55c0c8e8 100644 (file)
@@ -33,8 +33,10 @@ import os, sys
 
 import format
 from mapping import (escape_svn_path, unescape_svn_path, 
-                     SVN_PROP_BZR_REVISION_ID, SVN_PROP_BZR_BRANCHING_SCHEME)
-from scheme import (TrunkBranchingScheme, NoBranchingScheme, 
+                     SVN_PROP_BZR_REVISION_ID)
+from mapping3 import (SVN_PROP_BZR_BRANCHING_SCHEME, set_branching_scheme,
+                      set_property_scheme, BzrSvnMappingv3)
+from mapping3.scheme import (TrunkBranchingScheme, NoBranchingScheme, 
                     ListBranchingScheme, SingleBranchingScheme)
 from transport import SvnRaTransport
 from tests import TestCaseWithSubversionRepository
@@ -62,7 +64,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.assertEqual([
             ('', {'foo': ('A', None, -1)}, 1), 
             ('', {'': ('A', None, -1)}, 0)],
-            [l[:3] for l in repos.iter_reverse_branch_changes("", 1, NoBranchingScheme())])
+            [(l.branch_path, l.paths, l.revnum) for l in repos.iter_reverse_branch_changes("", 1, NoBranchingScheme())])
 
     def test_make_working_trees(self):
         repos_url = self.make_client("a", "dc")
@@ -93,6 +95,19 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repos = Repository.open(repos_url)
         self.assertFalse(repos.get_physical_lock_status())
 
+    def test_iter_changes_parent_rename(self):
+        repos_url = self.make_client("a", "dc")
+        self.build_tree({'dc/foo/bar': None})
+        self.client_add('dc/foo')
+        self.client_commit('dc', 'a')
+        self.client_update('dc')
+        self.client_copy('dc/foo', 'dc/bla')
+        self.client_commit('dc', 'b')
+        repos = Repository.open(repos_url)
+        ret = list(repos.iter_changes('bla/bar', 2, BzrSvnMappingv3(SingleBranchingScheme('bla/bar'))))
+        self.assertEquals(1, len(ret))
+        self.assertEquals("bla/bar", ret[0][0])
+
     def test_set_make_working_trees(self):
         repos_url = self.make_client("a", "dc")
         repos = Repository.open(repos_url)
@@ -177,14 +192,16 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "commit")
         repos = Repository.open(repos_url)
         self.assertEquals([
-            ('pygments/trunk', {'pygments/trunk': (u'R', 'pykleur/trunk', 2)}, 3),
+            ('pygments/trunk', {'pygments': (u'A', 'pykleur', 1),
+                                'pygments/trunk': (u'R', 'pykleur/trunk', 2),
+                                'pykleur': (u'D', None, -1)}, 3),
             ('pykleur/trunk', {'pykleur/trunk/pykleur/afile': (u'A', None, -1)}, 2),
             ('pykleur/trunk',
                     {'pykleur': (u'A', None, -1),
                      'pykleur/trunk': (u'A', None, -1),
                      'pykleur/trunk/pykleur': (u'A', None, -1)},
              1)],
-            [l[:3] for l in repos.iter_reverse_branch_changes("pygments/trunk", 3, TrunkBranchingScheme(1))])
+            [(l.branch_path, l.paths, l.revnum) for l in repos.iter_reverse_branch_changes("pygments/trunk", 3, TrunkBranchingScheme(1))])
 
     def test_follow_branch_move_single(self):
         repos_url = self.make_client('a', 'dc')
@@ -195,10 +212,11 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_update("dc")
         self.client_commit("dc", "commit")
         repos = Repository.open(repos_url)
+        changes = repos.iter_reverse_branch_changes("pygments", 2, SingleBranchingScheme("pygments"))
         self.assertEquals([('pygments',
               {'pygments/bla': ('A', None, -1), 'pygments': ('A', None, -1)},
                 2)],
-                [l[:3] for l in repos.iter_reverse_branch_changes("pygments", 2, SingleBranchingScheme("pygments"))])
+                [(l.branch_path, l.paths, l.revnum) for l in changes])
 
     def test_history_all(self):
         repos_url = self.make_client("a", "dc")
@@ -210,12 +228,12 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repos = Repository.open(repos_url)
 
         self.assertEqual(2, 
-                   len(list(repos.all_revision_ids(repos.get_mapping()))))
+                   len(list(repos.all_revision_ids(repos.get_layout()))))
 
     def test_all_revs_empty(self):
         repos_url = self.make_client("a", "dc")
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
         self.assertEqual([], list(repos.all_revision_ids()))
 
     def test_all_revs(self):
@@ -230,19 +248,18 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "remove branch")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
         mapping = repos.get_mapping()
         self.assertEqual([
-            repos.generate_revision_id(2, "branches/somebranch", mapping),
-            repos.generate_revision_id(1, "trunk", mapping)], 
+            repos.generate_revision_id(1, "trunk", mapping), 
+            repos.generate_revision_id(2, "branches/somebranch", mapping)],
             list(repos.all_revision_ids()))
 
     def test_follow_history_empty(self):
         repos_url = self.make_client("a", "dc")
         repos = Repository.open(repos_url)
         self.assertEqual([repos.generate_revision_id(0, '', repos.get_mapping())], 
-              list(repos.all_revision_ids(
-                  repos.get_mapping())))
+              list(repos.all_revision_ids(repos.get_layout())))
 
     def test_follow_history_empty_branch(self):
         repos_url = self.make_client("a", "dc")
@@ -251,9 +268,9 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_add("dc/branches")
         self.client_commit("dc", "My Message")
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
         self.assertEqual([repos.generate_revision_id(1, 'trunk', repos.get_mapping())], 
-                list(repos.all_revision_ids(repos.get_mapping())))
+                list(repos.all_revision_ids(repos.get_layout())))
 
     def test_follow_history_follow(self):
         repos_url = self.make_client("a", "dc")
@@ -266,11 +283,12 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "Create branch")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
-        items = list(repos.all_revision_ids(repos.get_mapping()))
-        self.assertEqual([repos.generate_revision_id(2, 'branches/abranch', repos.get_mapping()), 
-                          repos.generate_revision_id(1, 'trunk', repos.get_mapping())], items)
+        items = list(repos.all_revision_ids(repos.get_layout()))
+        self.assertEqual([repos.generate_revision_id(1, 'trunk', repos.get_mapping()),
+                          repos.generate_revision_id(2, 'branches/abranch', repos.get_mapping())
+                          ], items)
 
     def test_branch_log_specific(self):
         repos_url = self.make_client("a", "dc")
@@ -284,7 +302,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "My Message")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
         self.assertEqual(1, len(list(repos.iter_reverse_branch_changes("branches/brancha",
             1, TrunkBranchingScheme()))))
@@ -305,7 +323,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "My Message2")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
         self.assertEqual(1, len(list(repos.iter_reverse_branch_changes("branches/brancha",
             2, TrunkBranchingScheme()))))
@@ -320,13 +338,13 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_add("dc/branches")
         self.client_commit("dc", "My Message")
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
         branches = repos.find_branches()
         self.assertEquals(2, len(branches))
         self.assertEquals(urlutils.join(repos.base, "branches/brancha"), 
-                          branches[0].base)
-        self.assertEquals(urlutils.join(repos.base, "branches/branchab"), 
                           branches[1].base)
+        self.assertEquals(urlutils.join(repos.base, "branches/branchab"), 
+                          branches[0].base)
 
     def test_find_branchpaths_moved(self):
         repos_url = self.make_client("a", "dc")
@@ -341,7 +359,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "My Message 2")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
         self.assertEqual([("tags/branchab", 2, True), 
                           ("tags/brancha", 2, True)], 
@@ -357,7 +375,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "My Message 2")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
         self.assertEqual([("branches/branchb", 2, True)],
                 list(repos.find_branchpaths(TrunkBranchingScheme(), from_revnum=2, 
@@ -405,7 +423,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "My Message 2")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme(1))
+        set_branching_scheme(repos, TrunkBranchingScheme(1))
 
         self.assertEqual([("t2/branches/brancha", 2, True), 
                           ("t2/branches/branchab", 2, True)], 
@@ -415,7 +433,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repos_url = self.make_client("a", "dc")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(NoBranchingScheme())
+        set_branching_scheme(repos, NoBranchingScheme())
 
         self.assertEqual([("", 0, True)], 
                 list(repos.find_branchpaths(NoBranchingScheme(), to_revnum=0)))
@@ -424,7 +442,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repos_url = self.make_client("a", "dc")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(NoBranchingScheme())
+        set_branching_scheme(repos, NoBranchingScheme())
 
         self.assertEqual([("", 0, True)], 
                 list(repos.find_branchpaths(NoBranchingScheme(), to_revnum=0)))
@@ -433,7 +451,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repos_url = self.make_client("a", "dc")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
         self.assertEqual([], 
                 list(repos.find_branchpaths(TrunkBranchingScheme(), to_revnum=0)))
@@ -442,7 +460,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repos_url = self.make_client("a", "dc")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
         self.build_tree({'dc/trunk/foo': "data"})
         self.client_add("dc/trunk")
@@ -455,7 +473,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repos_url = self.make_client("a", "dc")
 
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
 
         self.build_tree({'dc/trunk/foo': "data"})
         self.client_add("dc/trunk")
@@ -552,15 +570,15 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         repository = Repository.open("svn+%s" % repos_url)
         mapping = repository.get_mapping()
         self.assertEqual((),
-                repository.revision_parents(
-                    repository.generate_revision_id(0, "", mapping)))
+                repository.get_revision(
+                    repository.generate_revision_id(0, "", mapping)).parent_ids)
         self.assertEqual((repository.generate_revision_id(0, "", mapping),),
-                repository.revision_parents(
-                    repository.generate_revision_id(1, "", mapping)))
+                repository.get_revision(
+                    repository.generate_revision_id(1, "", mapping)).parent_ids)
         self.assertEqual((repository.generate_revision_id(1, "", mapping),
             "ghostparent"), 
-                repository.revision_parents(
-                    repository.generate_revision_id(2, "", mapping)))
+                repository.get_revision(
+                    repository.generate_revision_id(2, "", mapping)).parent_ids)
  
     def test_revision_svk_parent(self):
         repos_url = self.make_client('d', 'dc')
@@ -571,15 +589,15 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_update("dc")
         self.build_tree({'dc/trunk/foo': "data2"})
         repository = Repository.open("svn+%s" % repos_url)
-        repository.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repository, TrunkBranchingScheme())
         self.client_set_prop("dc/trunk", "svk:merge", 
             "%s:/branches/foo:1\n" % repository.uuid)
         self.client_commit("dc", "Second Message")
         mapping = repository.get_mapping()
         self.assertEqual((repository.generate_revision_id(1, "trunk", mapping),
             repository.generate_revision_id(1, "branches/foo", mapping)), 
-                repository.revision_parents(
-                    repository.generate_revision_id(2, "trunk", mapping)))
+                repository.get_revision(
+                    repository.generate_revision_id(2, "trunk", mapping)).parent_ids)
     
     def test_get_revision(self):
         repos_url = self.make_client('d', 'dc')
@@ -641,9 +659,9 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
     def test_store_branching_scheme(self):
         repos_url = self.make_client('d', 'dc')
         repository = Repository.open(repos_url)
-        repository.set_branching_scheme(TrunkBranchingScheme(42))
+        set_branching_scheme(repository, TrunkBranchingScheme(42))
         repository = Repository.open(repos_url)
-        self.assertEquals("trunk42", str(repository.get_scheme()))
+        self.assertEquals("trunk42", str(repository.get_mapping().scheme))
 
     def test_get_ancestry(self):
         repos_url = self.make_client('d', 'dc')
@@ -720,7 +738,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.build_tree({'dc/trunk/a': "bloe"})
         self.client_commit("dc", "second commit")
         repository = Repository.open(repos_url)
-        repository.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repository, TrunkBranchingScheme())
         mapping = repository.get_mapping()
         self.assertEqual({repository.generate_revision_id(1, "trunk", mapping): (),
                           repository.generate_revision_id(2, "trunk", mapping): (repository.generate_revision_id(1, "trunk", mapping),),
@@ -949,12 +967,12 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "set scheme")
         repository = Repository.open("svn+%s" % repos_url)
         self.assertEquals(ListBranchingScheme(["trunk", "branches/*", "branches/tmp/*"]).branch_list,
-                          repository.get_scheme().branch_list)
+                          repository.get_mapping().scheme.branch_list)
 
     def test_set_property_scheme(self):
         repos_url = self.make_client('d', 'dc')
         repos = Repository.open(repos_url)
-        repos.set_property_scheme(ListBranchingScheme(["bla/*"]))
+        set_property_scheme(repos, ListBranchingScheme(["bla/*"]))
         self.client_update("dc")
         self.assertEquals("bla/*\n", 
                    self.client_get_prop("dc", SVN_PROP_BZR_BRANCHING_SCHEME))
@@ -1026,7 +1044,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.assertEquals([('trunk', {'trunk': (u'M', None, -1)}, 3), 
                            ('trunk', {'trunk': (u'M', None, -1)}, 2), 
                            ('trunk', {'trunk/bla': (u'A', None, -1), 'trunk': (u'A', None, -1)}, 1)], 
-            list(oldrepos.iter_reverse_branch_changes("trunk", 3, TrunkBranchingScheme())))
+                   [(l.branch_path, l.paths, l.revnum) for l in oldrepos.iter_reverse_branch_changes("trunk", 3, TrunkBranchingScheme())])
 
     def test_control_code_msg(self):
         repos_url = self.make_client('d', 'dc')
@@ -1047,7 +1065,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_commit("dc", "foohosts") #4
 
         oldrepos = Repository.open("svn+"+repos_url)
-        oldrepos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(oldrepos, TrunkBranchingScheme())
         dir = BzrDir.create("f",format=format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
@@ -1080,18 +1098,18 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
     def test_set_branching_scheme(self):
         repos_url = self.make_client('d', 'dc')
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(NoBranchingScheme())
+        set_branching_scheme(repos, NoBranchingScheme())
 
     def testlhs_revision_parent_none(self):
         repos_url = self.make_client('d', 'dc')
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(NoBranchingScheme())
-        self.assertEquals(None, repos.lhs_revision_parent("", 0, NoBranchingScheme()))
+        set_branching_scheme(repos, NoBranchingScheme())
+        self.assertEquals(NULL_REVISION, repos.lhs_revision_parent("", 0, NoBranchingScheme()))
 
     def testlhs_revision_parent_first(self):
         repos_url = self.make_client('d', 'dc')
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(NoBranchingScheme())
+        set_branching_scheme(repos, NoBranchingScheme())
         self.build_tree({'dc/adir/afile': "data"})
         self.client_add("dc/adir")
         self.client_commit("dc", "Initial commit")
@@ -1110,7 +1128,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.build_tree({'dc/trunk/adir/afile': "bla"})
         self.client_commit("dc", "Incremental commit")
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme())
+        set_branching_scheme(repos, TrunkBranchingScheme())
         mapping = repos.get_mapping()
         self.assertEquals(repos.generate_revision_id(1, "trunk", mapping), \
                 repos.lhs_revision_parent("trunk", 2, mapping))
@@ -1126,7 +1144,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.build_tree({'dc/de/trunk/adir/afile': "bla"})
         self.client_commit("dc", "Change de")
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme(1))
+        set_branching_scheme(repos, TrunkBranchingScheme(1))
         mapping = repos.get_mapping()
         self.assertEquals(repos.generate_revision_id(1, "py/trunk", mapping), \
                 repos.lhs_revision_parent("de/trunk", 3, mapping))
@@ -1142,7 +1160,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_copy("dc/py/trunk", "dc/de/trunk")
         self.client_commit("dc", "Copy trunk")
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme(1))
+        set_branching_scheme(repos, TrunkBranchingScheme(1))
         mapping = repos.get_mapping()
         self.assertEquals(repos.generate_revision_id(1, "py/trunk", mapping), \
                 repos.lhs_revision_parent("de/trunk", 2, mapping))
@@ -1158,7 +1176,7 @@ class TestSubversionRepositoryWorks(TestCaseWithSubversionRepository):
         self.client_delete("dc/de/trunk/adir")
         self.client_commit("dc", "Another incremental commit")
         repos = Repository.open(repos_url)
-        repos.set_branching_scheme(TrunkBranchingScheme(1))
+        set_branching_scheme(repos, TrunkBranchingScheme(1))
         mapping = repos.get_mapping()
         self.assertEquals(repos.generate_revision_id(1, "py/trunk", mapping), \
                 repos.lhs_revision_parent("de/trunk", 3, mapping))