# HG changeset patch
# User Gregory Szorc <gregory.szorc@gmail.com>
# Date 2018-09-24 21:54:28
# Node ID 1b65fb4d43d66f6489cba0dd30a5b370efb3082e
# Parent  d269ddbf54f019624caa4f43fac1b4c5ea5b1d2f

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

diff --git a/mercurial/filelog.py b/mercurial/filelog.py
--- a/mercurial/filelog.py
+++ b/mercurial/filelog.py
@@ -113,11 +113,7 @@ class filelog(object):
         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'):
diff --git a/mercurial/utils/storageutil.py b/mercurial/utils/storageutil.py
--- a/mercurial/utils/storageutil.py
+++ b/mercurial/utils/storageutil.py
@@ -69,3 +69,15 @@ def packmeta(meta, text):
 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:]