[PATCH 6 of 6 A2 series] store: use parsers.dotauxencode

Adrian Buehlmann adrian at cadifra.com
Sat Oct 6 04:52:27 CDT 2012


# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1349515629 -7200
# Node ID 0ceddcdb535e9f991d1185905c3e12dc13bc9bf0
# Parent  5ad5ecf11d72f5a44100ababfd5a50f1cf112c91
store: use parsers.dotauxencode

This would additionally bring netbeans down from

  $ hg perffncacheencode
  ! wall 0.617000 comb 0.624004 user 0.624004 sys 0.000000 (best of 17)

to

  $ hg perffncacheencode
  ! wall 0.488000 comb 0.483603 user 0.483603 sys 0.000000 (best of 21)

(another 20% speedup)

diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -183,14 +183,22 @@
             path[i] = n[:-1] + "~%02x" % ord(n[-1])
     return path
 
+def _pydotauxencode(path):
+    return '/'.join(_auxencode(path.split('/'), True))
+
+_dotauxencode = getattr(parsers, 'dotauxencode', _pydotauxencode)
+
 _maxstorepathlen = 120
 _dirprefixlen = 8
 _maxshortdirslen = 8 * (_dirprefixlen + 1) - 4
 
 def _hashencode(path, dotencode):
     digest = _sha(path).hexdigest()
-    le = lowerencode(path).split('/')[1:]
-    parts = _auxencode(le, dotencode)
+    le = lowerencode(path)
+    if dotencode:
+        parts = _dotauxencode(le).split('/')[1:]
+    else:
+        parts = _auxencode(le.split('/')[1:], dotencode)
     basename = parts[-1]
     _root, ext = os.path.splitext(basename)
     sdirs = []


More information about the Mercurial-devel mailing list