Martin von Zweigbergk <martinvonz@google.com> [Wed, 02 May 2018 22:49:06 -0700] rev 37906
shortest: move some safe code out of exception block
The RevlogError and WdirUnsupported could be raised by
_partialmatch(), but not by the rest of isvalid(), so let's move the
rest out to make it clearer.
Differential Revision: https://phab.mercurial-scm.org/D3458
Martin von Zweigbergk <martinvonz@google.com> [Fri, 04 May 2018 22:04:44 -0700] rev 37905
revlog: don't say "not found" on internal error
If index_node() returned NULL, then index_find_node() and and
nt_partialmatch() used to return -2 to signal that the node was not
found. However, we were passing in a revnum to index_node() that we
knew should exist, so the only reason it could return NULL was due to
some internal error or perhaps out of memory. Let's not use "not
found" for these cases. I suppose we never noticed this because these
error never happen in practice.
I think there are more places where we should error out instead of
reporting that the node was not found, but the cases mentioned above
were all I cared about right now (because using the same error code
for all failures simplified some future patches).
Differential Revision: https://phab.mercurial-scm.org/D3457
Martin von Zweigbergk <martinvonz@google.com> [Fri, 04 May 2018 21:58:43 -0700] rev 37904
revlog: extract function for getting node from known-to-exist rev
Many of the calls to index_node() (which converts a rev to a nodeid)
are done with a rev that's know to exist. If the function fails,
there's something really wrong and we should just abort. This was done
in only one place. This patch starts by extracting that code to a
function that we can reuse in later patches.
Differential Revision: https://phab.mercurial-scm.org/D3456
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 May 2018 09:15:29 -0700] rev 37903
shortest: make {shortest("fffffffff")} work again
{shortest("fffffffff")} should shorten it to the shortest unambiguous
prefix for the working directory. It used to do that until I broke it
in 7b2955624777 (scmutil: make shortesthexnodeidprefix() take a full
binary nodeid, 2018-04-14), when we started returning the full hex
nodeid for any working directory prefix shorter than 40 hex
digits. This patch fixes it by catching WdirUnsupported
specifically.
Differential Revision: https://phab.mercurial-scm.org/D3455
Martin von Zweigbergk <martinvonz@google.com> [Sun, 29 Apr 2018 14:29:09 -0700] rev 37902
revlog: use radix tree also for matching keys shorter than 4 hex digits
I don't know what the reason for the 4-digit limit was, and I can't
think of any real disadvantages of using the radix tree also when the
requested minimum length is short. This speeds up `hg log -T
'{shortest(node,1)}\n'` from 2m16s to 4.5s by making that not fall
back to pure code.
Differential Revision: https://phab.mercurial-scm.org/D3453
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 12:55:32 -0700] rev 37901
context: convert to hex for error message only for 20-byte changeid
Now that 20-byte strings unambiguously mean binary (or a bug), we can
specialize the conversion to hex for that case.
Differential Revision: https://phab.mercurial-scm.org/D3452
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 12:59:17 -0700] rev 37900
context: clarify that only one attempt is made to interpret changeid
We can now tell what type of revision specifier we have just by
looking at it (we no longer attempt to interpret it in one way after
the other -- that's now in scmutil.revsymbol()). Let's clarify this in
the code by swithing to if/elif.
Differential Revision: https://phab.mercurial-scm.org/D3451
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Apr 2018 12:45:08 -0700] rev 37899
context: only bother looking for broken dirstate for 20-byte changeid
If we fail to look up a changeid in changectx.__init__, we check if it
exactly matches any of the dirstate parents, and if it does, we print
a more specific message ("working directory has unknown parent '...'!"
instead of "unknown revision '...'"). The dirstate parents are always
20 bytes, so there's no need to check for a match when the given
changeid is not 20 bytes. (And now that all the other allowed forms of
changeid have been moved out of the constructor, there's no risk that
a changeid that did match a dirstate parent was actually a valid
bookmark.)
Differential Revision: https://phab.mercurial-scm.org/D3450
Martin von Zweigbergk <martinvonz@google.com> [Sat, 28 Apr 2018 23:16:41 -0700] rev 37898
context: drop support for looking up context by ambiguous changeid (API)
This removes support for using the changectx constructor (and thereby
repo[x]) for looking up contexts by a stringified int, a namespace key
(e.g. a bookmark), or a partial hex nodeid. This means that
e.g. repo[<hex nodeid>] will now fail even if a bookmark with the same
name exists (which is a good thing IMO). It also means that doing
repo[<non-existent node>] no longer ends up loading namespaces (which
was a surprising side-effect of creating of failing to create a
context object that I recently ran into while debugging something
unrelated to this series).
Differential Revision: https://phab.mercurial-scm.org/D3449
Martin von Zweigbergk <martinvonz@google.com> [Sat, 28 Apr 2018 23:54:07 -0700] rev 37897
tests: pass parent revision as integer to repo[x] in test-context-metadata.t
Support for looking up by stringified int is going away. It's already
deprecated, but I think I didn't notice this case because the test
case pipes through `grep`.
Differential Revision: https://phab.mercurial-scm.org/D3448