Mercurial > hgsubversion
comparison tests/test_single_dir_push.py @ 1047:3092b3c109a8
tests: split single directory tests that push & clone in two modules
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Thu, 08 Aug 2013 09:22:10 +0200 |
parents | |
children | 2d7398fffd0d |
comparison
equal
deleted
inserted
replaced
1046:36fe4b316a6b | 1047:3092b3c109a8 |
---|---|
1 import test_util | |
2 | |
3 import errno | |
4 import shutil | |
5 import unittest | |
6 | |
7 from mercurial import commands | |
8 from mercurial import context | |
9 from mercurial import hg | |
10 from mercurial import node | |
11 from mercurial import ui | |
12 | |
13 class TestSingleDirPush(test_util.TestBase): | |
14 def test_push_single_dir(self): | |
15 # Tests simple pushing from default branch to a single dir repo | |
16 repo, repo_path = self.load_and_fetch('branch_from_tag.svndump', | |
17 stupid=False, | |
18 layout='single', | |
19 subdir='') | |
20 def file_callback(repo, memctx, path): | |
21 if path == 'adding_file': | |
22 return context.memfilectx(path=path, | |
23 data='foo', | |
24 islink=False, | |
25 isexec=False, | |
26 copied=False) | |
27 elif path == 'adding_binary': | |
28 return context.memfilectx(path=path, | |
29 data='\0binary', | |
30 islink=False, | |
31 isexec=False, | |
32 copied=False) | |
33 raise IOError(errno.EINVAL, 'Invalid operation: ' + path) | |
34 ctx = context.memctx(repo, | |
35 (repo['tip'].node(), node.nullid), | |
36 'automated test', | |
37 ['adding_file', 'adding_binary'], | |
38 file_callback, | |
39 'an_author', | |
40 '2009-10-19 18:49:30 -0500', | |
41 {'branch': 'default', }) | |
42 repo.commitctx(ctx) | |
43 hg.update(repo, repo['tip'].node()) | |
44 self.pushrevisions() | |
45 self.assertTrue('adding_file' in test_util.svnls(repo_path, '')) | |
46 self.assertEqual('application/octet-stream', | |
47 test_util.svnpropget(repo_path, 'adding_binary', | |
48 'svn:mime-type')) | |
49 # Now add another commit and test mime-type being reset | |
50 changes = [('adding_binary', 'adding_binary', 'no longer binary')] | |
51 self.commitchanges(changes) | |
52 self.pushrevisions() | |
53 self.assertEqual('', test_util.svnpropget(repo_path, 'adding_binary', | |
54 'svn:mime-type')) | |
55 | |
56 def test_push_single_dir_at_subdir(self): | |
57 repo = self._load_fixture_and_fetch('branch_from_tag.svndump', | |
58 stupid=False, | |
59 layout='single', | |
60 subdir='trunk') | |
61 def filectxfn(repo, memctx, path): | |
62 return context.memfilectx(path=path, | |
63 data='contents of %s' % path, | |
64 islink=False, | |
65 isexec=False, | |
66 copied=False) | |
67 ctx = context.memctx(repo, | |
68 (repo['tip'].node(), node.nullid), | |
69 'automated test', | |
70 ['bogus'], | |
71 filectxfn, | |
72 'an_author', | |
73 '2009-10-19 18:49:30 -0500', | |
74 {'branch': 'localhacking', }) | |
75 n = repo.commitctx(ctx) | |
76 self.assertEqual(self.repo['tip']['bogus'].data(), | |
77 'contents of bogus') | |
78 before = repo['tip'].hex() | |
79 hg.update(repo, self.repo['tip'].hex()) | |
80 self.pushrevisions() | |
81 self.assertNotEqual(before, self.repo['tip'].hex()) | |
82 self.assertEqual(self.repo['tip']['bogus'].data(), | |
83 'contents of bogus') | |
84 | |
85 def test_push_single_dir_one_incoming_and_two_outgoing(self): | |
86 # Tests simple pushing from default branch to a single dir repo | |
87 # Pushes two outgoing over one incoming svn rev | |
88 # (used to cause an "unknown revision") | |
89 # This can happen if someone committed to svn since our last pull (race). | |
90 repo, repo_path = self.load_and_fetch('branch_from_tag.svndump', | |
91 stupid=False, | |
92 layout='single', | |
93 subdir='trunk') | |
94 self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'}) | |
95 def file_callback(repo, memctx, path): | |
96 return context.memfilectx(path=path, | |
97 data='data of %s' % path, | |
98 islink=False, | |
99 isexec=False, | |
100 copied=False) | |
101 for fn in ['one', 'two']: | |
102 ctx = context.memctx(repo, | |
103 (repo['tip'].node(), node.nullid), | |
104 'automated test', | |
105 [fn], | |
106 file_callback, | |
107 'an_author', | |
108 '2009-10-19 18:49:30 -0500', | |
109 {'branch': 'default', }) | |
110 repo.commitctx(ctx) | |
111 hg.update(repo, repo['tip'].node()) | |
112 self.pushrevisions(expected_extra_back=1) | |
113 self.assertTrue('trunk/one' in test_util.svnls(repo_path, '')) | |
114 self.assertTrue('trunk/two' in test_util.svnls(repo_path, '')) | |
115 | |
116 def test_push_single_dir_branch(self): | |
117 # Tests local branches pushing to a single dir repo. Creates a fork at | |
118 # tip. The default branch adds a file called default, while branch foo | |
119 # adds a file called foo, then tries to push the foo branch and default | |
120 # branch in that order. | |
121 repo, repo_path = self.load_and_fetch('branch_from_tag.svndump', | |
122 stupid=False, | |
123 layout='single', | |
124 subdir='') | |
125 def file_callback(data): | |
126 def cb(repo, memctx, path): | |
127 if path == data: | |
128 return context.memfilectx(path=path, | |
129 data=data, | |
130 islink=False, | |
131 isexec=False, | |
132 copied=False) | |
133 raise IOError(errno.EINVAL, 'Invalid operation: ' + path) | |
134 return cb | |
135 | |
136 def commit_to_branch(name, parent): | |
137 repo.commitctx(context.memctx(repo, | |
138 (parent, node.nullid), | |
139 'automated test (%s)' % name, | |
140 [name], | |
141 file_callback(name), | |
142 'an_author', | |
143 '2009-10-19 18:49:30 -0500', | |
144 {'branch': name, })) | |
145 | |
146 parent = repo['tip'].node() | |
147 commit_to_branch('default', parent) | |
148 commit_to_branch('foo', parent) | |
149 hg.update(repo, repo['foo'].node()) | |
150 self.pushrevisions() | |
151 repo = self.repo # repo is outdated after the rebase happens, refresh | |
152 self.assertTrue('foo' in test_util.svnls(repo_path, '')) | |
153 self.assertEqual(repo.branchtags().keys(), ['default']) | |
154 # Have to cross to another branch head, so hg.update doesn't work | |
155 commands.update(ui.ui(), | |
156 self.repo, | |
157 self.repo.branchheads('default')[1], | |
158 clean=True) | |
159 self.pushrevisions() | |
160 self.assertTrue('default' in test_util.svnls(repo_path, '')) | |
161 self.assertEquals(len(self.repo.branchheads('default')), 1) | |
162 | |
163 @test_util.requiresoption('branch') | |
164 def test_push_single_dir_renamed_branch(self, stupid=False): | |
165 # Tests pulling and pushing with a renamed branch | |
166 # Based on test_push_single_dir | |
167 repo_path = self.load_svndump('branch_from_tag.svndump') | |
168 cmd = ['clone', '--layout=single', '--branch=flaf'] | |
169 if stupid: | |
170 cmd.append('--stupid') | |
171 cmd += [test_util.fileurl(repo_path), self.wc_path] | |
172 test_util.dispatch(cmd) | |
173 | |
174 def file_callback(repo, memctx, path): | |
175 if path == 'adding_file': | |
176 return context.memfilectx(path=path, | |
177 data='foo', | |
178 islink=False, | |
179 isexec=False, | |
180 copied=False) | |
181 raise IOError(errno.EINVAL, 'Invalid operation: ' + path) | |
182 ctx = context.memctx(self.repo, | |
183 (self.repo['tip'].node(), node.nullid), | |
184 'automated test', | |
185 ['adding_file'], | |
186 file_callback, | |
187 'an_author', | |
188 '2009-10-19 18:49:30 -0500', | |
189 {'branch': 'default', }) | |
190 self.repo.commitctx(ctx) | |
191 hg.update(self.repo, self.repo['tip'].node()) | |
192 self.pushrevisions() | |
193 self.assertTrue('adding_file' in test_util.svnls(repo_path, '')) | |
194 | |
195 self.assertEquals(set(['flaf']), | |
196 set(self.repo[i].branch() for i in self.repo)) | |
197 | |
198 @test_util.requiresoption('branch') | |
199 def test_push_single_dir_renamed_branch_stupid(self): | |
200 self.test_push_single_dir_renamed_branch(True) |