Mercurial > hg
changeset 18869:e8b4b139a545
dirstate: only call lstat once per flags invocation
This makes a big difference to performance in some cases.
hg --time locate 'set:symlink()'
mozilla-central (70,000 files):
before: 2.92 sec
after: 2.47
another repo (170,000 files):
before: 7.87 sec
after: 6.86
author | Bryan O'Sullivan <bryano@fb.com> |
---|---|
date | Wed, 03 Apr 2013 11:35:27 -0700 |
parents | cafa447a7d3b |
children | 0f2eb3d16a1a a2d4ab4f575d |
files | mercurial/dirstate.py |
diffstat | 1 files changed, 8 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/dirstate.py Wed Apr 03 11:35:27 2013 -0700 +++ b/mercurial/dirstate.py Wed Apr 03 11:35:27 2013 -0700 @@ -154,11 +154,14 @@ def flagfunc(self, buildfallback): if self._checklink and self._checkexec: def f(x): - p = self._join(x) - if os.path.islink(p): - return 'l' - if util.isexec(p): - return 'x' + try: + st = os.lstat(self._join(x)) + if util.statislink(st): + return 'l' + if util.statisexec(st): + return 'x' + except OSError: + pass return '' return f