revlog: make pure version of _partialmatch() support 40-byte hex nodeids stable
authorMartin von Zweigbergk <martinvonz@google.com>
Wed, 25 Apr 2018 09:24:07 -0700
branchstable
changeset 37819 ee3d58b4a47f
parent 37818 877185de62cf
child 37820 143632f82479
revlog: make pure version of _partialmatch() support 40-byte hex nodeids Without this patch, test-histedit-arguments.t would fail when run with --pure. It turned out to be because the pure version of _partialmatch() does not support full 40-byte hex nodeids. When histedit's instructions include things like "pick tip", it resolves the "tip" revision early to a full nodeid (but plain hex nodeid prefixes are not resolved to full nodeids). Then the nodeid (full or not) is looked up using to a full nodeid later. This step is what fails in pure mode. It has been failing since my c4131138eadb (histedit: look up partial nodeid as partial nodeid, 2018-04-06). I haven't verified, but I suspect histedit instructions like "pick <full hex nodeid>" would have been failing before my commit too, though. The fix is trivial: change a "< 40" to "<= 40". Differential Revision: https://phab.mercurial-scm.org/D3428
mercurial/revlog.py
--- a/mercurial/revlog.py	Tue Apr 24 13:55:25 2018 -0700
+++ b/mercurial/revlog.py	Wed Apr 25 09:24:07 2018 -0700
@@ -1466,7 +1466,7 @@
         if id in self._pcache:
             return self._pcache[id]
 
-        if len(id) < 40:
+        if len(id) <= 40:
             try:
                 # hex(node)[:...]
                 l = len(id) // 2  # grab an even number of digits