dirstate: call the C implementation of nonnonormalentries when available
authorLaurent Charignon <lcharignon@fb.com>
Wed, 23 Dec 2015 13:16:03 -0800
changeset 27593 bc97b9af4e62
parent 27592 7c9eb2927879
child 27594 0921caca7703
dirstate: call the C implementation of nonnonormalentries when available Before this patch, we were using python code for computing the nonnormal dirstate entries. This patch makes us use the C implementation of the function when it is available. Using the nonnormal set in hgwatchman improves hg status performance. Below are the numbers for mozilla-central. with the changes: $ hg perfstatus ! wall 0.010632 comb 0.000000 user 0.000000 sys 0.000000 (best of 246) without the changes: $ hg perfstatus ! wall 0.036442 comb 0.030000 user 0.030000 sys 0.000000 (best of 100) On mozilla-central the improvement to hg status is ~20% (0.25s to 0.2s), on our big repos at Facebook, the win is ~40% (1.2s to 0.72s).
mercurial/dirstate.py
--- a/mercurial/dirstate.py	Mon Dec 21 16:27:16 2015 -0800
+++ b/mercurial/dirstate.py	Wed Dec 23 13:16:03 2015 -0800
@@ -51,8 +51,11 @@
 
 def nonnormalentries(dmap):
     '''Compute the nonnormal dirstate entries from the dmap'''
-    return set(fname for fname, e in dmap.iteritems()
-           if e[0] != 'n' or e[3] == -1)
+    try:
+        return parsers.nonnormalentries(dmap)
+    except AttributeError:
+        return set(fname for fname, e in dmap.iteritems()
+                   if e[0] != 'n' or e[3] == -1)
 
 def _trypending(root, vfs, filename):
     '''Open  file to be read according to HG_PENDING environment variable