comparison tests/test_push_dirs.py @ 83:6c9b7cf1c5aa

push_cmd: delete empty svn directories, refactor directory creation
author Patrick Mezard <pmezard@gmail.com>
date Fri, 14 Nov 2008 16:18:24 -0600
parents
children 01e747937d35
comparison
equal deleted inserted replaced
82:71de43e9f614 83:6c9b7cf1c5aa
1 import os
2 import sys
3 import unittest
4
5 from mercurial import context
6 from mercurial import hg
7 from mercurial import node
8
9 import test_util
10
11 class TestPushDirectories(test_util.TestBase):
12 def setUp(self):
13 test_util.TestBase.setUp(self)
14 test_util.load_fixture_and_fetch('emptyrepo.svndump',
15 self.repo_path,
16 self.wc_path)
17
18 def _commitchanges(self, repo, changes):
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 = [
58 # Single file in single directory
59 ('d1/a', 'd1/a', 'a\n'),
60 # Two files in one directory
61 ('d2/a', 'd2/a', 'a\n'),
62 ('d2/b', 'd2/b', 'a\n'),
63 # Single file in empty directory hierarchy
64 ('d31/d32/d33/d34/a', 'd31/d32/d33/d34/a', 'a\n'),
65 ('d31/d32/a', 'd31/d32/a', 'a\n'),
66 ]
67 self._commitchanges(self.repo, changes)
68 self.pushrevisions()
69 self.assertEqual(self.svnls('trunk'),
70 ['d1', 'd1/a', 'd2', 'd2/a', 'd2/b', 'd31',
71 'd31/d32', 'd31/d32/a', 'd31/d32/d33',
72 'd31/d32/d33/d34', 'd31/d32/d33/d34/a'])
73
74 changes = [
75 # Remove single file in single directory
76 ('d1/a', None, None),
77 # Remove one file out of two
78 ('d2/a', None, None),
79 # Removing this file should remove one empty parent dir too
80 ('d31/d32/d33/d34/a', None, None),
81 ]
82 self._commitchanges(self.repo, changes)
83 self.pushrevisions()
84 self.assertEqual(self.svnls('trunk'),
85 ['d2', 'd2/b', 'd31', 'd31/d32', 'd31/d32/a', 'd31/d32/d33'])
86
87 def suite():
88 all = [unittest.TestLoader().loadTestsFromTestCase(TestPushDirectories),
89 ]
90 return unittest.TestSuite(all)