Show More
@@ -14,8 +14,6 | |||
|
14 | 14 | # of the files always get updated while the rest of the lines get updated over |
|
15 | 15 | # time. This update happens over many topological branches, some getting merged |
|
16 | 16 | # back. |
|
17 | # | |
|
18 | # Running with `chg` in your path and `CHGHG` set is recommended for speed. | |
|
19 | 17 | |
|
20 | 18 | |
|
21 | 19 | import hashlib |
@@ -25,6 +23,10 import subprocess | |||
|
25 | 23 | import sys |
|
26 | 24 | import tempfile |
|
27 | 25 | |
|
26 | import mercurial.context | |
|
27 | import mercurial.hg | |
|
28 | import mercurial.ui | |
|
29 | ||
|
28 | 30 | BUNDLE_NAME = 'big-file-churn.hg' |
|
29 | 31 | |
|
30 | 32 | # constants for generating the repository |
@@ -218,27 +220,47 def hg(command, *args): | |||
|
218 | 220 | return subprocess.check_call(full_cmd, env=env) |
|
219 | 221 | |
|
220 | 222 | |
|
223 | def write_repo(path): | |
|
224 | """write repository content in memory""" | |
|
225 | repo = mercurial.hg.repository( | |
|
226 | mercurial.ui.ui.load(), | |
|
227 | path=path.encode('utf-8'), | |
|
228 | ) | |
|
229 | nodemap = {None: repo.nodeconstants.nullid} | |
|
230 | with repo.lock(), repo.transaction(b'bundle-generation'): | |
|
231 | for idx, (p1, p2) in GRAPH.items(): | |
|
232 | if sys.stdout.isatty(): | |
|
233 | print("generating commit #%d/%d" % (idx, NB_CHANGESET)) | |
|
234 | ||
|
235 | file_fn = lambda repo, memctx, path: mercurial.context.memfilectx( | |
|
236 | repo, | |
|
237 | memctx, | |
|
238 | path, | |
|
239 | data=b''.join(CONTENT.pop(idx)()), | |
|
240 | ) | |
|
241 | ||
|
242 | mc = mercurial.context.memctx( | |
|
243 | repo, | |
|
244 | (nodemap[p1], nodemap[p2]), | |
|
245 | b'commit #%d' % idx if idx else b'initial commit', | |
|
246 | [FILENAME.encode('ascii')], | |
|
247 | file_fn, | |
|
248 | user=b"test", | |
|
249 | date=(0, 0), | |
|
250 | ) | |
|
251 | nodemap[idx] = repo.commitctx(mc) | |
|
252 | ||
|
253 | ||
|
221 | 254 | def run(target): |
|
222 | 255 | tmpdir = tempfile.mkdtemp(prefix='tmp-hg-test-big-file-bundle-') |
|
223 | 256 | try: |
|
224 | 257 | os.chdir(tmpdir) |
|
225 |
hg( |
|
|
226 | for idx, (p1, p2) in GRAPH.items(): | |
|
227 | if sys.stdout.isatty(): | |
|
228 | print("generating commit #%d/%d" % (idx, NB_CHANGESET)) | |
|
229 | if p1 is not None and p1 != idx - 1: | |
|
230 | hg('update', "%d" % p1) | |
|
231 | if p2 is not None: | |
|
232 | hg('merge', "%d" % p2) | |
|
233 | with open(FILENAME, 'wb') as f: | |
|
234 | # pop the value to let it be garbage collection eventually. | |
|
235 | for line in CONTENT.pop(idx)(): | |
|
236 | f.write(line) | |
|
237 | if idx == 0: | |
|
238 | hg('add', FILENAME) | |
|
239 | hg('commit', '--addremove', '--message', 'initial commit') | |
|
240 | else: | |
|
241 | hg('commit', '--message', 'commit #%d' % idx) | |
|
258 | hg( | |
|
259 | 'init', | |
|
260 | '--config', | |
|
261 | 'format.maxchainlen=%d' % NB_CHANGESET, | |
|
262 | ) | |
|
263 | write_repo(tmpdir) | |
|
242 | 264 | hg('bundle', '--all', target, '--config', 'devel.bundle.delta=p1') |
|
243 | 265 | with open(target, 'rb') as bundle: |
|
244 | 266 | data = bundle.read() |
General Comments 0
You need to be logged in to leave comments.
Login now