def addrevision( self, text, transaction, linknode, p1, p2, cachedelta=None, node=None, flags=revlog.REVIDX_DEFAULT_FLAGS, sidedata=None, ): # text passed to "addrevision" includes hg filelog metadata header if node is None: node = storageutil.hashrevisionsha1(text, p1, p2) if sidedata is None: sidedata = {} meta, metaoffset = storageutil.parsemeta(text) rawtext, validatehash = flagutil.processflagswrite( self, text, flags, sidedata=sidedata ) return self.addrawrevision( rawtext, transaction, linknode, p1, p2, node, flags, cachedelta, _metatuple=(meta, metaoffset), )
def addrevision( self, revisiondata, transaction, linkrev, p1, p2, node=None, flags=0, cachedelta=None, ): if flags: raise SQLiteStoreError(_(b'flags not supported on revisions')) validatehash = node is not None node = node or storageutil.hashrevisionsha1(revisiondata, p1, p2) if validatehash: self._checkhash(revisiondata, node, p1, p2) if node in self._nodetorev: return node node = self._addrawrevision( node, revisiondata, transaction, linkrev, p1, p2 ) self._revisioncache[node] = revisiondata return node
def add(self, text, meta, transaction, linknode, p1=None, p2=None): # hash with the metadata, like in vanilla filelogs hashtext = shallowutil.createrevlogtext( text, meta.get(b'copy'), meta.get(b'copyrev') ) node = storageutil.hashrevisionsha1(hashtext, p1, p2) return self.addrevision( hashtext, transaction, linknode, p1, p2, node=node )
def addrevision(self, text, transaction, linkrev, p1, p2, node=None, flags=revlog.REVIDX_DEFAULT_FLAGS, cachedelta=None): validatenode(p1) validatenode(p2) if flags: node = node or storageutil.hashrevisionsha1(text, p1, p2) rawtext, validatehash = self._processflags(text, flags, 'write') node = node or storageutil.hashrevisionsha1(text, p1, p2) if node in self._indexbynode: return node if validatehash: self.checkhash(rawtext, node, p1=p1, p2=p2) return self._addrawrevision(node, rawtext, transaction, linkrev, p1, p2, flags)
def _checkhash(self, fulltext, node, p1=None, p2=None): if p1 is None and p2 is None: p1, p2 = self.parents(node) if node == storageutil.hashrevisionsha1(fulltext, p1, p2): return try: del self._revisioncache[node] except KeyError: pass if storageutil.iscensoredtext(fulltext): raise error.CensoredNodeError(self._path, node, fulltext) raise SQLiteStoreError(_(b'integrity check failed on %s') % self._path)
def cmp(self, node, text): validatenode(node) t = text if text.startswith(b'\1\n'): t = b'\1\n\1\n' + text p1, p2 = self.parents(node) if storageutil.hashrevisionsha1(t, p1, p2) == node: return False if self.iscensored(self.rev(node)): return text != b'' if self.renamed(node): t2 = self.read(node) return t2 != text return True
def checkhash(self, text, node, p1=None, p2=None, rev=None): if p1 is None and p2 is None: p1, p2 = self.parents(node) if node != storageutil.hashrevisionsha1(text, p1, p2): raise simplestoreerror(_("integrity check failed on %s") % self._path)