Mercurial > hgsubversion
comparison tests/test_push_command.py @ 50:80b923ab242b
Drop any pretense of supporting svn 1.4.x.
The quality of the SWIG bindings is just too low for this to work reasonably. In theory, 1.4.x will be supported at a future date by ctypes.
| author | Augie Fackler <durin42@gmail.com> |
|---|---|
| date | Sat, 01 Nov 2008 12:23:07 -0500 |
| parents | 2bc4999a89d3 |
| children | 41dc00c7aef1 |
comparison
equal
deleted
inserted
replaced
| 49:2bc4999a89d3 | 50:80b923ab242b |
|---|---|
| 14 import fetch_command | 14 import fetch_command |
| 15 import push_cmd | 15 import push_cmd |
| 16 import test_util | 16 import test_util |
| 17 import time | 17 import time |
| 18 | 18 |
| 19 # push fails in 1.4-SWIG-land. | 19 |
| 20 push_works = False | 20 class PushOverSvnserveTests(unittest.TestCase): |
| 21 try: | 21 def setUp(self): |
| 22 import csvn | 22 self.oldwd = os.getcwd() |
| 23 push_works = True | 23 self.tmpdir = tempfile.mkdtemp('svnwrap_test') |
| 24 except ImportError: | 24 self.repo_path = '%s/testrepo' % self.tmpdir |
| 25 from svn import core | 25 self.wc_path = '%s/testrepo_wc' % self.tmpdir |
| 26 if (core.SVN_VER_MAJOR, core.SVN_VER_MINOR, core.SVN_VER_MICRO) >= (1, 5, 0): | 26 test_util.load_svndump_fixture(self.repo_path, 'simple_branch.svndump') |
| 27 push_works = True | 27 open(os.path.join(self.repo_path, 'conf', 'svnserve.conf'), |
| 28 | 28 'w').write('[general]\nanon-access=write\n[sasl]\n') |
| 29 if push_works: | 29 # Paranoia: we try and connect to localhost on 3689 before we start |
| 30 class PushOverSvnserveTests(unittest.TestCase): | 30 # svnserve. If it is running, we force the test to fail early. |
| 31 def setUp(self): | 31 user_has_own_svnserve = False |
| 32 self.oldwd = os.getcwd() | 32 try: |
| 33 self.tmpdir = tempfile.mkdtemp('svnwrap_test') | 33 s = socket.socket() |
| 34 self.repo_path = '%s/testrepo' % self.tmpdir | 34 s.settimeout(0.3) |
| 35 self.wc_path = '%s/testrepo_wc' % self.tmpdir | 35 s.connect(('localhost', 3690)) |
| 36 test_util.load_svndump_fixture(self.repo_path, 'simple_branch.svndump') | 36 s.close() |
| 37 open(os.path.join(self.repo_path, 'conf', 'svnserve.conf'), | 37 user_has_own_svnserve = True |
| 38 'w').write('[general]\nanon-access=write\n[sasl]\n') | 38 except: |
| 39 # Paranoia: we try and connect to localhost on 3689 before we start | 39 pass |
| 40 # svnserve. If it is running, we force the test to fail early. | 40 if user_has_own_svnserve: |
| 41 user_has_own_svnserve = False | 41 assert False, ('You appear to be running your own svnserve!' |
| 42 try: | 42 ' You can probably ignore this test failure.') |
| 43 s = socket.socket() | 43 args = ['svnserve', '-d', '--foreground', '-r', self.repo_path] |
| 44 s.settimeout(0.3) | 44 self.svnserve_pid = os.spawnvp(os.P_NOWAIT, 'svnserve', args) |
| 45 s.connect(('localhost', 3690)) | 45 time.sleep(2) |
| 46 s.close() | 46 fetch_command.fetch_revisions(ui.ui(), |
| 47 user_has_own_svnserve = True | 47 svn_url='svn://localhost/', |
| 48 except: | 48 hg_repo_path=self.wc_path) |
| 49 pass | 49 |
| 50 if user_has_own_svnserve: | 50 def tearDown(self): |
| 51 assert False, ('You appear to be running your own svnserve!' | 51 shutil.rmtree(self.tmpdir) |
| 52 ' You can probably ignore this test failure.') | 52 os.chdir(self.oldwd) |
| 53 args = ['svnserve', '-d', '--foreground', '-r', self.repo_path] | 53 os.system('kill -9 %d' % self.svnserve_pid) |
| 54 self.svnserve_pid = os.spawnvp(os.P_NOWAIT, 'svnserve', args) | 54 |
| 55 time.sleep(2) | 55 # define this as a property so that it reloads anytime we need it |
| 56 fetch_command.fetch_revisions(ui.ui(), | 56 @property |
| 57 svn_url='svn://localhost/', | 57 def repo(self): |
| 58 hg_repo_path=self.wc_path) | 58 return hg.repository(ui.ui(), self.wc_path) |
| 59 | 59 |
| 60 def tearDown(self): | 60 def test_push_to_default(self, commit=True): |
| 61 shutil.rmtree(self.tmpdir) | 61 repo = self.repo |
| 62 os.chdir(self.oldwd) | 62 old_tip = repo['tip'].node() |
| 63 os.system('kill -9 %d' % self.svnserve_pid) | 63 expected_parent = repo['default'].node() |
| 64 | 64 def file_callback(repo, memctx, path): |
| 65 # define this as a property so that it reloads anytime we need it | 65 if path == 'adding_file': |
| 66 @property | 66 return context.memfilectx(path=path, |
| 67 def repo(self): | 67 data='foo', |
| 68 return hg.repository(ui.ui(), self.wc_path) | 68 islink=False, |
| 69 | 69 isexec=False, |
| 70 def test_push_to_default(self, commit=True): | 70 copied=False) |
| 71 repo = self.repo | 71 raise IOError() |
| 72 old_tip = repo['tip'].node() | 72 ctx = context.memctx(repo, |
| 73 expected_parent = repo['default'].node() | 73 (repo['default'].node(), node.nullid), |
| 74 def file_callback(repo, memctx, path): | 74 'automated test', |
| 75 if path == 'adding_file': | 75 ['adding_file'], |
| 76 return context.memfilectx(path=path, | 76 file_callback, |
| 77 data='foo', | 77 'an_author', |
| 78 islink=False, | 78 '2008-10-07 20:59:48 -0500', |
| 79 isexec=False, | 79 {'branch': 'default',}) |
| 80 copied=False) | 80 new_hash = repo.commitctx(ctx) |
| 81 raise IOError() | 81 if not commit: |
| 82 ctx = context.memctx(repo, | 82 return # some tests use this test as an extended setup. |
| 83 (repo['default'].node(), node.nullid), | 83 hg.update(repo, repo['tip'].node()) |
| 84 'automated test', | 84 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 85 ['adding_file'], | 85 hg_repo_path=self.wc_path, |
| 86 file_callback, | 86 svn_url='svn://localhost/') |
| 87 'an_author', | 87 tip = self.repo['tip'] |
| 88 '2008-10-07 20:59:48 -0500', | 88 self.assertNotEqual(tip.node(), old_tip) |
| 89 {'branch': 'default',}) | 89 self.assertEqual(tip.parents()[0].node(), expected_parent) |
| 90 new_hash = repo.commitctx(ctx) | 90 self.assertEqual(tip['adding_file'].data(), 'foo') |
| 91 if not commit: | 91 self.assertEqual(tip.branch(), 'default') |
| 92 return # some tests use this test as an extended setup. | 92 |
| 93 hg.update(repo, repo['tip'].node()) | 93 |
| 94 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 94 class PushTests(unittest.TestCase): |
| 95 hg_repo_path=self.wc_path, | 95 def setUp(self): |
| 96 svn_url='svn://localhost/') | 96 self.oldwd = os.getcwd() |
| 97 tip = self.repo['tip'] | 97 self.tmpdir = tempfile.mkdtemp('svnwrap_test') |
| 98 self.assertNotEqual(tip.node(), old_tip) | 98 self.repo_path = '%s/testrepo' % self.tmpdir |
| 99 self.assertEqual(tip.parents()[0].node(), expected_parent) | 99 self.wc_path = '%s/testrepo_wc' % self.tmpdir |
| 100 self.assertEqual(tip['adding_file'].data(), 'foo') | 100 test_util.load_svndump_fixture(self.repo_path, 'simple_branch.svndump') |
| 101 self.assertEqual(tip.branch(), 'default') | 101 fetch_command.fetch_revisions(ui.ui(), |
| 102 | 102 svn_url='file://%s' % self.repo_path, |
| 103 | 103 hg_repo_path=self.wc_path) |
| 104 class PushTests(unittest.TestCase): | 104 |
| 105 def setUp(self): | 105 # define this as a property so that it reloads anytime we need it |
| 106 self.oldwd = os.getcwd() | 106 @property |
| 107 self.tmpdir = tempfile.mkdtemp('svnwrap_test') | 107 def repo(self): |
| 108 self.repo_path = '%s/testrepo' % self.tmpdir | 108 return hg.repository(ui.ui(), self.wc_path) |
| 109 self.wc_path = '%s/testrepo_wc' % self.tmpdir | 109 |
| 110 test_util.load_svndump_fixture(self.repo_path, 'simple_branch.svndump') | 110 def tearDown(self): |
| 111 fetch_command.fetch_revisions(ui.ui(), | 111 shutil.rmtree(self.tmpdir) |
| 112 svn_url='file://%s' % self.repo_path, | 112 os.chdir(self.oldwd) |
| 113 hg_repo_path=self.wc_path) | 113 |
| 114 | 114 def test_push_to_default(self, commit=True): |
| 115 # define this as a property so that it reloads anytime we need it | 115 repo = self.repo |
| 116 @property | 116 old_tip = repo['tip'].node() |
| 117 def repo(self): | 117 expected_parent = repo['default'].node() |
| 118 return hg.repository(ui.ui(), self.wc_path) | 118 def file_callback(repo, memctx, path): |
| 119 | 119 if path == 'adding_file': |
| 120 def tearDown(self): | 120 return context.memfilectx(path=path, |
| 121 shutil.rmtree(self.tmpdir) | 121 data='foo', |
| 122 os.chdir(self.oldwd) | 122 islink=False, |
| 123 | 123 isexec=False, |
| 124 def test_push_to_default(self, commit=True): | 124 copied=False) |
| 125 repo = self.repo | 125 raise IOError() |
| 126 old_tip = repo['tip'].node() | 126 ctx = context.memctx(repo, |
| 127 expected_parent = repo['default'].node() | 127 (repo['default'].node(), node.nullid), |
| 128 def file_callback(repo, memctx, path): | 128 'automated test', |
| 129 if path == 'adding_file': | 129 ['adding_file'], |
| 130 return context.memfilectx(path=path, | 130 file_callback, |
| 131 data='foo', | 131 'an_author', |
| 132 islink=False, | 132 '2008-10-07 20:59:48 -0500', |
| 133 isexec=False, | 133 {'branch': 'default',}) |
| 134 copied=False) | 134 new_hash = repo.commitctx(ctx) |
| 135 raise IOError() | 135 if not commit: |
| 136 ctx = context.memctx(repo, | 136 return # some tests use this test as an extended setup. |
| 137 (repo['default'].node(), node.nullid), | 137 hg.update(repo, repo['tip'].node()) |
| 138 'automated test', | 138 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 139 ['adding_file'], | 139 hg_repo_path=self.wc_path, |
| 140 file_callback, | 140 svn_url='file://'+self.repo_path) |
| 141 'an_author', | 141 tip = self.repo['tip'] |
| 142 '2008-10-07 20:59:48 -0500', | 142 self.assertNotEqual(tip.node(), old_tip) |
| 143 {'branch': 'default',}) | 143 self.assertEqual(tip.parents()[0].node(), expected_parent) |
| 144 new_hash = repo.commitctx(ctx) | 144 self.assertEqual(tip['adding_file'].data(), 'foo') |
| 145 if not commit: | 145 self.assertEqual(tip.branch(), 'default') |
| 146 return # some tests use this test as an extended setup. | 146 |
| 147 hg.update(repo, repo['tip'].node()) | 147 def test_push_two_revs(self): |
| 148 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 148 # set up some work for us |
| 149 hg_repo_path=self.wc_path, | 149 self.test_push_to_default(commit=False) |
| 150 svn_url='file://'+self.repo_path) | 150 repo = self.repo |
| 151 tip = self.repo['tip'] | 151 old_tip = repo['tip'].node() |
| 152 self.assertNotEqual(tip.node(), old_tip) | 152 expected_parent = repo['tip'].parents()[0].node() |
| 153 self.assertEqual(tip.parents()[0].node(), expected_parent) | 153 def file_callback(repo, memctx, path): |
| 154 self.assertEqual(tip['adding_file'].data(), 'foo') | 154 if path == 'adding_file2': |
| 155 self.assertEqual(tip.branch(), 'default') | 155 return context.memfilectx(path=path, |
| 156 | 156 data='foo2', |
| 157 def test_push_two_revs(self): | 157 islink=False, |
| 158 # set up some work for us | 158 isexec=False, |
| 159 self.test_push_to_default(commit=False) | 159 copied=False) |
| 160 repo = self.repo | 160 raise IOError() |
| 161 old_tip = repo['tip'].node() | 161 ctx = context.memctx(repo, |
| 162 expected_parent = repo['tip'].parents()[0].node() | 162 (repo['default'].node(), node.nullid), |
| 163 def file_callback(repo, memctx, path): | 163 'automated test', |
| 164 if path == 'adding_file2': | 164 ['adding_file2'], |
| 165 return context.memfilectx(path=path, | 165 file_callback, |
| 166 data='foo2', | 166 'an_author', |
| 167 islink=False, | 167 '2008-10-07 20:59:48 -0500', |
| 168 isexec=False, | 168 {'branch': 'default',}) |
| 169 copied=False) | 169 new_hash = repo.commitctx(ctx) |
| 170 raise IOError() | 170 hg.update(repo, repo['tip'].node()) |
| 171 ctx = context.memctx(repo, | 171 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 172 (repo['default'].node(), node.nullid), | 172 hg_repo_path=self.wc_path, |
| 173 'automated test', | 173 svn_url='file://'+self.repo_path) |
| 174 ['adding_file2'], | 174 tip = self.repo['tip'] |
| 175 file_callback, | 175 self.assertNotEqual(tip.node(), old_tip) |
| 176 'an_author', | 176 self.assertNotEqual(tip.parents()[0].node(), old_tip) |
| 177 '2008-10-07 20:59:48 -0500', | 177 self.assertEqual(tip.parents()[0].parents()[0].node(), expected_parent) |
| 178 {'branch': 'default',}) | 178 self.assertEqual(tip['adding_file2'].data(), 'foo2') |
| 179 new_hash = repo.commitctx(ctx) | 179 self.assertEqual(tip['adding_file'].data(), 'foo') |
| 180 hg.update(repo, repo['tip'].node()) | 180 self.assertEqual(tip.parents()[0]['adding_file'].data(), 'foo') |
| 181 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 181 try: |
| 182 hg_repo_path=self.wc_path, | 182 self.assertEqual(tip.parents()[0]['adding_file2'].data(), 'foo') |
| 183 svn_url='file://'+self.repo_path) | 183 assert False, "this is impossible, adding_file2 should not be in this manifest." |
| 184 tip = self.repo['tip'] | 184 except revlog.LookupError, e: |
| 185 self.assertNotEqual(tip.node(), old_tip) | 185 pass |
| 186 self.assertNotEqual(tip.parents()[0].node(), old_tip) | 186 self.assertEqual(tip.branch(), 'default') |
| 187 self.assertEqual(tip.parents()[0].parents()[0].node(), expected_parent) | 187 |
| 188 self.assertEqual(tip['adding_file2'].data(), 'foo2') | 188 def test_push_to_branch(self): |
| 189 self.assertEqual(tip['adding_file'].data(), 'foo') | 189 repo = self.repo |
| 190 self.assertEqual(tip.parents()[0]['adding_file'].data(), 'foo') | 190 def file_callback(repo, memctx, path): |
| 191 try: | 191 if path == 'adding_file': |
| 192 self.assertEqual(tip.parents()[0]['adding_file2'].data(), 'foo') | 192 return context.memfilectx(path=path, |
| 193 assert False, "this is impossible, adding_file2 should not be in this manifest." | 193 data='foo', |
| 194 except revlog.LookupError, e: | 194 islink=False, |
| 195 pass | 195 isexec=False, |
| 196 self.assertEqual(tip.branch(), 'default') | 196 copied=False) |
| 197 | 197 raise IOError() |
| 198 def test_push_to_branch(self): | 198 ctx = context.memctx(repo, |
| 199 repo = self.repo | 199 (repo['the_branch'].node(), node.nullid), |
| 200 def file_callback(repo, memctx, path): | 200 'automated test', |
| 201 if path == 'adding_file': | 201 ['adding_file'], |
| 202 return context.memfilectx(path=path, | 202 file_callback, |
| 203 data='foo', | 203 'an_author', |
| 204 islink=False, | 204 '2008-10-07 20:59:48 -0500', |
| 205 isexec=False, | 205 {'branch': 'the_branch',}) |
| 206 copied=False) | 206 new_hash = repo.commitctx(ctx) |
| 207 raise IOError() | 207 #commands.update(ui.ui(), self.repo, node='tip') |
| 208 ctx = context.memctx(repo, | 208 hg.update(repo, repo['tip'].node()) |
| 209 (repo['the_branch'].node(), node.nullid), | 209 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 210 'automated test', | 210 hg_repo_path=self.wc_path, |
| 211 ['adding_file'], | 211 svn_url='file://'+self.repo_path) |
| 212 file_callback, | 212 tip = self.repo['tip'] |
| 213 'an_author', | 213 self.assertNotEqual(tip.node(), new_hash) |
| 214 '2008-10-07 20:59:48 -0500', | 214 self.assertEqual(tip['adding_file'].data(), 'foo') |
| 215 {'branch': 'the_branch',}) | 215 self.assertEqual(tip.branch(), 'the_branch') |
| 216 new_hash = repo.commitctx(ctx) | 216 |
| 217 #commands.update(ui.ui(), self.repo, node='tip') | 217 def test_delete_file(self): |
| 218 hg.update(repo, repo['tip'].node()) | 218 repo = self.repo |
| 219 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 219 def file_callback(repo, memctx, path): |
| 220 hg_repo_path=self.wc_path, | 220 raise IOError() |
| 221 svn_url='file://'+self.repo_path) | 221 old_files = set(repo['default'].manifest().keys()) |
| 222 tip = self.repo['tip'] | 222 ctx = context.memctx(repo, |
| 223 self.assertNotEqual(tip.node(), new_hash) | 223 (repo['default'].node(), node.nullid), |
| 224 self.assertEqual(tip['adding_file'].data(), 'foo') | 224 'automated test', |
| 225 self.assertEqual(tip.branch(), 'the_branch') | 225 ['alpha'], |
| 226 | 226 file_callback, |
| 227 def test_delete_file(self): | 227 'an author', |
| 228 repo = self.repo | 228 '2008-10-29 21:26:00 -0500', |
| 229 def file_callback(repo, memctx, path): | 229 {'branch': 'default', }) |
| 230 raise IOError() | 230 new_hash = repo.commitctx(ctx) |
| 231 old_files = set(repo['default'].manifest().keys()) | 231 hg.update(repo, repo['tip'].node()) |
| 232 ctx = context.memctx(repo, | 232 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 233 (repo['default'].node(), node.nullid), | 233 hg_repo_path=self.wc_path, |
| 234 'automated test', | 234 svn_url='file://' + self.repo_path) |
| 235 ['alpha'], | 235 tip = self.repo['tip'] |
| 236 file_callback, | 236 self.assertEqual(old_files, |
| 237 'an author', | 237 set(tip.manifest().keys() + ['alpha'])) |
| 238 '2008-10-29 21:26:00 -0500', | 238 self.assert_('alpha' not in tip.manifest()) |
| 239 {'branch': 'default', }) | 239 |
| 240 new_hash = repo.commitctx(ctx) | 240 def test_push_executable_file(self): |
| 241 hg.update(repo, repo['tip'].node()) | 241 self.test_push_to_default(commit=True) |
| 242 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 242 repo = self.repo |
| 243 hg_repo_path=self.wc_path, | 243 def file_callback(repo, memctx, path): |
| 244 svn_url='file://' + self.repo_path) | 244 if path == 'gamma': |
| 245 tip = self.repo['tip'] | 245 return context.memfilectx(path=path, |
| 246 self.assertEqual(old_files, | 246 data='foo', |
| 247 set(tip.manifest().keys() + ['alpha'])) | 247 islink=False, |
| 248 self.assert_('alpha' not in tip.manifest()) | 248 isexec=True, |
| 249 | 249 copied=False) |
| 250 def test_push_executable_file(self): | 250 raise IOError() |
| 251 self.test_push_to_default(commit=True) | 251 ctx = context.memctx(repo, |
| 252 repo = self.repo | 252 (repo['tip'].node(), node.nullid), |
| 253 def file_callback(repo, memctx, path): | 253 'message', |
| 254 if path == 'gamma': | 254 ['gamma', ], |
| 255 return context.memfilectx(path=path, | 255 file_callback, |
| 256 data='foo', | 256 'author', |
| 257 islink=False, | 257 '2008-10-29 21:26:00 -0500', |
| 258 isexec=True, | 258 {'branch': 'default', }) |
| 259 copied=False) | 259 new_hash = repo.commitctx(ctx) |
| 260 raise IOError() | 260 hg.update(repo, repo['tip'].node()) |
| 261 ctx = context.memctx(repo, | 261 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 262 (repo['tip'].node(), node.nullid), | 262 hg_repo_path=self.wc_path, |
| 263 'message', | 263 svn_url='file://' + self.repo_path) |
| 264 ['gamma', ], | 264 tip = self.repo['tip'] |
| 265 file_callback, | 265 self.assertNotEqual(tip.node(), new_hash) |
| 266 'author', | 266 self.assert_('@' in tip.user()) |
| 267 '2008-10-29 21:26:00 -0500', | 267 self.assertEqual(tip['gamma'].flags(), 'x') |
| 268 {'branch': 'default', }) | 268 self.assertEqual(tip['gamma'].data(), 'foo') |
| 269 new_hash = repo.commitctx(ctx) | 269 self.assertEqual([x for x in tip.manifest().keys() if 'x' not in |
| 270 hg.update(repo, repo['tip'].node()) | 270 tip[x].flags()], ['alpha', 'beta', 'adding_file', ]) |
| 271 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 271 |
| 272 hg_repo_path=self.wc_path, | 272 def test_push_symlink_file(self): |
| 273 svn_url='file://' + self.repo_path) | 273 self.test_push_to_default(commit=True) |
| 274 tip = self.repo['tip'] | 274 repo = self.repo |
| 275 self.assertNotEqual(tip.node(), new_hash) | 275 def file_callback(repo, memctx, path): |
| 276 self.assert_('@' in tip.user()) | 276 if path == 'gamma': |
| 277 self.assertEqual(tip['gamma'].flags(), 'x') | 277 return context.memfilectx(path=path, |
| 278 self.assertEqual(tip['gamma'].data(), 'foo') | 278 data='foo', |
| 279 self.assertEqual([x for x in tip.manifest().keys() if 'x' not in | 279 islink=True, |
| 280 tip[x].flags()], ['alpha', 'beta', 'adding_file', ]) | 280 isexec=False, |
| 281 | 281 copied=False) |
| 282 def test_push_symlink_file(self): | 282 raise IOError() |
| 283 self.test_push_to_default(commit=True) | 283 ctx = context.memctx(repo, |
| 284 repo = self.repo | 284 (repo['tip'].node(), node.nullid), |
| 285 def file_callback(repo, memctx, path): | 285 'message', |
| 286 if path == 'gamma': | 286 ['gamma', ], |
| 287 return context.memfilectx(path=path, | 287 file_callback, |
| 288 data='foo', | 288 'author', |
| 289 islink=True, | 289 '2008-10-29 21:26:00 -0500', |
| 290 isexec=False, | 290 {'branch': 'default', }) |
| 291 copied=False) | 291 new_hash = repo.commitctx(ctx) |
| 292 raise IOError() | 292 hg.update(repo, repo['tip'].node()) |
| 293 ctx = context.memctx(repo, | 293 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 294 (repo['tip'].node(), node.nullid), | 294 hg_repo_path=self.wc_path, |
| 295 'message', | 295 svn_url='file://' + self.repo_path) |
| 296 ['gamma', ], | 296 tip = self.repo['tip'] |
| 297 file_callback, | 297 self.assertNotEqual(tip.node(), new_hash) |
| 298 'author', | 298 self.assertEqual(tip['gamma'].flags(), 'l') |
| 299 '2008-10-29 21:26:00 -0500', | 299 self.assertEqual(tip['gamma'].data(), 'foo') |
| 300 {'branch': 'default', }) | 300 self.assertEqual([x for x in tip.manifest().keys() if 'l' not in |
| 301 new_hash = repo.commitctx(ctx) | 301 tip[x].flags()], ['alpha', 'beta', 'adding_file', ]) |
| 302 hg.update(repo, repo['tip'].node()) | 302 |
| 303 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 303 def test_push_with_new_dir(self): |
| 304 hg_repo_path=self.wc_path, | 304 self.test_push_to_default(commit=True) |
| 305 svn_url='file://' + self.repo_path) | 305 repo = self.repo |
| 306 tip = self.repo['tip'] | 306 def file_callback(repo, memctx, path): |
| 307 self.assertNotEqual(tip.node(), new_hash) | 307 if path == 'newdir/gamma': |
| 308 self.assertEqual(tip['gamma'].flags(), 'l') | 308 return context.memfilectx(path=path, |
| 309 self.assertEqual(tip['gamma'].data(), 'foo') | 309 data='foo', |
| 310 self.assertEqual([x for x in tip.manifest().keys() if 'l' not in | 310 islink=False, |
| 311 tip[x].flags()], ['alpha', 'beta', 'adding_file', ]) | 311 isexec=False, |
| 312 | 312 copied=False) |
| 313 def test_push_with_new_dir(self): | 313 raise IOError() |
| 314 self.test_push_to_default(commit=True) | 314 ctx = context.memctx(repo, |
| 315 repo = self.repo | 315 (repo['tip'].node(), node.nullid), |
| 316 def file_callback(repo, memctx, path): | 316 'message', |
| 317 if path == 'newdir/gamma': | 317 ['newdir/gamma', ], |
| 318 return context.memfilectx(path=path, | 318 file_callback, |
| 319 data='foo', | 319 'author', |
| 320 islink=False, | 320 '2008-10-29 21:26:00 -0500', |
| 321 isexec=False, | 321 {'branch': 'default', }) |
| 322 copied=False) | 322 new_hash = repo.commitctx(ctx) |
| 323 raise IOError() | 323 hg.update(repo, repo['tip'].node()) |
| 324 ctx = context.memctx(repo, | 324 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 325 (repo['tip'].node(), node.nullid), | 325 hg_repo_path=self.wc_path, |
| 326 'message', | 326 svn_url='file://' + self.repo_path) |
| 327 ['newdir/gamma', ], | 327 tip = self.repo['tip'] |
| 328 file_callback, | 328 self.assertNotEqual(tip.node(), new_hash) |
| 329 'author', | 329 self.assertEqual(tip['newdir/gamma'].data(), 'foo') |
| 330 '2008-10-29 21:26:00 -0500', | 330 |
| 331 {'branch': 'default', }) | 331 def test_push_existing_file_newly_execute(self, execute=True, |
| 332 new_hash = repo.commitctx(ctx) | 332 link=False, expected_flags='x'): |
| 333 hg.update(repo, repo['tip'].node()) | 333 self.test_push_to_default() |
| 334 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 334 repo = self.repo |
| 335 hg_repo_path=self.wc_path, | 335 def file_callback(repo, memctx, path): |
| 336 svn_url='file://' + self.repo_path) | 336 return context.memfilectx(path=path, |
| 337 tip = self.repo['tip'] | 337 data='foo', |
| 338 self.assertNotEqual(tip.node(), new_hash) | 338 islink=link, |
| 339 self.assertEqual(tip['newdir/gamma'].data(), 'foo') | 339 isexec=execute, |
| 340 | 340 copied=False) |
| 341 def test_push_existing_file_newly_execute(self, execute=True, | 341 ctx = context.memctx(repo, |
| 342 link=False, expected_flags='x'): | 342 (repo['default'].node(), node.nullid), |
| 343 self.test_push_to_default() | 343 'message', |
| 344 repo = self.repo | 344 ['alpha', ], |
| 345 def file_callback(repo, memctx, path): | 345 file_callback, |
| 346 return context.memfilectx(path=path, | 346 'author', |
| 347 data='foo', | 347 '2008-1-1 00:00:00 -0500', |
| 348 islink=link, | 348 {'branch': 'default', }) |
| 349 isexec=execute, | 349 new_hash = repo.commitctx(ctx) |
| 350 copied=False) | 350 hg.update(repo, repo['tip'].node()) |
| 351 ctx = context.memctx(repo, | 351 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 352 (repo['default'].node(), node.nullid), | 352 hg_repo_path=self.wc_path, |
| 353 'message', | 353 svn_url='file://' + self.repo_path) |
| 354 ['alpha', ], | 354 tip = self.repo['tip'] |
| 355 file_callback, | 355 self.assertNotEqual(tip.node(), new_hash) |
| 356 'author', | 356 self.assertEqual(tip['alpha'].data(), 'foo') |
| 357 '2008-1-1 00:00:00 -0500', | 357 self.assertEqual(tip.parents()[0]['alpha'].flags(), '') |
| 358 {'branch': 'default', }) | 358 self.assertEqual(tip['alpha'].flags(), expected_flags) |
| 359 new_hash = repo.commitctx(ctx) | 359 # while we're here, double check pushing an already-executable file |
| 360 hg.update(repo, repo['tip'].node()) | 360 # works |
| 361 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | 361 repo = self.repo |
| 362 hg_repo_path=self.wc_path, | 362 def file_callback(repo, memctx, path): |
| 363 svn_url='file://' + self.repo_path) | 363 return context.memfilectx(path=path, |
| 364 tip = self.repo['tip'] | 364 data='bar', |
| 365 self.assertNotEqual(tip.node(), new_hash) | 365 islink=link, |
| 366 self.assertEqual(tip['alpha'].data(), 'foo') | 366 isexec=execute, |
| 367 self.assertEqual(tip.parents()[0]['alpha'].flags(), '') | 367 copied=False) |
| 368 self.assertEqual(tip['alpha'].flags(), expected_flags) | 368 ctx = context.memctx(repo, |
| 369 # while we're here, double check pushing an already-executable file | 369 (repo['default'].node(), node.nullid), |
| 370 # works | 370 'message', |
| 371 repo = self.repo | 371 ['alpha', ], |
| 372 def file_callback(repo, memctx, path): | 372 file_callback, |
| 373 return context.memfilectx(path=path, | 373 'author', |
| 374 data='bar', | 374 '2008-1-1 00:00:00 -0500', |
| 375 islink=link, | 375 {'branch': 'default', }) |
| 376 isexec=execute, | 376 new_hash = repo.commitctx(ctx) |
| 377 copied=False) | 377 hg.update(repo, repo['tip'].node()) |
| 378 ctx = context.memctx(repo, | 378 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, |
| 379 (repo['default'].node(), node.nullid), | 379 hg_repo_path=self.wc_path, |
| 380 'message', | 380 svn_url='file://' + self.repo_path) |
| 381 ['alpha', ], | 381 tip = self.repo['tip'] |
| 382 file_callback, | 382 self.assertNotEqual(tip.node(), new_hash) |
| 383 'author', | 383 self.assertEqual(tip['alpha'].data(), 'bar') |
| 384 '2008-1-1 00:00:00 -0500', | 384 self.assertEqual(tip.parents()[0]['alpha'].flags(), expected_flags) |
| 385 {'branch': 'default', }) | 385 self.assertEqual(tip['alpha'].flags(), expected_flags) |
| 386 new_hash = repo.commitctx(ctx) | 386 |
| 387 hg.update(repo, repo['tip'].node()) | |
| 388 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, | |
| 389 hg_repo_path=self.wc_path, | |
| 390 svn_url='file://' + self.repo_path) | |
| 391 tip = self.repo['tip'] | |
| 392 self.assertNotEqual(tip.node(), new_hash) | |
| 393 self.assertEqual(tip['alpha'].data(), 'bar') | |
| 394 self.assertEqual(tip.parents()[0]['alpha'].flags(), expected_flags) | |
| 395 self.assertEqual(tip['alpha'].flags(), expected_flags) | |
| 396 | |
| 397 else: | |
| 398 class PushTests(unittest.TestCase): | |
| 399 """Dummy so the test runner doesn't get upset. | |
| 400 """ | |
| 401 pass | |
| 402 | 387 |
| 403 def suite(): | 388 def suite(): |
| 404 test_classes = [PushTests, PushOverSvnserveTests] | 389 test_classes = [PushTests, PushOverSvnserveTests] |
| 405 tests = [] | 390 tests = [] |
| 406 # This is the quickest hack I could come up with to load all the tests from | 391 # This is the quickest hack I could come up with to load all the tests from |
