mercurial/dirstate.py
changeset 21810 4b2ebd3187a1
parent 21809 e250b8300e6e
child 21931 89b809fa6cef
--- a/mercurial/dirstate.py	Tue May 27 14:27:41 2014 -0700
+++ b/mercurial/dirstate.py	Tue May 27 21:02:16 2014 -0700
@@ -823,7 +823,18 @@
                     uadd(fn)
                 continue
 
-            state, mode, size, time = dmap[fn]
+            # This is equivalent to 'state, mode, size, time = dmap[fn]' but not
+            # written like that for performance reasons. dmap[fn] is not a
+            # Python tuple in compiled builds. The CPython UNPACK_SEQUENCE
+            # opcode has fast paths when the value to be unpacked is a tuple or
+            # a list, but falls back to creating a full-fledged iterator in
+            # general. That is much slower than simply accessing and storing the
+            # tuple members one by one.
+            t = dmap[fn]
+            state = t[0]
+            mode = t[1]
+            size = t[2]
+            time = t[3]
 
             if not st and state in "nma":
                 dadd(fn)