diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -484,14 +484,31 @@ ui.write(b' %s\n' % v) -@command(b'debugchangedfiles', [], b'REV') -def debugchangedfiles(ui, repo, rev): +@command( + b'debugchangedfiles', + [ + ( + b'', + b'compute', + False, + b"compute information instead of reading it from storage", + ), + ], + b'REV', +) +def debugchangedfiles(ui, repo, rev, **opts): """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) + files = None + + if opts['compute']: + files = metadata.compute_all_files_changes(ctx) + else: + 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) + if files is not None: for f in sorted(files.touched): if f in files.added: action = b"added" diff --git a/tests/test-completion.t b/tests/test-completion.t --- a/tests/test-completion.t +++ b/tests/test-completion.t @@ -272,7 +272,7 @@ debugbuilddag: mergeable-file, overwritten-file, new-file debugbundle: all, part-type, spec debugcapabilities: - debugchangedfiles: + debugchangedfiles: compute debugcheckstate: debugcolor: style debugcommands: diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t --- a/tests/test-copies-chain-merge.t +++ b/tests/test-copies-chain-merge.t @@ -721,6 +721,11 @@ #if no-compatibility no-filelog no-changeset + $ hg debugchangedfiles --compute 0 + added : a, ; + added : b, ; + added : h, ; + $ for rev in `hg log --rev 'all()' -T '{rev}\n'`; do > echo "##### revision $rev #####" > hg debugsidedata -c -v -- $rev