# HG changeset patch # User Siddharth Agarwal # Date 1439420885 25200 # Node ID 2f8a4d4965859bf8b74dfc16552a9f80c5a7a815 # Parent ee5391999f2d05d1e6bd06e273b4d34a3b8afe33 directaccess: don't try to partialmatch things that aren't hashes Trying to partialmatch identifiers like '.' turns out to be (a) pointless and (b) extremely slow. On a repo with a million commits, with directaccess enabled, hg log -r .^::. goes from 2.1 seconds to 0.5. diff -r ee5391999f2d -r 2f8a4d496585 hgext/directaccess.py --- a/hgext/directaccess.py Mon Aug 10 00:41:18 2015 -0700 +++ b/hgext/directaccess.py Wed Aug 12 16:08:05 2015 -0700 @@ -13,6 +13,7 @@ from mercurial import error from mercurial import commands from mercurial import hg +from mercurial import util from mercurial.i18n import _ cmdtable = {} @@ -126,6 +127,8 @@ extensions.wrapfunction(hg, 'repository', _repository) setupdirectaccess() +hashre = util.re.compile('[0-9a-fA-F]{1,40}') + def gethashsymbols(tree): # Returns the list of symbols of the tree that look like hashes # for example for the revset 3::abe3ff it will return ('abe3ff') @@ -137,7 +140,9 @@ int(tree[1]) return [] except ValueError as e: - return [tree[1]] + if hashre.match(tree[1]): + return [tree[1]] + return [] elif len(tree) == 3: return gethashsymbols(tree[1]) + gethashsymbols(tree[2]) else: