Esempio n. 1
0
    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),
        )
Esempio n. 2
0
    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
Esempio n. 3
0
 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
     )
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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
Esempio n. 7
0
 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)