Merge 0.3.4 release.
[jelmer/subvertpy.git] / tests / test_workingtree.py
index f91291d6b92c2db8f4b26ada80c38001843effb2..fcb6a15ce74afbfca4676499560f138e83cb625f 100644 (file)
@@ -18,8 +18,7 @@
 
 from bzrlib.bzrdir import BzrDir
 from bzrlib.errors import NoSuchFile
-from bzrlib.inventory import Inventory, ROOT_ID
-from bzrlib.revision import NULL_REVISION
+from bzrlib.inventory import Inventory
 from bzrlib.trace import mutter
 from bzrlib.workingtree import WorkingTree
 
@@ -28,7 +27,9 @@ import svn.wc
 
 import os
 
+from fileids import generate_svn_file_id
 from repository import MAPPING_VERSION
+from transport import svn_config
 from tests import TestCaseWithSubversionRepository, RENAMES
 
 class TestWorkingTree(TestCaseWithSubversionRepository):
@@ -36,18 +37,18 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
         self.client_add("dc/bl")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["bl"])
 
     def test_add_unexisting(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertRaises(NoSuchFile, tree.add, ["bl"])
 
     def test_add(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["bl"])
 
         inv = tree.read_working_inventory()
@@ -58,7 +59,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_add_nolist(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add("bl")
 
         inv = tree.read_working_inventory()
@@ -69,7 +70,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_add_nolist_withid(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add("bl", "bloe")
 
         inv = tree.read_working_inventory()
@@ -81,7 +82,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_add_not_recursive(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl/file": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["bl"])
 
         tree = WorkingTree.open("dc")
@@ -91,7 +92,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_add_nested(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl/file": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["bl", "bl/file"])
 
         tree = WorkingTree.open("dc")
@@ -100,29 +101,29 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
 
     def test_lock_write(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.lock_write()
 
     def test_lock_read(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.lock_read()
 
     def test_unlock(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.unlock()
 
     def test_get_ignore_list_empty(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
-        self.assertEqual(set([".svn"] + svn.core.SVN_CONFIG_DEFAULT_GLOBAL_IGNORES.split(" ")), tree.get_ignore_list())
+        tree = self.open_checkout("dc")
+        self.assertEqual(set([".svn"] + svn.wc.get_default_ignores(svn_config)), tree.get_ignore_list())
 
     def test_get_ignore_list_onelevel(self):
         self.make_client('a', 'dc')
         self.client_set_prop("dc", "svn:ignore", "*.d\n*.c\n")
-        tree = WorkingTree.open("dc")
-        self.assertEqual(set([".svn"] + svn.core.SVN_CONFIG_DEFAULT_GLOBAL_IGNORES.split(" ") + ["./*.d", "./*.c"]), tree.get_ignore_list())
+        tree = self.open_checkout("dc")
+        self.assertEqual(set([".svn"] + svn.wc.get_default_ignores(svn_config) + ["./*.d", "./*.c"]), tree.get_ignore_list())
 
     def test_get_ignore_list_morelevel(self):
         self.make_client('a', 'dc')
@@ -130,13 +131,13 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.build_tree({'dc/x': None})
         self.client_add("dc/x")
         self.client_set_prop("dc/x", "svn:ignore", "*.e\n")
-        tree = WorkingTree.open("dc")
-        self.assertEqual(set([".svn"] + svn.core.SVN_CONFIG_DEFAULT_GLOBAL_IGNORES.split(" ") + ["./*.d", "./*.c", "./x/*.e"]), tree.get_ignore_list())
+        tree = self.open_checkout("dc")
+        self.assertEqual(set([".svn"] + svn.wc.get_default_ignores(svn_config) + ["./*.d", "./*.c", "./x/*.e"]), tree.get_ignore_list())
 
     def test_add_reopen(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["bl"])
 
         inv = WorkingTree.open("dc").read_working_inventory()
@@ -145,7 +146,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_remove(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["bl"])
         tree.remove(["bl"])
         inv = tree.read_working_inventory()
@@ -154,7 +155,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_remove_dup(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["bl"])
         os.remove("dc/bl")
         inv = tree.read_working_inventory()
@@ -162,7 +163,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
 
     def test_is_control_file(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertTrue(tree.is_control_filename(".svn"))
         self.assertFalse(tree.is_control_filename(".bzr"))
 
@@ -182,7 +183,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.build_tree({"dc/bl": "data"})
         self.client_add("dc/bl")
         self.client_commit("dc", "Bla")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.rename_one("bl", "bloe")
         
         basis_inv = tree.basis_tree().inventory
@@ -196,9 +197,15 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
 
     def test_empty_basis_tree(self):
         self.make_client('a', 'dc')
-        wt = WorkingTree.open("dc")
-        self.assertEqual(NULL_REVISION, wt.basis_tree().inventory.revision_id)
-        self.assertEqual(Inventory(), wt.basis_tree().inventory)
+        wt = self.open_checkout("dc")
+        self.assertEqual(wt.branch.generate_revision_id(0), 
+                         wt.basis_tree().inventory.revision_id)
+        inv = Inventory()
+        root_id = generate_svn_file_id(wt.branch.repository.uuid, 0, "", "")
+        inv.revision_id = wt.branch.generate_revision_id(0)
+        inv.add_path('', 'directory', root_id).revision = inv.revision_id
+                              
+        self.assertEqual(inv, wt.basis_tree().inventory)
 
     def test_basis_tree(self):
         self.make_client('a', 'dc')
@@ -206,7 +213,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.client_add("dc/bl")
         self.client_commit("dc", "Bla")
         self.client_update("dc")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertEqual(
             tree.branch.generate_revision_id(1),
             tree.basis_tree().get_revision_id())
@@ -218,7 +225,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.client_add("dc/a")
         self.client_add("dc/dir")
         self.client_commit("dc", "Bla")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.move(["bl", "a"], "dir")
         
         basis_inv = tree.basis_tree().inventory
@@ -240,7 +247,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_pending_merges_empty(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertEqual([], tree.pending_merges())
  
     def test_delta(self):
@@ -250,7 +257,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.build_tree({"dc/bl": "data"})
         self.client_commit("dc", "Bla")
         self.build_tree({"dc/bl": "data2"})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.basis_tree()
         delta = tree.changes_from(tree.basis_tree())
         self.assertEqual("bl", delta.modified[0][0])
@@ -263,9 +270,9 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.client_commit("dc", "bla")
         self.build_tree({"dc/test": "data"})
         self.client_add("dc/test")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         inv = tree.read_working_inventory()
-        self.assertEqual(ROOT_ID, inv.path2id(""))
+        self.assertEqual(inv.path2id(""), inv.root.file_id)
         self.assertTrue(inv.path2id("foo") != "")
         self.assertTrue(inv.has_filename("bl"))
         self.assertTrue(inv.has_filename("foo"))
@@ -280,7 +287,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.client_commit("dc", "bla")
         self.client_set_prop("dc", "svn:ignore", "foo\nbar\n")
 
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         ignorelist = tree.get_ignore_list()
         self.assertTrue("./bl/test.*" in ignorelist)
         self.assertTrue("./foo" in ignorelist)
@@ -294,7 +301,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.client_commit("dc", "bla")
         self.client_set_prop("dc", "svn:ignore", "foo\nbar\n")
 
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertTrue(tree.is_ignored("bl/test.foo"))
         self.assertFalse(tree.is_ignored("bl/notignored"))
         self.assertTrue(tree.is_ignored("foo"))
@@ -303,28 +310,28 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
 
     def test_ignore_controldir(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertEqual([], list(tree.unknowns()))
 
     def test_unknowns(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": None})
 
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertEqual(['bl'], list(tree.unknowns()))
 
     def test_unknown_not_added(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": None})
 
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertFalse(tree.inventory.has_filename("bl"))
 
     def test_extras(self):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": None})
 
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertEqual(['.svn', 'bl'], list(tree.extras()))
 
     def test_executable(self):
@@ -332,7 +339,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.build_tree({"dc/bla": "data"})
         self.client_add("dc/bla")
         self.client_set_prop("dc/bla", "svn:executable", "*")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         inv = tree.read_working_inventory()
         self.assertTrue(inv[inv.path2id("bla")].executable)
 
@@ -340,7 +347,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.make_client('a', 'dc')
         os.symlink("target", "dc/bla")
         self.client_add("dc/bla")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         inv = tree.read_working_inventory()
         self.assertEqual('symlink', inv[inv.path2id("bla")].kind)
         self.assertEqual("target", inv[inv.path2id("bla")].symlink_target)
@@ -349,7 +356,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": None})
 
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.set_pending_merges(["a", "c"])
         self.assertEqual(["a", "c"], tree.pending_merges())
         tree.set_pending_merges([])
@@ -360,7 +367,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.build_tree({"dc/bl": None})
         self.client_add("dc/bl")
         
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.set_pending_merges([
             "svn-v%d:1@a-uuid-foo-branch%%2fpath" % MAPPING_VERSION, "c"])
         self.assertEqual(
@@ -372,9 +379,9 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.build_tree({"dc/bl": None})
         self.client_add("dc/bl")
         
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.set_pending_merges([
-            "svn-v%d:1@a-uuid-foo-branch%%2fpath" % MAPPING_VERSION, "c"])
+            "svn-v%d-undefined:a-uuid-foo:branch%%2fpath:1" % MAPPING_VERSION, "c"])
         self.assertEqual("a-uuid-foo:/branch/path:1\n", 
                          self.client_get_prop("dc", "svk:merge"))
 
@@ -382,7 +389,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
         self.client_add("dc/bl")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.basis_tree()
         tree.commit(message_callback=lambda x: "data")
 
@@ -390,7 +397,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
         self.client_add("dc/bl")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.basis_tree()
         tree.commit(message_callback=lambda x: u"data")
 
@@ -398,7 +405,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
         self.client_add("dc/bl")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         orig_tree = tree.basis_tree()
         tree.commit(message=u"data")
 
@@ -408,7 +415,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.client_add("dc/branches")
         self.client_commit("dc", "initial changes")
         self.make_checkout(repos_url + "/branches/foobranch", "de")
-        tree = WorkingTree.open("de")
+        tree = self.open_checkout("de")
         self.build_tree({'de/file': "foo"})
         tree.basis_tree()
         tree.commit(message="data")
@@ -417,7 +424,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
         self.make_client('a', 'dc')
         self.build_tree({"dc/bl": "data"})
         self.client_add("dc/bl")
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         orig_tree = tree.basis_tree()
         tree.commit(message="data")
         self.assertEqual(
@@ -434,14 +441,14 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
 
     def test_status(self):
         self.make_client('a', 'dc')
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         self.assertTrue(os.path.exists("dc/.svn"))
         self.assertFalse(os.path.exists("dc/.bzr"))
         tree.read_working_inventory()
 
     def test_status_bzrdir(self):
         self.make_client('a', 'dc')
-        bzrdir = BzrDir.open("dc")
+        bzrdir = self.open_checkout_bzrdir("dc")
         self.assertTrue(os.path.exists("dc/.svn"))
         self.assertTrue(not os.path.exists("dc/.bzr"))
         bzrdir.open_workingtree()
@@ -449,7 +456,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_file_id_consistent(self):
         self.make_client('a', 'dc')
         self.build_tree({'dc/file': 'data'})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["file"])
         oldid = tree.inventory.path2id("file")
         tree = WorkingTree.open("dc")
@@ -459,7 +466,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_file_id_kept(self):
         self.make_client('a', 'dc')
         self.build_tree({'dc/file': 'data'})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["file"], ["fooid"])
         self.assertEqual("fooid", tree.inventory.path2id("file"))
         tree = WorkingTree.open("dc")
@@ -468,7 +475,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_file_rename_id(self):
         self.make_client('a', 'dc')
         self.build_tree({'dc/file': 'data'})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["file"], ["fooid"])
         tree.commit("msg")
         tree.rename_one("file", "file2")
@@ -480,7 +487,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_file_id_kept_2(self):
         self.make_client('a', 'dc')
         self.build_tree({'dc/file': 'data', 'dc/other': 'blaid'})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["file", "other"], ["fooid", "blaid"])
         self.assertEqual("fooid", tree.inventory.path2id("file"))
         self.assertEqual("blaid", tree.inventory.path2id("other"))
@@ -488,7 +495,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_file_remove_id(self):
         self.make_client('a', 'dc')
         self.build_tree({'dc/file': 'data'})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["file"], ["fooid"])
         tree.commit("msg")
         tree.remove(["file"])
@@ -499,7 +506,7 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_file_move_id(self):
         self.make_client('a', 'dc')
         self.build_tree({'dc/file': 'data', 'dc/dir': None})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["file", "dir"], ["fooid", "blaid"])
         tree.commit("msg")
         tree.move(["file"], "dir")
@@ -512,9 +519,16 @@ class TestWorkingTree(TestCaseWithSubversionRepository):
     def test_escaped_char_filename(self):
         self.make_client('a', 'dc')
         self.build_tree({'dc/file with spaces': 'data'})
-        tree = WorkingTree.open("dc")
+        tree = self.open_checkout("dc")
         tree.add(["file with spaces"], ["fooid"])
         tree.commit("msg")
         self.assertEqual("fooid", tree.inventory.path2id("file with spaces"))
 
+    def test_get_branch_nick(self):
+        self.make_client('a', 'dc')
+        self.build_tree({'dc/some strange file': 'data'})
+        tree = self.open_checkout("dc")
+        tree.add(["some strange file"])
+        tree.commit("message")
+        self.assertEqual(None, tree.branch.nick)