Mercurial > hg
changeset 39880:1b65fb4d43d6
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
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 24 Sep 2018 14:54:28 -0700 |
parents | d269ddbf54f0 |
children | d63153611ed5 |
files | mercurial/filelog.py mercurial/utils/storageutil.py |
diffstat | 2 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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:]