[PATCH 7 of 7 hglib] hglib: optimize bytes conversion and concatentation (issue4520)

Brett Cannon brett at python.org
Wed Mar 25 19:40:01 CDT 2015


# HG changeset patch
# User Brett Cannon <brett at python.org>
# Date 1427330246 14400
#      Wed Mar 25 20:37:26 2015 -0400
# Node ID 5fd7c9d103ee0424e10a9e2d4cc08c7b733a2e71
# Parent  580123ac44cc97d4ad2cc7b7a9c874be5e473d30
hglib: optimize bytes conversion and concatentation (issue4520)

diff -r 580123ac44cc -r 5fd7c9d103ee hglib/context.py
--- a/hglib/context.py	Wed Mar 25 20:27:34 2015 -0400
+++ b/hglib/context.py	Wed Mar 25 20:37:26 2015 -0400
@@ -1,7 +1,7 @@
 import hglib.client  # Circular dependency.
 from hglib import util, templates
 from hglib.error import CommandError
-from hglib.util import b, strtobytes, integertypes
+from hglib.util import b, strtobytes, integertypes, bytesjoin
 
 _nullcset = [b('-1'), b('0000000000000000000000000000000000000000'), b(''),
              b(''), b(''), b(''), b('')]
@@ -20,7 +20,7 @@
             cset = _nullcset
         else:
             if isinstance(changeid, integertypes):
-                changeid = b('rev(') + strtobytes(changeid) + b(')')
+                changeid = bytesjoin(b('rev('), strtobytes(changeid), b(')'))
 
             notfound = False
             try:
@@ -219,15 +219,16 @@
 
     def children(self):
         """return contexts for each child changeset"""
-        for c in self._repo.log(b('children(') + self._node + b(')')):
+        for c in self._repo.log(bytesjoin(b('children('), self._node, b(')'))):
             yield changectx(self._repo, c)
 
     def ancestors(self):
-        for a in self._repo.log(b('ancestors(') + self._node + b(')')):
+        for a in self._repo.log(bytesjoin(b('ancestors('), self._node, b(')'))):
             yield changectx(self._repo, a)
 
     def descendants(self):
-        for d in self._repo.log(b('descendants(') + self._node + b(')')):
+        descendant = bytesjoin(b('descendants('), self._node, b(')'))
+        for d in self._repo.log(descendant):
             yield changectx(self._repo, d)
 
     def ancestor(self, c2):
@@ -235,4 +236,4 @@
         return the ancestor context of self and c2
         """
         return changectx(self._repo,
-                         b('ancestor(') + self + b(', ') + c2 + b(')'))
+                         bytesjoin(b('ancestor('), self, b(', '), c2, b(')')))
diff -r 580123ac44cc -r 5fd7c9d103ee hglib/util.py
--- a/hglib/util.py	Wed Mar 25 20:27:34 2015 -0400
+++ b/hglib/util.py	Wed Mar 25 20:37:26 2015 -0400
@@ -16,14 +16,15 @@
     from itertools import izip
     integertypes = (long, int)
 
-    def b(s):
-        """Encode the string as bytes."""
-        return s
+    b = str
 
 def strtobytes(s):
     """Return the bytes of the string representation of an object."""
     return str(s).encode('latin-1')
 
+def bytesjoin(*args):
+    return b('').join(args)
+
 def grouper(n, iterable):
     ''' list(grouper(2, range(4))) -> [(0, 1), (2, 3)] '''
     args = [iter(iterable)] * n


More information about the Mercurial-devel mailing list