Mercurial > public > mercurial-scm > hg-stable
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)] |