def _processflags(self, text, flags, operation, raw=False): # mostly copied from hg/mercurial/revlog.py validatehash = True orderedflags = revlog.REVIDX_FLAGS_ORDER if operation == "write": orderedflags = reversed(orderedflags) for flag in orderedflags: if flag & flags: vhash = True if flag not in revlog._flagprocessors: message = _("missing processor for flag '%#x'") % flag raise revlog.RevlogError(message) readfunc, writefunc, rawfunc = revlog._flagprocessors[flag] if raw: vhash = rawfunc(self, text) elif operation == "read": text, vhash = readfunc(self, text) elif operation == "write": text, vhash = writefunc(self, text) validatehash = validatehash and vhash return text, validatehash
def addrevision( self, text, transaction, linknode, p1, p2, cachedelta=None, node=None, flags=revlog.REVIDX_DEFAULT_FLAGS, ): # text passed to "addrevision" includes hg filelog metadata header if node is None: node = revlog.hash(text, p1, p2) meta, metaoffset = filelog.parsemeta(text) rawtext, validatehash = self._processflags(text, flags, "write") if len(rawtext) > _maxentrysize: raise revlog.RevlogError( _("%s: size of %s exceeds maximum size of %s") % ( self.filename, util.bytecount(len(rawtext)), util.bytecount(_maxentrysize), ) ) return self.addrawrevision( rawtext, transaction, linknode, p1, p2, node, flags, cachedelta, _metatuple=(meta, metaoffset), )