def checkDigest(self, downloadRetriesLeft=3):
        CraftCore.log.debug("ArchiveSource.checkDigest called")
        filenames = self.localFileNames()

        if self.subinfo.hasTargetDigestUrls():
            CraftCore.log.debug("check digests urls")
            if not CraftHash.checkFilesDigests(self.__downloadDir, filenames):
                CraftCore.log.error("invalid digest file")
                redownload = downloadRetriesLeft and CraftChoicePrompt.promptForChoice(
                    "Do you want to delete the files and redownload them?",
                    [("Yes", True), ("No", False)],
                    default="Yes")
                if redownload:
                    for filename in filenames:
                        CraftCore.log.info(
                            f"Deleting downloaded file: {filename}")
                        utils.deleteFile(
                            os.path.join(self.__downloadDir, filename))
                        for digestAlgorithm, digestFileEnding in CraftHash.HashAlgorithm.fileEndings(
                        ).items():
                            digestFileName = filename + digestFileEnding
                            if os.path.exists(
                                    os.path.join(self.__downloadDir,
                                                 digestFileName)):
                                CraftCore.log.info(
                                    f"Deleting downloaded file: {digestFileName}"
                                )
                                utils.deleteFile(
                                    os.path.join(self.__downloadDir,
                                                 digestFileName))
                    return self.fetch() and self.checkDigest(
                        downloadRetriesLeft - 1)
                return False
        elif self.subinfo.hasTargetDigests():
            CraftCore.log.debug("check digests")
            digests, algorithm = self.subinfo.targetDigest()
            if not CraftHash.checkFilesDigests(self.__downloadDir, filenames,
                                               digests, algorithm):
                CraftCore.log.error("invalid digest file")
                redownload = downloadRetriesLeft and CraftChoicePrompt.promptForChoice(
                    "Do you want to delete the files and redownload them?",
                    [("Yes", True), ("No", False)],
                    default="Yes")
                if redownload:
                    for filename in filenames:
                        CraftCore.log.info(
                            f"Deleting downloaded file: {filename}")
                        utils.deleteFile(
                            os.path.join(self.__downloadDir, filename))
                    return self.fetch() and self.checkDigest(
                        downloadRetriesLeft - 1)
                return False
        else:
            CraftCore.log.debug("print source file digests")
            CraftHash.printFilesDigests(
                self.__downloadDir,
                filenames,
                self.subinfo.buildTarget,
                algorithm=CraftHash.HashAlgorithm.SHA256)
        return True
    def checkDigest(self):
        craftDebug.log.debug("ArchiveSource.checkDigest called")
        filenames = self.localFileNames()

        if self.subinfo.hasTargetDigestUrls():
            craftDebug.log.debug("check digests urls")
            if not CraftHash.checkFilesDigests(CraftStandardDirs.downloadDir(),
                                               filenames):
                craftDebug.log.error("invalid digest file")
                return False
        elif self.subinfo.hasTargetDigests():
            craftDebug.log.debug("check digests")
            digests, algorithm = self.subinfo.targetDigest()
            if not CraftHash.checkFilesDigests(CraftStandardDirs.downloadDir(),
                                               filenames, digests, algorithm):
                craftDebug.log.error("invalid digest file")
                return False
        else:
            craftDebug.log.debug("print source file digests")
            CraftHash.printFilesDigests(
                CraftStandardDirs.downloadDir(),
                filenames,
                self.subinfo.buildTarget,
                algorithm=CraftHash.HashAlgorithm.SHA256)
        return True
Exemple #3
0
 def checkDigest(self, downloadRetriesLeft=3):
     CraftCore.log.debug("ArchiveSource.checkDigest called")
     filenames = self.localFileNames()
     if self.subinfo.hasTargetDigestUrls():
         CraftCore.log.debug("check digests urls")
         if not CraftHash.checkFilesDigests(self.__downloadDir, filenames):
             CraftCore.log.error("invalid digest file")
             return self.__retry(downloadRetriesLeft,
                                 self.__redownload,
                                 filenames=filenames)
     elif self.subinfo.hasTargetDigests():
         CraftCore.log.debug("check digests")
         digests, algorithm = self.subinfo.targetDigest()
         if not CraftHash.checkFilesDigests(self.__downloadDir, filenames,
                                            digests, algorithm):
             CraftCore.log.error("invalid digest file")
             return self.__retry(downloadRetriesLeft,
                                 self.__redownload,
                                 filenames=filenames)
     else:
         CraftCore.log.debug("print source file digests")
         CraftHash.printFilesDigests(
             self.__downloadDir,
             filenames,
             self.subinfo.buildTarget,
             algorithm=CraftHash.HashAlgorithm.SHA256)
     return True
Exemple #4
0
 def test_printFilesDigests(self):
     path, name = os.path.split(self.tmpFile)
     log = io.StringIO()
     oldLog = CraftCore.debug._handler.stream
     CraftCore.debug._handler.stream = log
     CraftHash.printFilesDigests(path, [name], "test", CraftHash.HashAlgorithm.SHA256)
     self.assertEquals(
         "Digests for test: (['4fc1e96dc5ecf625efe228fce1b0964b6302cfa4d4fb2bb8d16c665d23f6ff30'], CraftHash.HashAlgorithm.SHA256)\n", log.getvalue())
     CraftCore.debug._handler.stream = oldLog