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.
| marmoute |
| hg-reviewers |
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.
| No Linters Available |
| No Unit Test Coverage |
✅ refresh by Heptapod after a successful CI run (🐙 💚)
⚠ This patch is intended for stable ⚠

| Path | Packages | |||
|---|---|---|---|---|
| M | mercurial/debugcommands.py (34 lines) | |||
| M | tests/test-completion.t (2 lines) | |||
| M | tests/test-hgignore.t (8 lines) |
| Commit | Parents | Author | Summary | Date |
|---|---|---|---|---|
| f3af417fff35 | 1b6e381521c5 | Raphaël Gomès | Apr 28 2022, 9:19 AM |
| bundle2, | bundle2, | ||||
| bundlerepo, | bundlerepo, | ||||
| changegroup, | changegroup, | ||||
| cmdutil, | cmdutil, | ||||
| color, | color, | ||||
| context, | context, | ||||
| copies, | copies, | ||||
| dagparser, | dagparser, | ||||
| dirstateutils, | |||||
| encoding, | encoding, | ||||
| error, | error, | ||||
| exchange, | exchange, | ||||
| extensions, | extensions, | ||||
| filemerge, | filemerge, | ||||
| filesetlang, | filesetlang, | ||||
| formatter, | formatter, | ||||
| hg, | hg, | ||||
| b'nodates', | b'nodates', | ||||
| None, | None, | ||||
| _(b'do not display the saved mtime (DEPRECATED)'), | _(b'do not display the saved mtime (DEPRECATED)'), | ||||
| ), | ), | ||||
| (b'', b'dates', True, _(b'display the saved mtime')), | (b'', b'dates', True, _(b'display the saved mtime')), | ||||
| (b'', b'datesort', None, _(b'sort by saved mtime')), | (b'', b'datesort', None, _(b'sort by saved mtime')), | ||||
| ( | ( | ||||
| b'', | b'', | ||||
| b'docket', | |||||
| False, | |||||
| _(b'display the docket (metadata file) instead'), | |||||
| ), | |||||
| ( | |||||
| b'', | |||||
| b'all', | b'all', | ||||
| False, | False, | ||||
| _(b'display dirstate-v2 tree nodes that would not exist in v1'), | _(b'display dirstate-v2 tree nodes that would not exist in v1'), | ||||
| ), | ), | ||||
| ], | ], | ||||
| _(b'[OPTION]...'), | _(b'[OPTION]...'), | ||||
| ) | ) | ||||
| def debugstate(ui, repo, **opts): | def debugstate(ui, repo, **opts): | ||||
| """show the contents of the current dirstate""" | """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'] | nodates = not opts['dates'] | ||||
| if opts.get('nodates') is not None: | if opts.get('nodates') is not None: | ||||
| nodates = True | nodates = True | ||||
| datesort = opts.get('datesort') | datesort = opts.get('datesort') | ||||
| if datesort: | if datesort: | ||||
| def keyfunc(entry): | def keyfunc(entry): | ||||
| debugcommands: | debugcommands: | ||||
| debugcomplete: options | debugcomplete: options | ||||
| debugcreatestreamclonebundle: | debugcreatestreamclonebundle: | ||||
| debugdag: tags, branches, dots, spaces | debugdag: tags, branches, dots, spaces | ||||
| debugdata: changelog, manifest, dir | debugdata: changelog, manifest, dir | ||||
| debugdate: extended | debugdate: extended | ||||
| debugdeltachain: changelog, manifest, dir, template | debugdeltachain: changelog, manifest, dir, template | ||||
| debugdirstateignorepatternshash: | 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 | debugdiscovery: old, nonheads, rev, seed, local-as-revs, remote-as-revs, ssh, remotecmd, insecure, template | ||||
| debugdownload: output | debugdownload: output | ||||
| debugextensions: template | debugextensions: template | ||||
| debugfileset: rev, all-files, show-matcher, show-stage | debugfileset: rev, all-files, show-matcher, show-stage | ||||
| debugformat: template | debugformat: template | ||||
| debugfsinfo: | debugfsinfo: | ||||
| debuggetbundle: head, common, type | debuggetbundle: head, common, type | ||||
| debugignore: | debugignore: | ||||
| #if dirstate-v2 rust | #if dirstate-v2 rust | ||||
| Check the hash of ignore patterns written in the dirstate | Check the hash of ignore patterns written in the dirstate | ||||
| This is an optimization that is only relevant when using the Rust extensions | This is an optimization that is only relevant when using the Rust extensions | ||||
| $ hg status > /dev/null | $ hg status > /dev/null | ||||
| $ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 | $ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 | ||||
| sha1=6e315b60f15fb5dfa02be00f3e2c8f923051f5ff | sha1=6e315b60f15fb5dfa02be00f3e2c8f923051f5ff | ||||
| $ hg debugdirstateignorepatternshash | $ hg debugstate --docket | grep ignore | ||||
| 6e315b60f15fb5dfa02be00f3e2c8f923051f5ff | ignore pattern hash: 6e315b60f15fb5dfa02be00f3e2c8f923051f5ff | ||||
| $ echo rel > .hg/testhgignorerel | $ echo rel > .hg/testhgignorerel | ||||
| $ hg status > /dev/null | $ hg status > /dev/null | ||||
| $ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 | $ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 | ||||
| sha1=dea19cc7119213f24b6b582a4bae7b0cb063e34e | sha1=dea19cc7119213f24b6b582a4bae7b0cb063e34e | ||||
| $ hg debugdirstateignorepatternshash | $ hg debugstate --docket | grep ignore | ||||
| dea19cc7119213f24b6b582a4bae7b0cb063e34e | ignore pattern hash: dea19cc7119213f24b6b582a4bae7b0cb063e34e | ||||
| #endif | #endif | ||||