commands: add debugbundle command
Lists ids contained in a bundle file. Useful for testing bundle-related commands.
--- a/mercurial/commands.py Tue Mar 22 09:22:21 2011 +0100
+++ b/mercurial/commands.py Tue Mar 22 09:22:29 2011 +0100
@@ -1230,6 +1230,44 @@
flags = repo.known([bin(s) for s in ids])
ui.write("%s\n" % ("".join([f and "1" or "0" for f in flags])))
+def debugbundle(ui, bundlepath, all=None, **opts):
+ """lists the contents of a bundle"""
+ f = url.open(ui, bundlepath)
+ try:
+ gen = changegroup.readbundle(f, bundlepath)
+ if all:
+ ui.write("format: id, p1, p2, cset, len(delta)\n")
+
+ def showchunks(named):
+ ui.write("\n%s\n" % named)
+ while 1:
+ chunkdata = gen.parsechunk()
+ if not chunkdata:
+ break
+ node = chunkdata['node']
+ p1 = chunkdata['p1']
+ p2 = chunkdata['p2']
+ cs = chunkdata['cs']
+ delta = chunkdata['data']
+ ui.write("%s %s %s %s %s\n" % (hex(node), hex(p1), hex(p2), hex(cs), len(delta)))
+
+ showchunks("changelog")
+ showchunks("manifest")
+ while 1:
+ fname = gen.chunk()
+ if not fname:
+ break
+ showchunks(fname)
+ else:
+ while 1:
+ chunkdata = gen.parsechunk()
+ if not chunkdata:
+ break
+ node = chunkdata['node']
+ ui.write("%s\n" % hex(node))
+ finally:
+ f.close()
+
def debugpushkey(ui, repopath, namespace, *keyinfo):
'''access the pushkey key/value protocol
@@ -4432,6 +4470,11 @@
('n', 'new-file', None, _('add new file at each rev')),
],
_('[OPTION]... TEXT')),
+ "debugbundle":
+ (debugbundle,
+ [('a', 'all', None, _('show all details')),
+ ],
+ _('FILE')),
"debugcheckstate": (debugcheckstate, [], ''),
"debugcommands": (debugcommands, [], _('[COMMAND]')),
"debugcomplete":
@@ -4824,6 +4867,6 @@
norepo = ("clone init version help debugcommands debugcomplete"
" debugdate debuginstall debugfsinfo debugpushkey debugwireargs"
- " debugknown")
+ " debugknown debugbundle")
optionalrepo = ("identify paths serve showconfig debugancestor debugdag"
" debugdata debugindex debugindexdot")
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-debugbundle.t Tue Mar 22 09:22:29 2011 +0100
@@ -0,0 +1,36 @@
+
+Create a test repository:
+
+ $ hg init repo
+ $ cd repo
+ $ touch a ; hg add a ; hg ci -ma
+ $ touch b ; hg add b ; hg ci -mb
+ $ touch c ; hg add c ; hg ci -mc
+ $ hg bundle --base 0 --rev tip bundle.hg
+ 2 changesets found
+
+Terse output:
+
+ $ hg debugbundle bundle.hg
+ 0e067c57feba1a5694ca4844f05588bb1bf82342
+ 991a3460af53952d10ec8a295d3d2cc2e5fa9690
+
+Verbose output:
+
+ $ hg debugbundle --all bundle.hg
+ format: id, p1, p2, cset, len(delta)
+
+ changelog
+ 0e067c57feba1a5694ca4844f05588bb1bf82342 3903775176ed42b1458a6281db4a0ccf4d9f287a 0000000000000000000000000000000000000000 0e067c57feba1a5694ca4844f05588bb1bf82342 80
+ 991a3460af53952d10ec8a295d3d2cc2e5fa9690 0e067c57feba1a5694ca4844f05588bb1bf82342 0000000000000000000000000000000000000000 991a3460af53952d10ec8a295d3d2cc2e5fa9690 80
+
+ manifest
+ 686dbf0aeca417636fa26a9121c681eabbb15a20 8515d4bfda768e04af4c13a69a72e28c7effbea7 0000000000000000000000000000000000000000 0e067c57feba1a5694ca4844f05588bb1bf82342 55
+ ae25a31b30b3490a981e7b96a3238cc69583fda1 686dbf0aeca417636fa26a9121c681eabbb15a20 0000000000000000000000000000000000000000 991a3460af53952d10ec8a295d3d2cc2e5fa9690 55
+
+ b
+ b80de5d138758541c5f05265ad144ab9fa86d1db 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0e067c57feba1a5694ca4844f05588bb1bf82342 12
+
+ c
+ b80de5d138758541c5f05265ad144ab9fa86d1db 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 991a3460af53952d10ec8a295d3d2cc2e5fa9690 12
+
--- a/tests/test-debugcomplete.t Tue Mar 22 09:22:21 2011 +0100
+++ b/tests/test-debugcomplete.t Tue Mar 22 09:22:29 2011 +0100
@@ -67,6 +67,7 @@
$ hg debugcomplete debug
debugancestor
debugbuilddag
+ debugbundle
debugcheckstate
debugcommands
debugcomplete
@@ -210,6 +211,7 @@
copy: after, force, include, exclude, dry-run
debugancestor:
debugbuilddag: mergeable-file, appended-file, overwritten-file, new-file
+ debugbundle: all
debugcheckstate:
debugcommands:
debugcomplete: options