Mercurial > hgsubversion
comparison tests/test_util.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 | 7d10165cf3d9 |
comparison
equal
deleted
inserted
replaced
83:6c9b7cf1c5aa | 84:01e747937d35 |
---|---|
5 import stat | 5 import stat |
6 import tempfile | 6 import tempfile |
7 import unittest | 7 import unittest |
8 import urllib | 8 import urllib |
9 | 9 |
10 from mercurial import context | |
11 from mercurial import hg | |
12 from mercurial import node | |
10 from mercurial import ui | 13 from mercurial import ui |
11 from mercurial import hg | |
12 | 14 |
13 import fetch_command | 15 import fetch_command |
14 import push_cmd | 16 import push_cmd |
15 | 17 |
16 FIXTURES = os.path.join(os.path.abspath(os.path.dirname(__file__)), | 18 FIXTURES = os.path.join(os.path.abspath(os.path.dirname(__file__)), |
93 if p.returncode: | 95 if p.returncode: |
94 raise Exception('svn ls failed on %s: %r' % (path, stderr)) | 96 raise Exception('svn ls failed on %s: %r' % (path, stderr)) |
95 entries = [e.strip('/') for e in stdout.splitlines()] | 97 entries = [e.strip('/') for e in stdout.splitlines()] |
96 entries.sort() | 98 entries.sort() |
97 return entries | 99 return entries |
100 | |
101 def commitchanges(self, changes): | |
102 """Commit changes to mercurial directory | |
103 | |
104 'changes' is a sequence of tuples (source, dest, data). It can look | |
105 like: | |
106 - (source, source, data) to set source content to data | |
107 - (source, dest, None) to set dest content to source one, and mark it as | |
108 copied from source. | |
109 - (source, dest, data) to set dest content to data, and mark it as copied | |
110 from source. | |
111 - (source, None, None) to remove source. | |
112 """ | |
113 repo = self.repo | |
114 parentctx = repo['tip'] | |
115 | |
116 changed, removed = [], [] | |
117 for source, dest, newdata in changes: | |
118 if dest is None: | |
119 removed.append(source) | |
120 else: | |
121 changed.append(dest) | |
122 | |
123 def filectxfn(repo, memctx, path): | |
124 if path in removed: | |
125 raise IOError() | |
126 entry = [e for e in changes if path == e[1]][0] | |
127 source, dest, newdata = entry | |
128 if newdata is None: | |
129 newdata = parentctx[source].data() | |
130 copied = None | |
131 if source != dest: | |
132 copied = source | |
133 return context.memfilectx(path=dest, | |
134 data=newdata, | |
135 islink=False, | |
136 isexec=False, | |
137 copied=copied) | |
138 | |
139 ctx = context.memctx(repo, | |
140 (parentctx.node(), node.nullid), | |
141 'automated test', | |
142 changed + removed, | |
143 filectxfn, | |
144 'an_author', | |
145 '2008-10-07 20:59:48 -0500') | |
146 nodeid = repo.commitctx(ctx) | |
147 repo = self.repo | |
148 hg.update(repo, nodeid) | |
149 return nodeid |