annotate tests/test_svnwrap.py @ 481:e5a9c824ffbf

Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
author Risto Kankkunen <risto.kankkunen@iki.fi>
date Wed, 29 Jul 2009 18:03:02 +0300
parents 7fa100ae1a11
children a42fb4f1716a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
1 import imp
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
2 import os
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
3 import subprocess
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
4 import shutil
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
5 import tempfile
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
6 import unittest
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
7
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
8 import test_util
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
9
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
10 from hgsubversion import svnwrap
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
11
481
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
12 import os
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
13 import stat
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
14 def force_rm(path):
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
15 os.chmod(
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
16 path,
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
17 os.stat(path).st_mode | stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
18 )
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
19 os.remove(path)
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
20
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
21 class TestBasicRepoLayout(unittest.TestCase):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
22 def setUp(self):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
23 self.tmpdir = tempfile.mkdtemp('svnwrap_test')
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
24 self.repo_path = '%s/testrepo' % self.tmpdir
478
37304494cd15 No os.spawnvp() in Windows, use subprocess.call() instead
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 347
diff changeset
25 subprocess.call(['svnadmin', 'create', self.repo_path,])
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
26 inp = open(os.path.join(os.path.dirname(__file__), 'fixtures',
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
27 'project_root_at_repo_root.svndump'))
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
28 proc = subprocess.call(['svnadmin', 'load', self.repo_path,],
479
83fcb1cf6d8f Avoid 'ValueError: close_fds is not supported on Windows platforms' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 478
diff changeset
29 stdin=inp,
83fcb1cf6d8f Avoid 'ValueError: close_fds is not supported on Windows platforms' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 478
diff changeset
30 close_fds=test_util.canCloseFds,
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
31 stdout=subprocess.PIPE,
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
32 stderr=subprocess.STDOUT)
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
33 assert proc == 0
480
7fa100ae1a11 Avoid 'Abort: Illegal repository URL' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 479
diff changeset
34 self.repo = svnwrap.SubversionRepo(test_util.fileurl(self.repo_path))
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
35
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
36 def tearDown(self):
481
e5a9c824ffbf Make tearDown() be able to delete read-only files to avoid an exception when removing 'testrepo/db/format'
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 480
diff changeset
37 shutil.rmtree(self.tmpdir, onerror=lambda func, path, e: force_rm(path))
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
38
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
39
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
40 def test_num_revs(self):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
41 revs = list(self.repo.revisions())
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
42 self.assertEqual(len(revs), 7)
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
43 r = revs[1]
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
44 self.assertEqual(r.revnum, 2)
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
45 self.assertEqual(sorted(r.paths.keys()),
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
46 ['trunk/alpha', 'trunk/beta', 'trunk/delta'])
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
47 for r in revs:
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
48 for p in r.paths:
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
49 # make sure these paths are always non-absolute for sanity
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
50 if p:
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
51 assert p[0] != '/'
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
52 revs = list(self.repo.revisions(start=3))
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
53 self.assertEqual(len(revs), 4)
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
54
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
55
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
56 def test_branches(self):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
57 self.assertEqual(self.repo.branches.keys(), ['crazy', 'more_crazy'])
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
58 self.assertEqual(self.repo.branches['crazy'], ('trunk', 2, 4))
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
59 self.assertEqual(self.repo.branches['more_crazy'], ('trunk', 5, 7))
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
60
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
61
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
62 def test_tags(self):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
63 tags = self.repo.tags
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
64 self.assertEqual(tags.keys(), ['rev1'])
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
65 self.assertEqual(tags['rev1'], ('trunk', 2))
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
66
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
67 class TestRootAsSubdirOfRepo(TestBasicRepoLayout):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
68 def setUp(self):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
69 self.tmpdir = tempfile.mkdtemp('svnwrap_test')
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
70 self.repo_path = '%s/testrepo' % self.tmpdir
478
37304494cd15 No os.spawnvp() in Windows, use subprocess.call() instead
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 347
diff changeset
71 subprocess.call(['svnadmin', 'create', self.repo_path,])
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
72 inp = open(os.path.join(os.path.dirname(__file__), 'fixtures',
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
73 'project_root_not_repo_root.svndump'))
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
74 ret = subprocess.call(['svnadmin', 'load', self.repo_path,],
479
83fcb1cf6d8f Avoid 'ValueError: close_fds is not supported on Windows platforms' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 478
diff changeset
75 stdin=inp,
83fcb1cf6d8f Avoid 'ValueError: close_fds is not supported on Windows platforms' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 478
diff changeset
76 close_fds=test_util.canCloseFds,
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
77 stdout=subprocess.PIPE,
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
78 stderr=subprocess.STDOUT)
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
79 assert ret == 0
480
7fa100ae1a11 Avoid 'Abort: Illegal repository URL' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 479
diff changeset
80 self.repo = svnwrap.SubversionRepo(test_util.fileurl(
7fa100ae1a11 Avoid 'Abort: Illegal repository URL' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 479
diff changeset
81 self.repo_path + '/dummyproj'
7fa100ae1a11 Avoid 'Abort: Illegal repository URL' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 479
diff changeset
82 ))
7fa100ae1a11 Avoid 'Abort: Illegal repository URL' exception
Risto Kankkunen <risto.kankkunen@iki.fi>
parents: 479
diff changeset
83
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
84 def suite():
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
85 all = [unittest.TestLoader().loadTestsFromTestCase(TestBasicRepoLayout),
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
86 unittest.TestLoader().loadTestsFromTestCase(TestRootAsSubdirOfRepo)]
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff changeset
87 return unittest.TestSuite(all)