addremove: don't perform m.exact/rel until needed
authorDurham Goode <durham@fb.com>
Mon, 04 Feb 2013 14:10:09 -0800
changeset 18560 acf4a405e440
parent 18559 d1582dd6288e
child 18562 37010a55922a
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%).
mercurial/scmutil.py
--- 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':