addremove: don't perform m.exact/rel until needed
Moves the m.exact and m.rel calls within the conditionals they are used in.
On a large repo this brings addremove from 7.1 seconds down to 6.3 (13%).
--- a/mercurial/scmutil.py Mon Feb 04 14:06:20 2013 -0800
+++ b/mercurial/scmutil.py Mon Feb 04 14:10:09 2013 -0800
@@ -741,20 +741,20 @@
audit_path(abs)
except (OSError, util.Abort):
good = False
- rel = m.rel(abs)
- exact = m.exact(abs)
st = walkresults[abs]
dstate = repo.dirstate[abs]
if good and dstate == '?':
unknown.append(abs)
- if repo.ui.verbose or not exact:
+ if repo.ui.verbose or not m.exact(abs):
+ rel = m.rel(abs)
repo.ui.status(_('adding %s\n') % ((pats and rel) or abs))
elif (dstate != 'r' and
(not good or not st or
(stat.S_ISDIR(st.st_mode) and not stat.S_ISLNK(st.st_mode)))):
deleted.append(abs)
- if repo.ui.verbose or not exact:
+ if repo.ui.verbose or not m.exact(abs):
+ rel = m.rel(abs)
repo.ui.status(_('removing %s\n') % ((pats and rel) or abs))
# for finding renames
elif dstate == 'r':