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
context: move handling of filtering error to revsymbol() (API)
When changectx's constructor runs into various Filtered*Error, it
creates an exception with a hint about using --hidden. This only makes
sense when the revision was provided by the user (if we get e.g. a
FilteredLookupError from repo[p1], then it's instead a programming
error). Thus, I'm moving the handling into revsymbol(). Also changed
"unfilteredrepo[changeid]" to "revsymbol(unfilteredrepo, changeid)" as
part of the move.
Differential Revision: https://phab.mercurial-scm.org/D3143
py3: whitelist 13 new passing tests
Some tests were passing before the series too.
Differential Revision: https://phab.mercurial-scm.org/D3133
py3: convert user value to bytes by b'' prefix
This makes test-journal* pass on Python 3.5.
# skip-blame beacuse just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D3125
util: whitelist apfs for hardlink support
Seems to work fine for me.
Differential Revision: https://phab.mercurial-scm.org/D3134
mq: avoid a silly conversion from binary nodeid to hex
We generally deal with binary nodeids in code. In this case the hex
nodeid was passed to strip.checksubstate() where it was passed to
repo.__getitem__, which of course accepts a binary nodeid.
Differential Revision: https://phab.mercurial-scm.org/D3141
narrow: remove unused "cacheprop" stuff
This is unused since D3046. I didn't even notice it then, but tests
still pass so I hope it's still handled safely.
Differential Revision: https://phab.mercurial-scm.org/D3142
tests: disable infinitepush tests for simple store
Infinitepush relies heavily on bundles and bundlerepo. As such,
it won't be easy to make compatible with alternate storage
backends at this time.
Let's disable the tests when running with our simple store.
Differential Revision: https://phab.mercurial-scm.org/D3062
rebase: remove unnecessary and incorrect handling of nullid
We used to write a nullid as hex to the rebase state file and
interpret it as the "todo" state (value -1). However, when reading it,
we compared the string value to (binary) nullid, which would of course
not match. AFAICT, it still worked because when the read nodeid did
not match nullid (which, again, it didn't), we'd use the normal path
which did repo[<hex nullid>].rev(), and that also happens to return
-1. It seems to have been this way ever since
9972758ab4c5 (rebase:
handle revtodo as a special value when storing/restoring state,
2014-12-02).
Differential Revision: https://phab.mercurial-scm.org/D3140
rebase: convert "oldrev" to revnum earlier
It was done in 3 places before, now just 1.
Differential Revision: https://phab.mercurial-scm.org/D3139