( )⚙ D3144 context: make repo[<filtered binary nodeid>] match node

This is an archive of the discontinued Mercurial Phabricator instance.

context: make repo[<filtered binary nodeid>] match node
ClosedPublic

Authored by martinvonz on Apr 5 2018, 6:07 PM.

Details

Summary

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).

Diff Detail

Repository
rHG Mercurial
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.