comparison tests/test_push_command.py @ 78:072010a271c6

Fix basic issues with tests on Windows - shutil.rmtree() fails if there are any read-only files (svn store) - Fix files:// URLs - os.spawnvp()/Popen4() do not exist under Windows, use subprocess
author Patrick Mezard <pmezard@gmail.com>
date Sun, 09 Nov 2008 18:08:35 -0600
parents b33940d54fe2
children 83179a183927
comparison
equal deleted inserted replaced
77:ed3dd5bf45da 78:072010a271c6
1 import os 1 import os
2 import shutil
3 import socket 2 import socket
3 import subprocess
4 import tempfile 4 import tempfile
5 import unittest 5 import unittest
6 6
7 from mercurial import context 7 from mercurial import context
8 from mercurial import commands 8 from mercurial import commands
39 pass 39 pass
40 if user_has_own_svnserve: 40 if user_has_own_svnserve:
41 assert False, ('You appear to be running your own svnserve!' 41 assert False, ('You appear to be running your own svnserve!'
42 ' You can probably ignore this test failure.') 42 ' You can probably ignore this test failure.')
43 args = ['svnserve', '-d', '--foreground', '-r', self.repo_path] 43 args = ['svnserve', '-d', '--foreground', '-r', self.repo_path]
44 self.svnserve_pid = os.spawnvp(os.P_NOWAIT, 'svnserve', args) 44 self.svnserve_pid = subprocess.Popen(args).pid
45 time.sleep(2) 45 time.sleep(2)
46 fetch_command.fetch_revisions(ui.ui(), 46 fetch_command.fetch_revisions(ui.ui(),
47 svn_url='svn://localhost/', 47 svn_url='svn://localhost/',
48 hg_repo_path=self.wc_path) 48 hg_repo_path=self.wc_path)
49 49
50 def tearDown(self): 50 def tearDown(self):
51 shutil.rmtree(self.tmpdir) 51 test_util.rmtree(self.tmpdir)
52 os.chdir(self.oldwd) 52 os.chdir(self.oldwd)
53 os.system('kill -9 %d' % self.svnserve_pid) 53 os.system('kill -9 %d' % self.svnserve_pid)
54 54
55 # define this as a property so that it reloads anytime we need it 55 # define this as a property so that it reloads anytime we need it
56 @property 56 @property
95 def setUp(self): 95 def setUp(self):
96 self.oldwd = os.getcwd() 96 self.oldwd = os.getcwd()
97 self.tmpdir = tempfile.mkdtemp('svnwrap_test') 97 self.tmpdir = tempfile.mkdtemp('svnwrap_test')
98 self.repo_path = '%s/testrepo' % self.tmpdir 98 self.repo_path = '%s/testrepo' % self.tmpdir
99 self.wc_path = '%s/testrepo_wc' % self.tmpdir 99 self.wc_path = '%s/testrepo_wc' % self.tmpdir
100 test_util.load_svndump_fixture(self.repo_path, 'simple_branch.svndump') 100 test_util.load_fixture_and_fetch('simple_branch.svndump',
101 fetch_command.fetch_revisions(ui.ui(), 101 self.repo_path,
102 svn_url='file://%s' % self.repo_path, 102 self.wc_path)
103 hg_repo_path=self.wc_path)
104 103
105 # define this as a property so that it reloads anytime we need it 104 # define this as a property so that it reloads anytime we need it
106 @property 105 @property
107 def repo(self): 106 def repo(self):
108 return hg.repository(ui.ui(), self.wc_path) 107 return hg.repository(ui.ui(), self.wc_path)
109 108
109 def pushrevisions(self):
110 push_cmd.push_revisions_to_subversion(
111 ui.ui(), repo=self.repo, hg_repo_path=self.wc_path,
112 svn_url=test_util.fileurl(self.repo_path))
113
110 def tearDown(self): 114 def tearDown(self):
111 shutil.rmtree(self.tmpdir) 115 test_util.rmtree(self.tmpdir)
112 os.chdir(self.oldwd) 116 os.chdir(self.oldwd)
113 117
114 def test_push_to_default(self, commit=True): 118 def test_push_to_default(self, commit=True):
115 repo = self.repo 119 repo = self.repo
116 old_tip = repo['tip'].node() 120 old_tip = repo['tip'].node()
133 {'branch': 'default',}) 137 {'branch': 'default',})
134 new_hash = repo.commitctx(ctx) 138 new_hash = repo.commitctx(ctx)
135 if not commit: 139 if not commit:
136 return # some tests use this test as an extended setup. 140 return # some tests use this test as an extended setup.
137 hg.update(repo, repo['tip'].node()) 141 hg.update(repo, repo['tip'].node())
138 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 142 self.pushrevisions()
139 hg_repo_path=self.wc_path,
140 svn_url='file://'+self.repo_path)
141 tip = self.repo['tip'] 143 tip = self.repo['tip']
142 self.assertNotEqual(tip.node(), old_tip) 144 self.assertNotEqual(tip.node(), old_tip)
143 self.assertEqual(tip.parents()[0].node(), expected_parent) 145 self.assertEqual(tip.parents()[0].node(), expected_parent)
144 self.assertEqual(tip['adding_file'].data(), 'foo') 146 self.assertEqual(tip['adding_file'].data(), 'foo')
145 self.assertEqual(tip.branch(), 'default') 147 self.assertEqual(tip.branch(), 'default')
166 'an_author', 168 'an_author',
167 '2008-10-07 20:59:48 -0500', 169 '2008-10-07 20:59:48 -0500',
168 {'branch': 'default',}) 170 {'branch': 'default',})
169 new_hash = repo.commitctx(ctx) 171 new_hash = repo.commitctx(ctx)
170 hg.update(repo, repo['tip'].node()) 172 hg.update(repo, repo['tip'].node())
171 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 173 self.pushrevisions()
172 hg_repo_path=self.wc_path,
173 svn_url='file://'+self.repo_path)
174 tip = self.repo['tip'] 174 tip = self.repo['tip']
175 self.assertNotEqual(tip.node(), old_tip) 175 self.assertNotEqual(tip.node(), old_tip)
176 self.assertNotEqual(tip.parents()[0].node(), old_tip) 176 self.assertNotEqual(tip.parents()[0].node(), old_tip)
177 self.assertEqual(tip.parents()[0].parents()[0].node(), expected_parent) 177 self.assertEqual(tip.parents()[0].parents()[0].node(), expected_parent)
178 self.assertEqual(tip['adding_file2'].data(), 'foo2') 178 self.assertEqual(tip['adding_file2'].data(), 'foo2')
204 '2008-10-07 20:59:48 -0500', 204 '2008-10-07 20:59:48 -0500',
205 {'branch': 'the_branch',}) 205 {'branch': 'the_branch',})
206 new_hash = repo.commitctx(ctx) 206 new_hash = repo.commitctx(ctx)
207 #commands.update(ui.ui(), self.repo, node='tip') 207 #commands.update(ui.ui(), self.repo, node='tip')
208 hg.update(repo, repo['tip'].node()) 208 hg.update(repo, repo['tip'].node())
209 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 209 self.pushrevisions()
210 hg_repo_path=self.wc_path,
211 svn_url='file://'+self.repo_path)
212 tip = self.repo['tip'] 210 tip = self.repo['tip']
213 self.assertNotEqual(tip.node(), new_hash) 211 self.assertNotEqual(tip.node(), new_hash)
214 self.assertEqual(tip['adding_file'].data(), 'foo') 212 self.assertEqual(tip['adding_file'].data(), 'foo')
215 self.assertEqual(tip.branch(), 'the_branch') 213 self.assertEqual(tip.branch(), 'the_branch')
216 214
227 'an author', 225 'an author',
228 '2008-10-29 21:26:00 -0500', 226 '2008-10-29 21:26:00 -0500',
229 {'branch': 'default', }) 227 {'branch': 'default', })
230 new_hash = repo.commitctx(ctx) 228 new_hash = repo.commitctx(ctx)
231 hg.update(repo, repo['tip'].node()) 229 hg.update(repo, repo['tip'].node())
232 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 230 self.pushrevisions()
233 hg_repo_path=self.wc_path,
234 svn_url='file://' + self.repo_path)
235 tip = self.repo['tip'] 231 tip = self.repo['tip']
236 self.assertEqual(old_files, 232 self.assertEqual(old_files,
237 set(tip.manifest().keys() + ['alpha'])) 233 set(tip.manifest().keys() + ['alpha']))
238 self.assert_('alpha' not in tip.manifest()) 234 self.assert_('alpha' not in tip.manifest())
239 235
256 'author', 252 'author',
257 '2008-10-29 21:26:00 -0500', 253 '2008-10-29 21:26:00 -0500',
258 {'branch': 'default', }) 254 {'branch': 'default', })
259 new_hash = repo.commitctx(ctx) 255 new_hash = repo.commitctx(ctx)
260 hg.update(repo, repo['tip'].node()) 256 hg.update(repo, repo['tip'].node())
261 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 257 self.pushrevisions()
262 hg_repo_path=self.wc_path,
263 svn_url='file://' + self.repo_path)
264 tip = self.repo['tip'] 258 tip = self.repo['tip']
265 self.assertNotEqual(tip.node(), new_hash) 259 self.assertNotEqual(tip.node(), new_hash)
266 self.assert_('@' in tip.user()) 260 self.assert_('@' in tip.user())
267 self.assertEqual(tip['gamma'].flags(), 'x') 261 self.assertEqual(tip['gamma'].flags(), 'x')
268 self.assertEqual(tip['gamma'].data(), 'foo') 262 self.assertEqual(tip['gamma'].data(), 'foo')
288 'author', 282 'author',
289 '2008-10-29 21:26:00 -0500', 283 '2008-10-29 21:26:00 -0500',
290 {'branch': 'default', }) 284 {'branch': 'default', })
291 new_hash = repo.commitctx(ctx) 285 new_hash = repo.commitctx(ctx)
292 hg.update(repo, repo['tip'].node()) 286 hg.update(repo, repo['tip'].node())
293 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 287 self.pushrevisions()
294 hg_repo_path=self.wc_path,
295 svn_url='file://' + self.repo_path)
296 tip = self.repo['tip'] 288 tip = self.repo['tip']
297 self.assertNotEqual(tip.node(), new_hash) 289 self.assertNotEqual(tip.node(), new_hash)
298 self.assertEqual(tip['gamma'].flags(), 'l') 290 self.assertEqual(tip['gamma'].flags(), 'l')
299 self.assertEqual(tip['gamma'].data(), 'foo') 291 self.assertEqual(tip['gamma'].data(), 'foo')
300 self.assertEqual([x for x in tip.manifest().keys() if 'l' not in 292 self.assertEqual([x for x in tip.manifest().keys() if 'l' not in
319 'author', 311 'author',
320 '2008-10-29 21:26:00 -0500', 312 '2008-10-29 21:26:00 -0500',
321 {'branch': 'default', }) 313 {'branch': 'default', })
322 new_hash = repo.commitctx(ctx) 314 new_hash = repo.commitctx(ctx)
323 hg.update(repo, repo['tip'].node()) 315 hg.update(repo, repo['tip'].node())
324 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 316 self.pushrevisions()
325 hg_repo_path=self.wc_path,
326 svn_url='file://' + self.repo_path)
327 tip = self.repo['tip'] 317 tip = self.repo['tip']
328 self.assertNotEqual(tip.node(), new_hash) 318 self.assertNotEqual(tip.node(), new_hash)
329 self.assertEqual(tip['newdir/gamma'].data(), 'foo') 319 self.assertEqual(tip['newdir/gamma'].data(), 'foo')
330 320
331 def test_push_with_new_subdir(self): 321 def test_push_with_new_subdir(self):
380 'author', 370 'author',
381 '2008-1-1 00:00:00 -0500', 371 '2008-1-1 00:00:00 -0500',
382 {'branch': 'default', }) 372 {'branch': 'default', })
383 new_hash = repo.commitctx(ctx) 373 new_hash = repo.commitctx(ctx)
384 hg.update(repo, repo['tip'].node()) 374 hg.update(repo, repo['tip'].node())
385 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 375 self.pushrevisions()
386 hg_repo_path=self.wc_path,
387 svn_url='file://' + self.repo_path)
388 tip = self.repo['tip'] 376 tip = self.repo['tip']
389 self.assertNotEqual(tip.node(), new_hash) 377 self.assertNotEqual(tip.node(), new_hash)
390 self.assertEqual(tip['alpha'].data(), 'foo') 378 self.assertEqual(tip['alpha'].data(), 'foo')
391 self.assertEqual(tip.parents()[0]['alpha'].flags(), '') 379 self.assertEqual(tip.parents()[0]['alpha'].flags(), '')
392 self.assertEqual(tip['alpha'].flags(), expected_flags) 380 self.assertEqual(tip['alpha'].flags(), expected_flags)
407 'author', 395 'author',
408 '2008-1-1 00:00:00 -0500', 396 '2008-1-1 00:00:00 -0500',
409 {'branch': 'default', }) 397 {'branch': 'default', })
410 new_hash = repo.commitctx(ctx) 398 new_hash = repo.commitctx(ctx)
411 hg.update(repo, repo['tip'].node()) 399 hg.update(repo, repo['tip'].node())
412 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 400 self.pushrevisions()
413 hg_repo_path=self.wc_path,
414 svn_url='file://' + self.repo_path)
415 tip = self.repo['tip'] 401 tip = self.repo['tip']
416 self.assertNotEqual(tip.node(), new_hash) 402 self.assertNotEqual(tip.node(), new_hash)
417 self.assertEqual(tip['alpha'].data(), 'bar') 403 self.assertEqual(tip['alpha'].data(), 'bar')
418 self.assertEqual(tip.parents()[0]['alpha'].flags(), expected_flags) 404 self.assertEqual(tip.parents()[0]['alpha'].flags(), expected_flags)
419 self.assertEqual(tip['alpha'].flags(), expected_flags) 405 self.assertEqual(tip['alpha'].flags(), expected_flags)
433 'author', 419 'author',
434 '2008-01-01 00:00:00 -0500', 420 '2008-01-01 00:00:00 -0500',
435 {'branch': 'default', }) 421 {'branch': 'default', })
436 new_hash = repo.commitctx(ctx) 422 new_hash = repo.commitctx(ctx)
437 hg.update(repo, repo['tip'].node()) 423 hg.update(repo, repo['tip'].node())
438 push_cmd.push_revisions_to_subversion(ui.ui(), repo=self.repo, 424 self.pushrevisions()
439 hg_repo_path=self.wc_path,
440 svn_url='file://' + self.repo_path)
441 tip = self.repo['tip'] 425 tip = self.repo['tip']
442 self.assertNotEqual(tip.node(), new_hash) 426 self.assertNotEqual(tip.node(), new_hash)
443 self.assertEqual(tip['alpha'].data(), 'bar') 427 self.assertEqual(tip['alpha'].data(), 'bar')
444 self.assertEqual(tip.parents()[0]['alpha'].flags(), expected_flags) 428 self.assertEqual(tip.parents()[0]['alpha'].flags(), expected_flags)
445 self.assertEqual(tip['alpha'].flags(), '') 429 self.assertEqual(tip['alpha'].flags(), '')