[PATCH 02 of 10] introduced filelog._parsemeta() to avoid infinite recursion

Sune Foldager cryo at cyanite.org
Wed Sep 8 14:48:15 CDT 2010


# HG changeset patch
# User Sune Foldager <sune.foldager at edlund.dk>
# Date 1282639644 -7200
# Node ID 535a7795f14b5a3ded71009aa06fa46498770d80
# Parent  4d7896b3d7c87241e070b5672e9e1db3f1fbe757
introduced filelog._parsemeta() to avoid infinite recursion
* * *
text unpacking needs instance of str

diff --git a/mercurial/filelog.py b/mercurial/filelog.py
--- a/mercurial/filelog.py
+++ b/mercurial/filelog.py
@@ -20,16 +20,7 @@
         return t[s + 2:]
 
     def _readmeta(self, node):
-        t = self.revision(node)
-        if not t.startswith('\1\n'):
-            return {}
-        s = t.index('\1\n', 2)
-        mt = t[2:s]
-        m = {}
-        for l in mt.splitlines():
-            k, v = l.split(": ", 1)
-            m[k] = v
-        return m
+        return _parsemeta(self.revision(node))
 
     def add(self, text, meta, transaction, link, p1=None, p2=None):
         if meta or text.startswith('\1\n'):
@@ -77,3 +68,15 @@
             return t2 != text
 
         return True
+
+def _parsemeta(t):
+    # t can be buffer, so we can't use .startswith
+    if t[:2] != '\1\n':
+        return {}
+    s = t.index('\1\n', 2)
+    mt = t[2:s]
+    m = {}
+    for l in mt.splitlines():
+        k, v = l.split(": ", 1)
+        m[k] = v
+    return m


More information about the Mercurial-devel mailing list