diff mercurial/revlogutils/debug.py @ 49790:4302db0f54c8

find-delta: move most of the debug-find-delta code in the debug module Lets us that module more. It will help us to keep revlog implementation details close to each other.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 28 Nov 2022 18:58:35 +0100
parents 7aea9babac5d
children 05db41701ece
line wrap: on
line diff
--- a/mercurial/revlogutils/debug.py	Mon Nov 07 20:02:32 2022 -0500
+++ b/mercurial/revlogutils/debug.py	Mon Nov 28 18:58:35 2022 +0100
@@ -10,12 +10,15 @@
 import string
 
 from .. import (
+    mdiff,
     node as nodemod,
+    revlogutils,
     util,
 )
 
 from . import (
     constants,
+    deltas as deltautil,
 )
 
 INDEX_ENTRY_DEBUG_COLUMN = []
@@ -619,3 +622,42 @@
                 b'deltas against other : '
                 + fmt % pcfmt(numother_nad, numdeltas)
             )
+
+
+def debug_delta_find(ui, revlog, rev, base_rev=nodemod.nullrev):
+    """display the search process for a delta"""
+    deltacomputer = deltautil.deltacomputer(
+        revlog,
+        write_debug=ui.write,
+        debug_search=not ui.quiet,
+    )
+
+    node = revlog.node(rev)
+    p1r, p2r = revlog.parentrevs(rev)
+    p1 = revlog.node(p1r)
+    p2 = revlog.node(p2r)
+    full_text = revlog.revision(rev)
+    btext = [full_text]
+    textlen = len(btext[0])
+    cachedelta = None
+    flags = revlog.flags(rev)
+
+    if base_rev != nodemod.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,
+        p2,
+        btext,
+        textlen,
+        cachedelta,
+        flags,
+    )
+
+    fh = revlog._datafp()
+    deltacomputer.finddeltainfo(revinfo, fh, target_rev=rev)