diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -2086,16 +2086,29 @@ def debugnamecomplete(ui, repo, *args): @command( b'debugnodemap', - [(b'', b'dump', False, _(b'write persistent binary nodemap on stdin'))], + [ + ( + b'', + b'dump-new', + False, + _(b'write a (new) persistent binary nodemap on stdin'), + ), + (b'', b'dump-disk', False, _(b'dump on-disk data on stdin')), + ], ) def debugnodemap(ui, repo, **opts): """write and inspect on disk nodemap """ - if opts['dump']: + if opts['dump_new']: unfi = repo.unfiltered() cl = unfi.changelog data = nodemap.persistent_data(cl.index) ui.write(data) + elif opts['dump_disk']: + unfi = repo.unfiltered() + cl = unfi.changelog + data = nodemap.persisted_data(cl) + ui.write(data) @command( diff --git a/mercurial/revlogutils/nodemap.py b/mercurial/revlogutils/nodemap.py --- a/mercurial/revlogutils/nodemap.py +++ b/mercurial/revlogutils/nodemap.py @@ -22,6 +22,13 @@ class NodeMap(dict): raise error.RevlogError(b'unknown node: %s' % x) +def persisted_data(revlog): + """read the nodemap for a revlog from disk""" + if revlog.nodemap_file is None: + return None + return revlog.opener.tryread(revlog.nodemap_file) + + def setup_persistent_nodemap(tr, revlog): """Install whatever is needed transaction side to persist a nodemap on disk diff --git a/tests/test-completion.t b/tests/test-completion.t --- a/tests/test-completion.t +++ b/tests/test-completion.t @@ -291,7 +291,7 @@ Show all commands + options debugmanifestfulltextcache: clear, add debugmergestate: debugnamecomplete: - debugnodemap: dump + debugnodemap: dump-new, dump-disk debugobsolete: flags, record-parents, rev, exclusive, index, delete, date, user, template debugp1copies: rev debugp2copies: rev diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t --- a/tests/test-persistent-nodemap.t +++ b/tests/test-persistent-nodemap.t @@ -10,9 +10,9 @@ Test the persistent on-disk nodemap > exp-persistent-nodemap=yes > EOF $ hg debugbuilddag .+5000 - $ hg debugnodemap --dump | f --sha256 --size + $ hg debugnodemap --dump-new | f --sha256 --size size=122880, sha256=b961925120e1c9bc345c199b2cc442abc477029fdece37ef9d99cbe59c0558b7 - $ f --sha256 --bytes=256 --hexdump --size < .hg/store/00changelog.n + $ hg debugnodemap --dump-disk | f --sha256 --bytes=256 --hexdump --size size=122880, sha256=b961925120e1c9bc345c199b2cc442abc477029fdece37ef9d99cbe59c0558b7 0000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 0010: ff ff ff ff ff ff ff ff ff ff fa c2 ff ff ff ff |................|