Mercurial > hg
changeset 39282:828a45233036
debugcommands: introduce debugrevlogindex (BC)
`hg debugindex` was originally invented for displaying revlog index
data and is highly tailored towards that. e.g. it accepts a --format
option to display index data for a particular revlog version and
displays things like offset and length.
As we support non-revlog storage, it makes sense for `hg debugindex`
to display generic index data and for there to exist storage-specific
or storage-aware debug* commands for dumping non-generic index data.
This commit effectively renames `hg debugindex` to
`hg debugrevlogindex` and replaces `hg debugindex` with a version that
is storage agnostic.
Tests using --format have been updated to use `hg debugrevlogindex`.
Output is backwards compatible. The replacement command uses the
formatter, which means output can be templatized.
At some point, we may want to tweak output (e.g. to add the revision
size). But I don't feel like taking a bigger BC break at the moment.
The renamed command/function had to be moved because check-code
enforces alphabetical ordering of commands in this file.
Differential Revision: https://phab.mercurial-scm.org/D4358
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 21 Aug 2018 00:01:54 +0000 |
parents | dd6bc2509bdc |
children | 71575a1e197e |
files | mercurial/debugcommands.py tests/test-clone-r.t tests/test-completion.t tests/test-debugcommands.t tests/test-help.t tests/test-parseindex.t tests/test-revlog.t |
diffstat | 7 files changed, 132 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/debugcommands.py Mon Aug 20 23:08:57 2018 +0000 +++ b/mercurial/debugcommands.py Tue Aug 21 00:01:54 2018 +0000 @@ -1108,70 +1108,41 @@ else: ui.write(_("%s is not ignored\n") % m.uipath(f)) -@command('debugindex', cmdutil.debugrevlogopts + - [('f', 'format', 0, _('revlog format'), _('FORMAT'))], - _('[-f FORMAT] -c|-m|FILE'), - optionalrepo=True) +@command('debugindex', cmdutil.debugrevlogopts + cmdutil.formatteropts, + _('-c|-m|FILE')) def debugindex(ui, repo, file_=None, **opts): - """dump the contents of an index file""" + """dump index data for a storage primitive""" opts = pycompat.byteskwargs(opts) - r = cmdutil.openrevlog(repo, 'debugindex', file_, opts) - format = opts.get('format', 0) - if format not in (0, 1): - raise error.Abort(_("unknown format %d") % format) + store = cmdutil.openstorage(repo, 'debugindex', file_, opts) if ui.debugflag: shortfn = hex else: shortfn = short - # There might not be anything in r, so have a sane default idlen = 12 - for i in r: - idlen = len(shortfn(r.node(i))) + for i in store: + idlen = len(shortfn(store.node(i))) break - if format == 0: - if ui.verbose: - ui.write((" rev offset length linkrev" - " %s %s p2\n") % ("nodeid".ljust(idlen), - "p1".ljust(idlen))) - else: - ui.write((" rev linkrev %s %s p2\n") % ( - "nodeid".ljust(idlen), "p1".ljust(idlen))) - elif format == 1: - if ui.verbose: - ui.write((" rev flag offset length size link p1" - " p2 %s\n") % "nodeid".rjust(idlen)) - else: - ui.write((" rev flag size link p1 p2 %s\n") % - "nodeid".rjust(idlen)) - - for i in r: - node = r.node(i) - if format == 0: - try: - pp = r.parents(node) - except Exception: - pp = [nullid, nullid] - if ui.verbose: - ui.write("% 6d % 9d % 7d % 7d %s %s %s\n" % ( - i, r.start(i), r.length(i), r.linkrev(i), - shortfn(node), shortfn(pp[0]), shortfn(pp[1]))) - else: - ui.write("% 6d % 7d %s %s %s\n" % ( - i, r.linkrev(i), shortfn(node), shortfn(pp[0]), - shortfn(pp[1]))) - elif format == 1: - pr = r.parentrevs(i) - if ui.verbose: - ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d %s\n" % ( - i, r.flags(i), r.start(i), r.length(i), r.rawsize(i), - r.linkrev(i), pr[0], pr[1], shortfn(node))) - else: - ui.write("% 6d %04x % 8d % 6d % 6d % 6d %s\n" % ( - i, r.flags(i), r.rawsize(i), r.linkrev(i), pr[0], pr[1], - shortfn(node))) + fm = ui.formatter('debugindex', opts) + fm.plain(b' rev linkrev %s %s p2\n' % ( + b'nodeid'.ljust(idlen), + b'p1'.ljust(idlen))) + + for rev in store: + node = store.node(rev) + parents = store.parents(node) + + fm.startitem() + fm.write(b'rev', b'%6d ', rev) + fm.write(b'linkrev', '%7d ', store.linkrev(rev)) + fm.write(b'node', '%s ', shortfn(node)) + fm.write(b'p1', '%s ', shortfn(parents[0])) + fm.write(b'p2', '%s', shortfn(parents[1])) + fm.plain(b'\n') + + fm.end() @command('debugindexdot', cmdutil.debugrevlogopts, _('-c|-m|FILE'), optionalrepo=True) @@ -2334,6 +2305,71 @@ ui.write(('deltas against other : ') + fmt % pcfmt(numother, numdeltas)) +@command('debugrevlogindex', cmdutil.debugrevlogopts + + [('f', 'format', 0, _('revlog format'), _('FORMAT'))], + _('[-f FORMAT] -c|-m|FILE'), + optionalrepo=True) +def debugrevlogindex(ui, repo, file_=None, **opts): + """dump the contents of a revlog index""" + opts = pycompat.byteskwargs(opts) + r = cmdutil.openrevlog(repo, 'debugrevlogindex', file_, opts) + format = opts.get('format', 0) + if format not in (0, 1): + raise error.Abort(_("unknown format %d") % format) + + if ui.debugflag: + shortfn = hex + else: + shortfn = short + + # There might not be anything in r, so have a sane default + idlen = 12 + for i in r: + idlen = len(shortfn(r.node(i))) + break + + if format == 0: + if ui.verbose: + ui.write((" rev offset length linkrev" + " %s %s p2\n") % ("nodeid".ljust(idlen), + "p1".ljust(idlen))) + else: + ui.write((" rev linkrev %s %s p2\n") % ( + "nodeid".ljust(idlen), "p1".ljust(idlen))) + elif format == 1: + if ui.verbose: + ui.write((" rev flag offset length size link p1" + " p2 %s\n") % "nodeid".rjust(idlen)) + else: + ui.write((" rev flag size link p1 p2 %s\n") % + "nodeid".rjust(idlen)) + + for i in r: + node = r.node(i) + if format == 0: + try: + pp = r.parents(node) + except Exception: + pp = [nullid, nullid] + if ui.verbose: + ui.write("% 6d % 9d % 7d % 7d %s %s %s\n" % ( + i, r.start(i), r.length(i), r.linkrev(i), + shortfn(node), shortfn(pp[0]), shortfn(pp[1]))) + else: + ui.write("% 6d % 7d %s %s %s\n" % ( + i, r.linkrev(i), shortfn(node), shortfn(pp[0]), + shortfn(pp[1]))) + elif format == 1: + pr = r.parentrevs(i) + if ui.verbose: + ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d %s\n" % ( + i, r.flags(i), r.start(i), r.length(i), r.rawsize(i), + r.linkrev(i), pr[0], pr[1], shortfn(node))) + else: + ui.write("% 6d %04x % 8d % 6d % 6d % 6d %s\n" % ( + i, r.flags(i), r.rawsize(i), r.linkrev(i), pr[0], pr[1], + shortfn(node))) + @command('debugrevspec', [('', 'optimize', None, _('print parsed tree after optimizing (DEPRECATED)')),
--- a/tests/test-clone-r.t Mon Aug 20 23:08:57 2018 +0000 +++ b/tests/test-clone-r.t Tue Aug 21 00:01:54 2018 +0000 @@ -37,7 +37,7 @@ $ hg mv afile anotherfile $ hg commit -m "0.3m" - $ hg debugindex -f 1 afile + $ hg debugrevlogindex -f 1 afile rev flag size link p1 p2 nodeid 0 0000 2 0 -1 -1 362fef284ce2 1 0000 4 1 0 -1 125144f7e028
--- a/tests/test-completion.t Mon Aug 20 23:08:57 2018 +0000 +++ b/tests/test-completion.t Tue Aug 21 00:01:54 2018 +0000 @@ -111,6 +111,7 @@ debugrebuildfncache debugrename debugrevlog + debugrevlogindex debugrevspec debugserve debugsetparents @@ -279,7 +280,7 @@ debugfsinfo: debuggetbundle: head, common, type debugignore: - debugindex: changelog, manifest, dir, format + debugindex: changelog, manifest, dir, template debugindexdot: changelog, manifest, dir debuginstall: template debugknown: @@ -298,6 +299,7 @@ debugrebuildfncache: debugrename: rev debugrevlog: changelog, manifest, dir, dump + debugrevlogindex: changelog, manifest, dir, format debugrevspec: optimize, show-revs, show-set, show-stage, no-optimized, verify-optimized debugserve: sshstdio, logiofd, logiofile debugsetparents:
--- a/tests/test-debugcommands.t Mon Aug 20 23:08:57 2018 +0000 +++ b/tests/test-debugcommands.t Tue Aug 21 00:01:54 2018 +0000 @@ -119,34 +119,61 @@ #endif Test debugindex, with and without the --verbose/--debug flag - $ hg debugindex a + $ hg debugrevlogindex a rev linkrev nodeid p1 p2 0 0 b789fdd96dc2 000000000000 000000000000 #if no-reposimplestore - $ hg --verbose debugindex a + $ hg --verbose debugrevlogindex a rev offset length linkrev nodeid p1 p2 0 0 3 0 b789fdd96dc2 000000000000 000000000000 - $ hg --debug debugindex a + $ hg --debug debugrevlogindex a rev offset length linkrev nodeid p1 p2 0 0 3 0 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 #endif - $ hg debugindex -f 1 a + $ hg debugrevlogindex -f 1 a rev flag size link p1 p2 nodeid 0 0000 2 0 -1 -1 b789fdd96dc2 #if no-reposimplestore - $ hg --verbose debugindex -f 1 a + $ hg --verbose debugrevlogindex -f 1 a rev flag offset length size link p1 p2 nodeid 0 0000 0 3 2 0 -1 -1 b789fdd96dc2 - $ hg --debug debugindex -f 1 a + $ hg --debug debugrevlogindex -f 1 a rev flag offset length size link p1 p2 nodeid 0 0000 0 3 2 0 -1 -1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 #endif + $ hg debugindex -c + rev linkrev nodeid p1 p2 + 0 0 07f494440405 000000000000 000000000000 + 1 1 8cccb4b5fec2 07f494440405 000000000000 + 2 2 b1e228c512c5 8cccb4b5fec2 000000000000 + $ hg debugindex -c --debug + rev linkrev nodeid p1 p2 + 0 0 07f4944404050f47db2e5c5071e0e84e7a27bba9 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 + 1 1 8cccb4b5fec20cafeb99dd01c26d4dee8ea4388a 07f4944404050f47db2e5c5071e0e84e7a27bba9 0000000000000000000000000000000000000000 + 2 2 b1e228c512c5d7066d70562ed839c3323a62d6d2 8cccb4b5fec20cafeb99dd01c26d4dee8ea4388a 0000000000000000000000000000000000000000 + $ hg debugindex -m + rev linkrev nodeid p1 p2 + 0 0 a0c8bcbbb45c 000000000000 000000000000 + 1 1 57faf8a737ae a0c8bcbbb45c 000000000000 + 2 2 a35b10320954 57faf8a737ae 000000000000 + $ hg debugindex -m --debug + rev linkrev nodeid p1 p2 + 0 0 a0c8bcbbb45c63b90b70ad007bf38961f64f2af0 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 + 1 1 57faf8a737ae7faf490582941a82319ba6529dca a0c8bcbbb45c63b90b70ad007bf38961f64f2af0 0000000000000000000000000000000000000000 + 2 2 a35b103209548032201c16c7688cb2657f037a38 57faf8a737ae7faf490582941a82319ba6529dca 0000000000000000000000000000000000000000 + $ hg debugindex a + rev linkrev nodeid p1 p2 + 0 0 b789fdd96dc2 000000000000 000000000000 + $ hg debugindex --debug a + rev linkrev nodeid p1 p2 + 0 0 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 + debugdelta chain basic output #if reporevlogstore
--- a/tests/test-help.t Mon Aug 20 23:08:57 2018 +0000 +++ b/tests/test-help.t Tue Aug 21 00:01:54 2018 +0000 @@ -938,7 +938,7 @@ retrieves a bundle from a repo debugignore display the combined ignore pattern and information about ignored files - debugindex dump the contents of an index file + debugindex dump index data for a storage primitive debugindexdot dump an index DAG as a graphviz dot file debuginstall test Mercurial installation @@ -970,6 +970,8 @@ rebuild the fncache file debugrename dump rename information debugrevlog show data and statistics about a revlog + debugrevlogindex + dump the contents of a revlog index debugrevspec parse and apply a revision specification debugserve run a server with advanced settings debugsetparents
--- a/tests/test-parseindex.t Mon Aug 20 23:08:57 2018 +0000 +++ b/tests/test-parseindex.t Tue Aug 21 00:01:54 2018 +0000 @@ -145,7 +145,7 @@ > open(n + b"/.hg/store/00changelog.i", "wb").write(d) > EOF - $ hg -R limit debugindex -f1 -c + $ hg -R limit debugrevlogindex -f1 -c rev flag size link p1 p2 nodeid 0 0000 62 0 2 -1 7c31755bf9b5 1 0000 65 1 0 2 26333235a41c @@ -155,7 +155,7 @@ 0 1 1 -1 base 63 62 63 1.01613 63 0 0.00000 1 2 1 -1 base 66 65 66 1.01538 66 0 0.00000 - $ hg -R segv debugindex -f1 -c + $ hg -R segv debugrevlogindex -f1 -c rev flag size link p1 p2 nodeid 0 0000 62 0 65536 -1 7c31755bf9b5 1 0000 65 1 0 65536 26333235a41c
--- a/tests/test-revlog.t Mon Aug 20 23:08:57 2018 +0000 +++ b/tests/test-revlog.t Tue Aug 21 00:01:54 2018 +0000 @@ -39,7 +39,7 @@ ... Joa3dYtcYYYBAQ8Qr4OqZAYRICPTSr5WKd/42rV36d+8/VmrNpv7NP1jQAXrQE4BqQUARngwVA==""" ... .decode("base64").decode("zlib")) - $ hg debugindex a.i + $ hg debugrevlogindex a.i rev linkrev nodeid p1 p2 0 2 99e0332bd498 000000000000 000000000000 1 3 6674f57a23d8 99e0332bd498 000000000000