# HG changeset patch
# User Martin von Zweigbergk <martinvonz@google.com>
# Date 1522962213 25200
#      Thu Apr 05 14:03:33 2018 -0700
# Node ID 167b22a906f3889a1f2f26a65303bd83eff9289a
# Parent  ecd3f6909184d1fa73c0dc2adaa56a3716bd8dcf
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

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -410,7 +410,7 @@
                     self._node = changeid
                     self._rev = repo.changelog.rev(changeid)
                     return
-                except error.FilteredRepoLookupError:
+                except error.FilteredLookupError:
                     raise
                 except LookupError:
                     pass