Mercurial > hg-stable
changeset 45665:308ca5528ee6
changing-files: add a debug command display changed files
The binary output from sidedata is useful to verify the underlying data do not
get corrupted. However having a human readable version is much simpler for
debuging the changed files data itself.
So we add a debug command to dump this information and we use it in the tests.
Differential Revision: https://phab.mercurial-scm.org/D9125
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 30 Sep 2020 09:21:33 +0200 |
parents | 8cebc4c13978 |
children | f6811e5bd994 |
files | mercurial/debugcommands.py tests/test-completion.t tests/test-copies-chain-merge.t tests/test-help.t |
diffstat | 4 files changed, 73 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/debugcommands.py Tue Sep 29 23:16:09 2020 +0200 +++ b/mercurial/debugcommands.py Wed Sep 30 09:21:33 2020 +0200 @@ -59,6 +59,7 @@ lock as lockmod, logcmdutil, mergestate as mergestatemod, + metadata, obsolete, obsutil, pathutil, @@ -99,6 +100,7 @@ from .revlogutils import ( deltas as deltautil, nodemap, + sidedata, ) release = lockmod.release @@ -478,6 +480,40 @@ ui.write(b' %s\n' % v) +@command(b'debugchangedfiles', [], b'REV') +def debugchangedfiles(ui, repo, rev): + """list the stored files changes for a revision""" + ctx = scmutil.revsingle(repo, rev, None) + sd = repo.changelog.sidedata(ctx.rev()) + files_block = sd.get(sidedata.SD_FILES) + if files_block is not None: + files = metadata.decode_files_sidedata(sd) + for f in sorted(files.touched): + if f in files.added: + action = b"added" + elif f in files.removed: + action = b"removed" + elif f in files.merged: + action = b"merged" + elif f in files.salvaged: + action = b"salvaged" + else: + action = b"touched" + + copy_parent = b"" + copy_source = b"" + if f in files.copied_from_p1: + copy_parent = b"p1" + copy_source = files.copied_from_p1[f] + elif f in files.copied_from_p2: + copy_parent = b"p2" + copy_source = files.copied_from_p2[f] + + data = (action, copy_parent, f, copy_source) + template = b"%-8s %2s: %s, %s;\n" + ui.write(template % data) + + @command(b'debugcheckstate', [], b'') def debugcheckstate(ui, repo): """validate the correctness of the current dirstate"""
--- a/tests/test-completion.t Tue Sep 29 23:16:09 2020 +0200 +++ b/tests/test-completion.t Wed Sep 30 09:21:33 2020 +0200 @@ -80,6 +80,7 @@ debugbuilddag debugbundle debugcapabilities + debugchangedfiles debugcheckstate debugcolor debugcommands @@ -268,6 +269,7 @@ debugbuilddag: mergeable-file, overwritten-file, new-file debugbundle: all, part-type, spec debugcapabilities: + debugchangedfiles: debugcheckstate: debugcolor: style debugcommands:
--- a/tests/test-copies-chain-merge.t Tue Sep 29 23:16:09 2020 +0200 +++ b/tests/test-copies-chain-merge.t Wed Sep 30 09:21:33 2020 +0200 @@ -1018,51 +1018,71 @@ $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do > echo "##### revision $rev #####" > hg debugsidedata -c -v -- $rev + > hg debugchangedfiles $rev > done ##### revision 0 ##### 1 sidedata entries entry-0014 size 34 '\x00\x00\x00\x03\x04\x00\x00\x00\x01\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00abh' + added : a, ; + added : b, ; + added : h, ; ##### revision 1 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ac' + removed : a, ; + added p1: c, a; ##### revision 2 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00cd' + removed : c, ; + added p1: d, c; ##### revision 3 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00de' + removed : d, ; + added p1: e, d; ##### revision 4 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ef' + removed : e, ; + added p1: f, e; ##### revision 5 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00b' + touched : b, ; ##### revision 6 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d' + removed : d, ; ##### revision 7 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x0c\x00\x00\x00\x01\x00\x00\x00\x00d' + removed : d, ; ##### revision 8 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d' + added : d, ; ##### revision 9 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00bg' + removed : b, ; + added p1: g, b; ##### revision 10 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x06\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00fg' + added p1: f, g; + removed : g, ; ##### revision 11 ##### 1 sidedata entries entry-0014 size 4 @@ -1079,6 +1099,7 @@ 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d' + added : d, ; ##### revision 15 ##### 1 sidedata entries entry-0014 size 4 @@ -1087,6 +1108,7 @@ 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x00\x00\x00\x00d' + added : d, ; ##### revision 17 ##### 1 sidedata entries entry-0014 size 4 @@ -1099,18 +1121,24 @@ 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f' + merged : f, ; ##### revision 20 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00f' + merged : f, ; ##### revision 21 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00hi' + removed : h, ; + added p1: i, h; ##### revision 22 ##### 1 sidedata entries entry-0014 size 24 '\x00\x00\x00\x02\x16\x00\x00\x00\x01\x00\x00\x00\x01\x0c\x00\x00\x00\x02\x00\x00\x00\x00di' + touched p1: d, i; + removed : i, ; ##### revision 23 ##### 1 sidedata entries entry-0014 size 4 @@ -1123,22 +1151,27 @@ 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00d' + touched : d, ; ##### revision 26 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' + merged : d, ; ##### revision 27 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' + merged : d, ; ##### revision 28 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' + merged : d, ; ##### revision 29 ##### 1 sidedata entries entry-0014 size 14 '\x00\x00\x00\x01\x08\x00\x00\x00\x01\x00\x00\x00\x00d' + merged : d, ; ##### revision 30 ##### 1 sidedata entries entry-0014 size 4
--- a/tests/test-help.t Tue Sep 29 23:16:09 2020 +0200 +++ b/tests/test-help.t Wed Sep 30 09:21:33 2020 +0200 @@ -983,6 +983,8 @@ debugbundle lists the contents of a bundle debugcapabilities lists the capabilities of a remote peer + debugchangedfiles + list the stored files changes for a revision debugcheckstate validate the correctness of the current dirstate debugcolor show available color, effects or style