storageutil: new function for extracting metadata-less content from text
authorGregory Szorc <gregory.szorc@gmail.com>
Mon, 24 Sep 2018 14:54:28 -0700
changeset 39880 1b65fb4d43d6
parent 39879 d269ddbf54f0
child 39881 d63153611ed5
storageutil: new function for extracting metadata-less content from text Other storage backends will want to do this. I'm not concerned about Python function call overhead because I expect self.revision() to dwarf the function call overhead time, since self.revision() requires multiple function calls and may involve decompression in the common case. Differential Revision: https://phab.mercurial-scm.org/D4756
mercurial/filelog.py
mercurial/utils/storageutil.py
--- a/mercurial/filelog.py	Mon Sep 24 14:33:45 2018 -0700
+++ b/mercurial/filelog.py	Mon Sep 24 14:54:28 2018 -0700
@@ -113,11 +113,7 @@
         return self._revlog.files()
 
     def read(self, node):
-        t = self.revision(node)
-        if not t.startswith('\1\n'):
-            return t
-        s = t.index('\1\n', 2)
-        return t[s + 2:]
+        return storageutil.filtermetadata(self.revision(node))
 
     def add(self, text, meta, transaction, link, p1=None, p2=None):
         if meta or text.startswith('\1\n'):
--- a/mercurial/utils/storageutil.py	Mon Sep 24 14:33:45 2018 -0700
+++ b/mercurial/utils/storageutil.py	Mon Sep 24 14:54:28 2018 -0700
@@ -69,3 +69,15 @@
 def iscensoredtext(text):
     meta = parsemeta(text)[0]
     return meta and b'censored' in meta
+
+def filtermetadata(text):
+    """Extract just the revision data from source text.
+
+    Returns ``text`` unless it has a metadata header, in which case we return
+    a new buffer without hte metadata.
+    """
+    if not text.startswith(b'\x01\n'):
+        return text
+
+    offset = text.index(b'\x01\n', 2)
+    return text[offset + 2:]