Exemple #1
0
    def process(self, package: Package) -> None:
        self._packages_processed += 1

        if self._packages_processed == 1000 or self._packages_processed == 10000 or self._packages_processed == 100000 or self._packages_processed == 1000000:
            self._recalc_opt_ruleblocks()

        package.effname = package.basename if package.basename is not None else package.name

        package_context = PackageContext()
        if package.repo:
            package_context.set_rulesets(
                self._repomgr.get_repository(package.repo)['ruleset'])

        for rule in self._iter_package_rules(package):
            match_context = rule.match(package, package_context)
            if not match_context:
                continue
            rule.apply(package, package_context, match_context)
            if match_context.last:
                break

        if package_context.warnings and not package.has_flag(
                PackageFlags.REMOVE):
            for warning in package_context.warnings:
                print('Rule warning for {} ({}) in {}: {}'.format(
                    package.effname, package.name, package.repo, warning),
                      file=sys.stderr)

        if package.has_flag(PackageFlags.TRACE):
            print('Rule trace for {} ({}) {} in {}'.format(
                package.effname, package.name, package.version, package.repo),
                  file=sys.stderr)
            for rulenum in package_context.matched_rules:
                print('{:5d} {}'.format(rulenum, self._rules[rulenum].pretty),
                      file=sys.stderr)
Exemple #2
0
    def process(self, package: Package) -> None:
        # XXX: duplicate code: PackageMaker does the same
        package.effname = package.projectname_seed

        package_context = PackageContext()

        if package.repo != self._repository_name:
            raise RuntimeError(
                f'not expected package from repository "{package.repo}" with ruleset for repository "{self._repository_name}"'
            )

        if self._active_statistics is self._next_statistics:
            if self._active_statistics.get_total_packages() in (10, 100, 1000,
                                                                10000, 100000):
                self._iterator.update_statistics(self._active_statistics)
        else:
            if self._next_statistics.get_total_packages(
            ) > self._active_statistics.get_total_packages() * 1.1:
                self._active_statistics = self._next_statistics
                self._iterator.update_statistics(self._active_statistics)

        self._next_statistics.count_package()

        for rule in self._iterator.iter_rules_for_package(package):
            match_context = rule.match(package, package_context)
            if not match_context:
                continue

            self._next_statistics.count_rule_match(rule.texthash)

            rule.apply(package, package_context, match_context)
            if match_context.last:
                break

        if package_context.warnings and not package.has_flag(
                PackageFlags.REMOVE):
            for warning in package_context.warnings:
                print('Rule warning for {} ({}) in {}: {}'.format(
                    package.effname, package.trackname or '???', package.repo,
                    warning),
                      file=sys.stderr)

        if package.has_flag(PackageFlags.TRACE):
            print('Rule trace for {} ({}) {} in {}'.format(
                package.effname, package.trackname or '???', package.version,
                package.repo),
                  file=sys.stderr)
            for rulenum in package_context.matched_rules:
                print('{:5d} {}'.format(
                    rulenum,
                    self._ruleset.get_rules()[rulenum].pretty),
                      file=sys.stderr)
Exemple #3
0
 def is_p_is_patch_matcher(package: Package, package_context: PackageContext, match_context: MatchContext) -> bool:
     return package.has_flag(PackageFlags.P_IS_PATCH) == is_p_is_patch