[PATCH V2] dirstate: test normalize is truthy instead of using a no-op lambda

Siddharth Agarwal sid0 at fb.com
Tue Dec 4 12:29:46 CST 2012


# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1354645758 28800
# Node ID 6688ba567bcd57d05e8867ba3c3560d38dafbac4
# Parent  11191f1c3d088cc8af01afda410a47928e551683
dirstate: test normalize is truthy instead of using a no-op lambda

hg perfstatus -u on a working directory with 170,000 files, without this
change:
! wall 1.869404 comb 1.850000 user 1.170000 sys 0.680000 (best of 6)

With this change:
! wall 1.839561 comb 1.830000 user 1.120000 sys 0.710000 (best of 6)

diff -r 11191f1c3d08 -r 6688ba567bcd mercurial/dirstate.py
--- a/mercurial/dirstate.py	Mon Dec 03 14:21:45 2012 -0800
+++ b/mercurial/dirstate.py	Tue Dec 04 10:29:18 2012 -0800
@@ -605,7 +605,7 @@
             normalize = self._normalize
             skipstep3 = False
         else:
-            normalize = lambda x, y, z: x
+            normalize = None
 
         files = sorted(match.files())
         subrepos.sort()
@@ -626,7 +626,10 @@
 
         # step 1: find all explicit files
         for ff in files:
-            nf = normalize(normpath(ff), False, True)
+            if normalize:
+                nf = normalize(normpath(ff), False, True)
+            else:
+                nf = normpath(ff)
             if nf in results:
                 continue
 
@@ -676,7 +679,10 @@
                     continue
                 raise
             for f, kind, st in entries:
-                nf = normalize(nd and (nd + "/" + f) or f, True, True)
+                if normalize:
+                    nf = normalize(nd and (nd + "/" + f) or f, True, True)
+                else:
+                    nf = nd and (nd + "/" + f) or f
                 if nf not in results:
                     if kind == dirkind:
                         if not ignore(nf):


More information about the Mercurial-devel mailing list