comparison mercurial/revlog.py @ 37819:ee3d58b4a47f stable

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
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 25 Apr 2018 09:24:07 -0700
parents 44d1959acb3b
children 858c7bfb3f49
comparison
equal deleted inserted replaced
37818:877185de62cf 37819:ee3d58b4a47f
1464 pass 1464 pass
1465 1465
1466 if id in self._pcache: 1466 if id in self._pcache:
1467 return self._pcache[id] 1467 return self._pcache[id]
1468 1468
1469 if len(id) < 40: 1469 if len(id) <= 40:
1470 try: 1470 try:
1471 # hex(node)[:...] 1471 # hex(node)[:...]
1472 l = len(id) // 2 # grab an even number of digits 1472 l = len(id) // 2 # grab an even number of digits
1473 prefix = bin(id[:l * 2]) 1473 prefix = bin(id[:l * 2])
1474 nl = [e[7] for e in self.index if e[7].startswith(prefix)] 1474 nl = [e[7] for e in self.index if e[7].startswith(prefix)]