--- a/mercurial/parsers.c Wed Apr 15 17:42:38 2015 -0400
+++ b/mercurial/parsers.c Wed Apr 15 14:35:44 2015 -0700
@@ -205,7 +205,20 @@
goto quit;
}
+#if PY_VERSION_HEX >= 0x02060000
+ /* _PyDict_NewPresized expects a minused parameter, but it actually
+ creates a dictionary that's the nearest power of two bigger than the
+ parameter. For example, with the initial minused = 1000, the
+ dictionary created has size 1024. Of course in a lot of cases that
+ can be greater than the maximum load factor Python's dict object
+ expects (= 2/3), so as soon as we cross the threshold we'll resize
+ anyway. So create a dictionary that's 3/2 the size. Also add some
+ more to deal with additions outside this function. */
+ file_foldmap = _PyDict_NewPresized((PyDict_Size(dmap) / 5) * 8);
+#else
file_foldmap = PyDict_New();
+#endif
+
if (file_foldmap == NULL)
goto quit;