Mercurial > hg
changeset 49152:eaaf4f98c9f1 stable
dirstate-v2: add flag to `debugstate` to print docket information
This is useful information that we don't easily have access to currently,
unless you speak fluent xxd.
This replaces `debugdirstateignorepatternshash`, which I'll remove in the next
changeset.
Differential Revision: https://phab.mercurial-scm.org/D12590
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Thu, 28 Apr 2022 15:19:19 +0200 |
parents | 1b6e381521c5 |
children | 308e45f7b455 |
files | mercurial/debugcommands.py tests/test-completion.t tests/test-hgignore.t |
diffstat | 3 files changed, 39 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/debugcommands.py Mon May 02 22:04:59 2022 -0400 +++ b/mercurial/debugcommands.py Thu Apr 28 15:19:19 2022 +0200 @@ -47,6 +47,7 @@ context, copies, dagparser, + dirstateutils, encoding, error, exchange, @@ -940,6 +941,12 @@ (b'', b'datesort', None, _(b'sort by saved mtime')), ( b'', + b'docket', + False, + _(b'display the docket (metadata file) instead'), + ), + ( + b'', b'all', False, _(b'display dirstate-v2 tree nodes that would not exist in v1'), @@ -950,6 +957,33 @@ def debugstate(ui, repo, **opts): """show the contents of the current dirstate""" + if opts.get("docket"): + if not repo.dirstate._use_dirstate_v2: + raise error.Abort(_(b'dirstate v1 does not have a docket')) + + docket = repo.dirstate._map.docket + ( + start_offset, + root_nodes, + nodes_with_entry, + nodes_with_copy, + unused_bytes, + _unused, + ignore_pattern, + ) = dirstateutils.v2.TREE_METADATA.unpack(docket.tree_metadata) + + ui.write(_(b"size of dirstate data: %d\n") % docket.data_size) + ui.write(_(b"data file uuid: %s\n") % docket.uuid) + ui.write(_(b"start offset of root nodes: %d\n") % start_offset) + ui.write(_(b"number of root nodes: %d\n") % root_nodes) + ui.write(_(b"nodes with entries: %d\n") % nodes_with_entry) + ui.write(_(b"nodes with copies: %d\n") % nodes_with_copy) + ui.write(_(b"number of unused bytes: %d\n") % unused_bytes) + ui.write( + _(b"ignore pattern hash: %s\n") % binascii.hexlify(ignore_pattern) + ) + return + nodates = not opts['dates'] if opts.get('nodates') is not None: nodates = True
--- a/tests/test-completion.t Mon May 02 22:04:59 2022 -0400 +++ b/tests/test-completion.t Thu Apr 28 15:19:19 2022 +0200 @@ -286,7 +286,7 @@ debugdate: extended debugdeltachain: changelog, manifest, dir, template debugdirstateignorepatternshash: - debugdirstate: nodates, dates, datesort, all + debugdirstate: nodates, dates, datesort, docket, all debugdiscovery: old, nonheads, rev, seed, local-as-revs, remote-as-revs, ssh, remotecmd, insecure, template debugdownload: output debugextensions: template
--- a/tests/test-hgignore.t Mon May 02 22:04:59 2022 -0400 +++ b/tests/test-hgignore.t Thu Apr 28 15:19:19 2022 +0200 @@ -418,14 +418,14 @@ $ hg status > /dev/null $ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 sha1=6e315b60f15fb5dfa02be00f3e2c8f923051f5ff - $ hg debugdirstateignorepatternshash - 6e315b60f15fb5dfa02be00f3e2c8f923051f5ff + $ hg debugstate --docket | grep ignore + ignore pattern hash: 6e315b60f15fb5dfa02be00f3e2c8f923051f5ff $ echo rel > .hg/testhgignorerel $ hg status > /dev/null $ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 sha1=dea19cc7119213f24b6b582a4bae7b0cb063e34e - $ hg debugdirstateignorepatternshash - dea19cc7119213f24b6b582a4bae7b0cb063e34e + $ hg debugstate --docket | grep ignore + ignore pattern hash: dea19cc7119213f24b6b582a4bae7b0cb063e34e #endif