diff --git a/mercurial/filelog.py b/mercurial/filelog.py --- a/mercurial/filelog.py +++ b/mercurial/filelog.py @@ -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'): 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 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:]