Mercurial > public > mercurial-scm > hg
diff mercurial/debugcommands.py @ 49589:266bb5c86f4b
debug-delta-find: add a --source option
This will help us to understand the delta-find operation in different
situations.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 04 Nov 2022 19:38:47 -0400 |
parents | f59e49f6bee4 |
children | 7c0a383849a8 |
line wrap: on
line diff
--- a/mercurial/debugcommands.py Wed Nov 02 09:34:03 2022 -0400 +++ b/mercurial/debugcommands.py Fri Nov 04 19:38:47 2022 -0400 @@ -59,6 +59,7 @@ localrepo, lock as lockmod, logcmdutil, + mdiff, mergestate as mergestatemod, metadata, obsolete, @@ -990,17 +991,29 @@ @command( b'debug-delta-find', - cmdutil.debugrevlogopts + cmdutil.formatteropts, + cmdutil.debugrevlogopts + + cmdutil.formatteropts + + [ + ( + b'', + b'source', + b'full', + _(b'input data feed to the process (full, storage, p1, p2, prev)'), + ), + ], _(b'-c|-m|FILE REV'), optionalrepo=True, ) -def debugdeltafind(ui, repo, arg_1, arg_2=None, **opts): +def debugdeltafind(ui, repo, arg_1, arg_2=None, source=b'full', **opts): """display the computation to get to a valid delta for storing REV This command will replay the process used to find the "best" delta to store a revision and display information about all the steps used to get to that result. + By default, the process is fed with a the full-text for the revision. This + can be controlled with the --source flag. + The revision use the revision number of the target storage (not changelog revision number). @@ -1028,11 +1041,31 @@ p1r, p2r = revlog.parentrevs(rev) p1 = revlog.node(p1r) p2 = revlog.node(p2r) - btext = [revlog.revision(rev)] + full_text = revlog.revision(rev) + btext = [full_text] textlen = len(btext[0]) cachedelta = None flags = revlog.flags(rev) + if source != b'full': + if source == b'storage': + base_rev = revlog.deltaparent(rev) + elif source == b'p1': + base_rev = p1r + elif source == b'p2': + base_rev = p2r + elif source == b'prev': + base_rev = rev - 1 + else: + raise error.InputError(b"invalid --source value: %s" % source) + + if base_rev != nullrev: + base_text = revlog.revision(base_rev) + delta = mdiff.textdiff(base_text, full_text) + + cachedelta = (base_rev, delta) + btext = [None] + revinfo = revlogutils.revisioninfo( node, p1,