# HG changeset patch # User Gregory Szorc # 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:]