# HG changeset patch # User Martin von Zweigbergk # Date 1522962213 25200 # Node ID 167b22a906f3889a1f2f26a65303bd83eff9289a # Parent ecd3f6909184d1fa73c0dc2adaa56a3716bd8dcf context: make repo[] 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 diff -r ecd3f6909184 -r 167b22a906f3 mercurial/context.py --- a/mercurial/context.py Thu Apr 05 00:04:09 2018 -0700 +++ b/mercurial/context.py Thu Apr 05 14:03:33 2018 -0700 @@ -410,7 +410,7 @@ self._node = changeid self._rev = repo.changelog.rev(changeid) return - except error.FilteredRepoLookupError: + except error.FilteredLookupError: raise except LookupError: pass