diff -r 0596d27457c6 -r 65250a66b55c mercurial/filelog.py --- a/mercurial/filelog.py Thu Apr 05 18:22:35 2018 -0700 +++ b/mercurial/filelog.py Thu Apr 05 16:31:45 2018 -0700 @@ -7,27 +7,20 @@ from __future__ import absolute_import -import struct - from .thirdparty.zope import ( interface as zi, ) from . import ( - error, - mdiff, repository, revlog, ) -def _censoredtext(text): - m, offs = revlog.parsemeta(text) - return m and "censored" in m - @zi.implementer(repository.ifilestorage) class filelog(revlog.revlog): def __init__(self, opener, path): super(filelog, self).__init__(opener, - "/".join(("data", path + ".i"))) + "/".join(("data", path + ".i")), + censorable=True) # full name of the user visible file, relative to the repository root self.filename = path @@ -90,35 +83,3 @@ return t2 != text return True - - def checkhash(self, text, node, p1=None, p2=None, rev=None): - try: - super(filelog, self).checkhash(text, node, p1=p1, p2=p2, rev=rev) - except error.RevlogError: - if _censoredtext(text): - raise error.CensoredNodeError(self.indexfile, node, text) - raise - - def iscensored(self, rev): - """Check if a file revision is censored.""" - return self.flags(rev) & revlog.REVIDX_ISCENSORED - - def _peek_iscensored(self, baserev, delta, flush): - """Quickly check if a delta produces a censored revision.""" - # Fragile heuristic: unless new file meta keys are added alphabetically - # preceding "censored", all censored revisions are prefixed by - # "\1\ncensored:". A delta producing such a censored revision must be a - # full-replacement delta, so we inspect the first and only patch in the - # delta for this prefix. - hlen = struct.calcsize(">lll") - if len(delta) <= hlen: - return False - - oldlen = self.rawsize(baserev) - newlen = len(delta) - hlen - if delta[:hlen] != mdiff.replacediffheader(oldlen, newlen): - return False - - add = "\1\ncensored:" - addlen = len(add) - return newlen >= addlen and delta[hlen:hlen + addlen] == add