comparison tests/test_push_dirs.py @ 84:01e747937d35

test_util: add commitchanges() to TestBase
author Patrick Mezard <pmezard@gmail.com>
date Fri, 14 Nov 2008 16:18:24 -0600
parents 6c9b7cf1c5aa
children 05a0c4f6060f
comparison
equal deleted inserted replaced
83:6c9b7cf1c5aa 84:01e747937d35
1 import os
2 import sys
3 import unittest 1 import unittest
4
5 from mercurial import context
6 from mercurial import hg
7 from mercurial import node
8 2
9 import test_util 3 import test_util
10 4
11 class TestPushDirectories(test_util.TestBase): 5 class TestPushDirectories(test_util.TestBase):
12 def setUp(self): 6 def setUp(self):
13 test_util.TestBase.setUp(self) 7 test_util.TestBase.setUp(self)
14 test_util.load_fixture_and_fetch('emptyrepo.svndump', 8 test_util.load_fixture_and_fetch('emptyrepo.svndump',
15 self.repo_path, 9 self.repo_path,
16 self.wc_path) 10 self.wc_path)
17 11
18 def _commitchanges(self, repo, changes): 12 def test_push_dirs(self):
19 parentctx = repo['tip']
20
21 changed, removed = [], []
22 for source, dest, newdata in changes:
23 if dest is None:
24 removed.append(source)
25 else:
26 changed.append(dest)
27
28 def filectxfn(repo, memctx, path):
29 if path in removed:
30 raise IOError()
31 entry = [e for e in changes if path == e[1]][0]
32 source, dest, newdata = entry
33 if newdata is None:
34 newdata = parentctx[source].data()
35 copied = None
36 if source != dest:
37 copied = source
38 return context.memfilectx(path=dest,
39 data=newdata,
40 islink=False,
41 isexec=False,
42 copied=copied)
43
44 ctx = context.memctx(repo,
45 (parentctx.node(), node.nullid),
46 'automated test',
47 changed + removed,
48 filectxfn,
49 'an_author',
50 '2008-10-07 20:59:48 -0500')
51 nodeid = repo.commitctx(ctx)
52 repo = self.repo
53 hg.update(repo, nodeid)
54 return nodeid
55
56 def test_push_dirs(self, commit=True):
57 changes = [ 13 changes = [
58 # Single file in single directory 14 # Single file in single directory
59 ('d1/a', 'd1/a', 'a\n'), 15 ('d1/a', 'd1/a', 'a\n'),
60 # Two files in one directory 16 # Two files in one directory
61 ('d2/a', 'd2/a', 'a\n'), 17 ('d2/a', 'd2/a', 'a\n'),
62 ('d2/b', 'd2/b', 'a\n'), 18 ('d2/b', 'd2/b', 'a\n'),
63 # Single file in empty directory hierarchy 19 # Single file in empty directory hierarchy
64 ('d31/d32/d33/d34/a', 'd31/d32/d33/d34/a', 'a\n'), 20 ('d31/d32/d33/d34/a', 'd31/d32/d33/d34/a', 'a\n'),
65 ('d31/d32/a', 'd31/d32/a', 'a\n'), 21 ('d31/d32/a', 'd31/d32/a', 'a\n'),
66 ] 22 ]
67 self._commitchanges(self.repo, changes) 23 self.commitchanges(changes)
68 self.pushrevisions() 24 self.pushrevisions()
69 self.assertEqual(self.svnls('trunk'), 25 self.assertEqual(self.svnls('trunk'),
70 ['d1', 'd1/a', 'd2', 'd2/a', 'd2/b', 'd31', 26 ['d1', 'd1/a', 'd2', 'd2/a', 'd2/b', 'd31',
71 'd31/d32', 'd31/d32/a', 'd31/d32/d33', 27 'd31/d32', 'd31/d32/a', 'd31/d32/d33',
72 'd31/d32/d33/d34', 'd31/d32/d33/d34/a']) 28 'd31/d32/d33/d34', 'd31/d32/d33/d34/a'])
77 # Remove one file out of two 33 # Remove one file out of two
78 ('d2/a', None, None), 34 ('d2/a', None, None),
79 # Removing this file should remove one empty parent dir too 35 # Removing this file should remove one empty parent dir too
80 ('d31/d32/d33/d34/a', None, None), 36 ('d31/d32/d33/d34/a', None, None),
81 ] 37 ]
82 self._commitchanges(self.repo, changes) 38 self.commitchanges(changes)
83 self.pushrevisions() 39 self.pushrevisions()
84 self.assertEqual(self.svnls('trunk'), 40 self.assertEqual(self.svnls('trunk'),
85 ['d2', 'd2/b', 'd31', 'd31/d32', 'd31/d32/a', 'd31/d32/d33']) 41 ['d2', 'd2/b', 'd31', 'd31/d32', 'd31/d32/a', 'd31/d32/d33'])
86 42
87 def suite(): 43 def suite():