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
--- 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:]