Patchwork D3428: revlog: make pure version of _partialmatch() support 40-byte hex nodeids

login
register
mail settings
Submitter phabricator
Date April 25, 2018, 4:38 p.m.
Message ID <differential-rev-PHID-DREV-rgptsnqsjrkw3rhrry75-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/31227/
State Superseded
Headers show

Comments

phabricator - April 25, 2018, 4:38 p.m.
martinvonz created this revision.
Herald added a reviewer: indygreg.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  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 https://phab.mercurial-scm.org/rHGc4131138eadb232ca5888a0b36d49c7aee18c1df
  (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".

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D3428

AFFECTED FILES
  mercurial/revlog.py

CHANGE DETAILS




To: martinvonz, indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -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