Пример #1
0
    def __ValidateDependencies(self, config: Config,
                               packages: List[Package]) -> None:
        exceptionList = []  # type: List[Exception]
        exceptionList2 = []  # type: List[Exception]
        for package in packages:
            try:
                #allDependenciesDict = {}
                #stack = [package]
                graph = DependencyGraph(package)  #, True)
                orderedDependencyList = []  # type: List[Package]
                self.__ValidateDependenciesFor(orderedDependencyList, package,
                                               graph)
                orderedDependencyList.reverse()
                package.ResolvedBuildOrder = orderedDependencyList
                # NOTE: we can not filter the dependency list based on 'ExperimentalRecipes' here since we need to resolve it first
                # package.ResolvedExperimentalRecipeBuildOrder = [entry for entry in orderedDependencyList if not entry.DirectExperimentalRecipe is None]
            except CircularDependencyException as ex:
                if config.GroupException:
                    exceptionList.append(ex)
                else:
                    raise
            except CircularDependencyInDependentModuleException as ex:
                if config.GroupException:
                    exceptionList2.append(ex)
                else:
                    raise

        if len(exceptionList) > 0:
            raise GroupedException(exceptionList)
        # If the below exception is fired we have a internal error
        # as any entry in exceptionList2 should result in entries in
        # exceptionList
        if len(exceptionList2) > 0:
            raise GroupedException(exceptionList2)
Пример #2
0
    def __SanityCheckDependencies(directDependencies: List[DependencyRecord], name: UnresolvedPackageName) -> None:
        if len(directDependencies) <= 0:
            return

        uniquePackageDict = dict() # type: Dict[UnresolvedPackageName, List[EvaluationPackage.DependencyRecord]]
        for record in directDependencies:
            if record.Package.Name == name:
                raise CircularDependencyException("Can not add dependency to self '{0}'".format(record.Package.Name))
            if record.Package.Name not in uniquePackageDict:
                recordList = []   # type: List[EvaluationPackage.DependencyRecord]
                uniquePackageDict[record.Package.Name] = recordList
            else:
                recordList = uniquePackageDict[record.Package.Name]
            recordList.append(record)

        exceptionList = None # type: Optional[List[Exception]]
        for pairKey, pairValue in uniquePackageDict.items():
            if EvaluationPackage.__IsDuplicatedDependency(pairValue):
                if exceptionList is None:
                    exceptionList = []

                helpStr = EvaluationPackage.__ToDuplicatedDependencyHelp(name, pairKey, pairValue)

                exceptionList.append(Exception("Package '{0}' has duplicate dependency to '{1}': [{2}]'".format(name, pairKey, helpStr)))

        if exceptionList is not None and len(exceptionList) > 0:
            if len(exceptionList) > 1:
                raise GroupedException(exceptionList)
            else:
                raise exceptionList[0]
    def RaiseExceptionFromErrorRecords(self, sourcePackage: Package, errorRecordList: List[ErrorRecord]) -> None:
        self.__PackageRecipeResultManager.AddIfMissing(sourcePackage.Name)

        sourceRecipe = sourcePackage.ResolvedDirectExperimentalRecipe
        if sourceRecipe is None:
            raise Exception("Invalid recipe")

        exceptionList = [Exception("Installation validation failed for package '{0}' recipe '{1}'".format(sourcePackage.Name, sourceRecipe.Name))]
        for errorRecord in errorRecordList:
            exceptionList.append(Exception(errorRecord.ToString()))
        raise GroupedException(exceptionList)
Пример #4
0
 def __ValidateRequirementExtends(log: Log, finalResolveOrder: List[PreResolvePackageResult]) -> None:
     errors = []
     for package in finalResolveOrder:
         for requirement in package.ResolvedDirectRequirements:
             if requirement.Type != PackageRequirementTypeString.Feature or len(requirement.Extends) != 0:
                 parent = PreResolver.__TryLocateRequiredFeature(package.ResolvedAllRequirements, requirement.Extends)
                 if parent is None:
                     errors.append((package, requirement))
     if len(errors) > 0:
         exceptionList = [] # type: List[Exception]
         for error in errors:
             exceptionList.append(PackageRequirementExtendsUnusedFeatureException(error[1].Name, error[1].Extends, error[0].SourcePackage.NameInfo.FullName.Value))
         raise GroupedException(exceptionList)
Пример #5
0
 def __CheckForExceptions(exceptionList: Optional[List[Exception]]) -> None:
     if exceptionList is not None and len(exceptionList) > 0:
         if len(exceptionList) > 1:
             raise GroupedException(exceptionList)
         else:
             raise exceptionList[0]