Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/context.py @ 37386:167b22a906f3
context: make repo[<filtered binary nodeid>] match node
If you pass in a binary nodeid of a filtered node to repo.__getitem__,
it would run through this code:
try:
self._node = changeid
self._rev = repo.changelog.rev(changeid)
return
except error.FilteredLookupError:
raise
except LookupError:
pass
However, repo.changelog.rev() would raise a FilteredLookupError, not
FilteredRepoLookupError. Instead, we would hit the "except
LookupError" and continue, trying to interpret the nodeid as a
bookmark etc. The end result would be an error like this:
abort: unknown revision 'ddadbd7c40ef8b8ad6d0d01a7a842092fc431798'!
After this patch, it would instead be:
abort: 00changelog.i@ddadbd7c40ef8b8ad6d0d01a7a842092fc431798: filtered node!
This only happens when we get a binary nodeid, which means it's not
string directly from the user, so it would be a programming error if
it happened. It's therefore a little hard to test (I checked
test-context.py, but it doesn't use obsmarkers).
It looks like this has been wrong ever since dc25ed84bee8 (changectx:
issue a FilteredRepoLookupError when applicable, 2014-10-15).
Differential Revision: https://phab.mercurial-scm.org/D3144
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 05 Apr 2018 14:03:33 -0700 |
parents | ecd3f6909184 |
children | 3198d5a2514e |
comparison
equal
deleted
inserted
replaced
37385:ecd3f6909184 | 37386:167b22a906f3 |
---|---|
408 if len(changeid) == 20: | 408 if len(changeid) == 20: |
409 try: | 409 try: |
410 self._node = changeid | 410 self._node = changeid |
411 self._rev = repo.changelog.rev(changeid) | 411 self._rev = repo.changelog.rev(changeid) |
412 return | 412 return |
413 except error.FilteredRepoLookupError: | 413 except error.FilteredLookupError: |
414 raise | 414 raise |
415 except LookupError: | 415 except LookupError: |
416 pass | 416 pass |
417 | 417 |
418 try: | 418 try: |