1 # Copyright (C) 2006 Jelmer Vernooij <jelmer@samba.org>
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 from bzrlib.bzrdir import BzrDir
18 from bzrlib.errors import NoSuchRevision
19 from bzrlib.inventory import Inventory
20 from bzrlib.repository import Repository
21 from bzrlib.trace import mutter
22 from bzrlib.tests import TestSkipped, TestCase
25 from fileids import SimpleFileIdMap
26 from tests import TestCaseWithSubversionRepository, RENAMES
28 class TestComplexFileids(TestCaseWithSubversionRepository):
38 def test_simplemove(self):
39 repos_url = self.make_client('d', 'dc')
40 self.build_tree({'dc/foo': "data", "dc/blie": "bloe"})
41 self.client_add("dc/foo")
42 self.client_commit("dc", "My Message")
43 self.client_copy("dc/foo", "dc/bar")
44 self.client_delete("dc/foo")
45 self.build_tree({'dc/bar': "data2"})
46 self.client_commit("dc", "Second Message")
48 repository = Repository.open("svn+"+repos_url)
50 inv1 = repository.get_inventory("svn-v1:1@%s-" % repository.uuid)
51 inv2 = repository.get_inventory("svn-v1:2@%s-" % repository.uuid)
52 mutter('inv1: %r' % inv1.entries())
53 mutter('inv2: %r' % inv2.entries())
55 self.assertEqual(inv1.path2id("foo"), inv2.path2id("bar"))
56 self.assertNotEqual(None, inv1.path2id("foo"))
57 self.assertIs(None, inv2.path2id("foo"))
58 self.assertNotEqual(None, inv2.path2id("bar"))
59 self.assertNotEqual(inv1.path2id("foo"), inv2.path2id("blie"))
60 self.assertNotEqual(inv2.path2id("bar"), inv2.path2id("blie"))
62 def test_simplecopy(self):
63 repos_url = self.make_client('d', 'dc')
64 self.build_tree({'dc/foo': "data", "dc/blie": "bloe"})
65 self.client_add("dc/foo")
66 self.client_add("dc/blie")
67 self.client_commit("dc", "My Message")
68 self.client_copy("dc/foo", "dc/bar")
69 self.build_tree({'dc/bar': "data2"})
70 self.client_commit("dc", "Second Message")
72 bzrdir = BzrDir.open("svn+%s" % repos_url)
73 repository = bzrdir.open_repository()
75 inv1 = repository.get_inventory("svn-v1:1@%s-" % repository.uuid)
76 inv2 = repository.get_inventory("svn-v1:2@%s-" % repository.uuid)
77 self.assertNotEqual(inv1.path2id("foo"), inv2.path2id("bar"))
78 self.assertNotEqual(inv1.path2id("foo"), inv2.path2id("blie"))
79 self.assertIs(None, inv1.path2id("bar"))
80 self.assertNotEqual(None, inv1.path2id("blie"))
82 def test_simpledelete(self):
83 repos_url = self.make_client('d', 'dc')
84 self.build_tree({'dc/foo': "data"})
85 self.client_add("dc/foo")
86 self.client_commit("dc", "My Message")
87 self.client_delete("dc/foo")
88 self.client_commit("dc", "Second Message")
90 bzrdir = BzrDir.open("svn+%s" % repos_url)
91 repository = bzrdir.open_repository()
93 inv1 = repository.get_inventory("svn-v1:1@%s-" % repository.uuid)
94 inv2 = repository.get_inventory("svn-v1:2@%s-" % repository.uuid)
95 self.assertNotEqual(None, inv1.path2id("foo"))
96 self.assertIs(None, inv2.path2id("foo"))
98 def test_replace(self):
99 repos_url = self.make_client('d', 'dc')
100 self.build_tree({'dc/foo': "data"})
101 self.client_add("dc/foo")
102 self.client_commit("dc", "My Message")
103 self.client_delete("dc/foo")
104 self.build_tree({'dc/foo': "data"})
105 self.client_add("dc/foo")
106 self.client_commit("dc", "Second Message")
108 bzrdir = BzrDir.open("svn+"+repos_url)
109 repository = bzrdir.open_repository()
111 inv1 = repository.get_inventory("svn-v1:1@%s-" % repository.uuid)
112 inv2 = repository.get_inventory("svn-v1:2@%s-" % repository.uuid)
113 self.assertNotEqual(inv1.path2id("foo"), inv2.path2id("foo"))
115 def test_copy_branch(self):
116 repos_url = self.make_client('d', 'dc')
117 self.build_tree({'dc/trunk/dir/file': "data", 'dc/branches': None})
118 self.client_add("dc/trunk")
119 self.client_add("dc/branches")
120 self.client_commit("dc", "My Message")
121 self.client_copy("dc/trunk", "dc/branches/mybranch")
122 self.client_commit("dc", "Copy branch")
124 bzrdir = BzrDir.open("svn+"+repos_url + "/branches/mybranch")
125 repository = bzrdir.open_repository()
127 inv1 = repository.get_inventory("svn-v1:1@%s-trunk" % repository.uuid)
128 inv2 = repository.get_inventory("svn-v1:2@%s-branches%%2fmybranch" %
130 self.assertEqual(inv1.path2id("dir"), inv2.path2id("dir"))
131 self.assertEqual(inv1.path2id("dir/file"), inv2.path2id("dir/file"))
133 fileid, revid = repository.path_to_file_id(2,
134 "branches/mybranch/dir/file")
135 self.assertEqual(fileid, inv1.path2id("dir/file"))
136 self.assertEqual("svn-v1:1@%s-trunk" % repository.uuid, revid)
138 class TestFileMapping(TestCase):
139 def apply_mappings(self, mappings):
142 map = SimpleFileIdMap._apply_changes(map, r, mappings[r])
145 def test_simple(self):
146 map = self.apply_mappings({"svn-v1:1@uuid-": {"foo": ('A', None, None)}})
147 self.assertEqual({'': ('TREE_ROOT', 'svn-v1:1@uuid-'),
148 'foo': ('svn-v1:1@uuid--foo', 'svn-v1:1@uuid-')
152 map = self.apply_mappings(
153 {"svn-v1:1@uuid-": {"foo": ('A', None, None),
154 "foo/blie": ('A', None, None),
155 "foo/bla": ('A', None, None)},
156 "svn-v1:2@uuid-": {"foob": ('A', 'foo', 1),
157 "foob/bla": ('M', None, None)}
159 self.assertTrue(map.has_key("foob/bla"))
160 self.assertTrue(map.has_key("foob/blie"))