Mercurial > hg-stable
view mercurial/node.py @ 37911:0a79fb64118e
revset: use resolvehexnodeidprefix() in id() predicate (BC)
We now have a public method for this purpose, so we don't need to
access the private revlog._partialmatch(). Also, I'll probably make
some changes to resolvehexnodeidprefix() later, and I want those to be
reflected by the id() predicate.
Note that this breaks a test case, because we now resolve the prefix
in the unfiltered repo and get an ambiguous lookup, which results in
no revision being added to the revset. The test case was already
documented to be broken even though it wasn't. It's important to note
that {shortest(node)} already uses the unfiltered repo, so we're not
going to break people who get the prefix from there.
I think we may not want to ever use shortest() in the filtered
repo. It seems unlikely to be enough of a win to matter much. For
example, in my hg repo, it would save me only 0.2 hex digits. In
another repo that only I modify, it saves a little more, but it's
still only 0.29 hex digits. It seems unlikely that people will prune
enough commits that only 1/16 of the commits are visible (which is
what it would take a to save a single hex digit). Instead, I'm working
on another approach: allow ambiguous matches to be disambiguated
within a user-specified revset. Whether or not that pans out, I hope
we're okay with this little change in behavior for now and we can
decide what to do about it later.
Differential Revision: https://phab.mercurial-scm.org/D3311
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Mon, 07 May 2018 14:32:55 -0700 |
parents | d7114f883505 |
children | b623c7b23695 |
line wrap: on
line source
# node.py - basic nodeid manipulation for mercurial # # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from __future__ import absolute_import import binascii # This ugly style has a noticeable effect in manifest parsing hex = binascii.hexlify # Adapt to Python 3 API changes. If this ends up showing up in # profiles, we can use this version only on Python 3, and forward # binascii.unhexlify like we used to on Python 2. def bin(s): try: return binascii.unhexlify(s) except binascii.Error as e: raise TypeError(e) nullrev = -1 nullid = b"\0" * 20 nullhex = hex(nullid) # Phony node value to stand-in for new files in some uses of # manifests. newnodeid = '!' * 20 addednodeid = ('0' * 15) + 'added' modifiednodeid = ('0' * 12) + 'modified' wdirfilenodeids = {newnodeid, addednodeid, modifiednodeid} # pseudo identifiers for working directory # (they are experimental, so don't add too many dependencies on them) wdirrev = 0x7fffffff wdirid = b"\xff" * 20 wdirhex = hex(wdirid) def short(node): return hex(node[:6])