Mercurial > public > mercurial-scm > hg-stable
diff mercurial/dirstate.py @ 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 | a18919de61e5 |
children | 38982de2b4eb |
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