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 Parse(self, path):
        result = []

        jsondata = None
        with open(path, 'r', encoding='utf-8') as jsonfile:
            jsondata = json.load(jsonfile)

        for packagedata in SimplifyResult(jsondata):
            entity = packagedata['project'].rsplit(
                '/', 1)[-1]  # this is URL, take only the ID from it

            # use Arch and AUR package names as a name, as they are most non-ambigous
            names = []
            for field in ['arch_packages', 'aur_packages']:
                if packagedata[field]:
                    names = packagedata[field].split(', ')
                    break

            # generate a package for each package name; these will be merged anyway
            for name in set(names):
                # generate a package for each version
                for version in packagedata['versions'].split(', '):
                    version, *flags = version.split('|')

                    is_devel = 'U' in flags
                    is_foreign_os_release = 'O' in flags and 'L' not in flags

                    if is_foreign_os_release:
                        print(
                            'WARNING: {} ({}) version {} skipped as non-linux release'
                            .format(packagedata['projectLabel'], entity,
                                    version),
                            file=sys.stderr)
                        continue

                    pkg = Package()

                    pkg.SetFlag(PackageFlags.devel, is_devel)

                    pkg.name = entity
                    pkg.effname = name
                    pkg.version = version

                    if 'projectDescription' in packagedata:
                        pkg.comment = packagedata['projectDescription']
                    else:
                        pkg.comment = packagedata['projectLabel']

                    if packagedata['licenses']:
                        pkg.licenses = packagedata['licenses'].split(', ')

                    if packagedata['websites']:
                        pkg.homepage = packagedata['websites'].split(', ')[
                            0]  # XXX: use all websites when supported

                    result.append(pkg)

        return result
Exemple #3
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 #4
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:
                return
Exemple #5
0
    def Parse(self, path):
        packages = []

        for filename in os.listdir(path):
            if not filename.endswith('.json'):
                continue

            with open(os.path.join(path, filename), 'r') as jsonfile:
                for result in json.load(jsonfile)['results']:
                    pkg = Package()

                    pkg.name = result['Name']

                    has_badsuffix = False
                    for badsuffix in [
                            '-cvs', '-svn', '-hg', '-darcs', '-bzr', '-git',
                            '-bin'
                    ]:
                        if pkg.name.endswith(badsuffix):
                            pkg.effname = pkg.name[:-len(badsuffix)]
                            pkg.ignoreversion = True
                            break

                    pkg.version, pkg.origversion = SanitizeVersion(
                        result['Version'])
                    pkg.comment = result['Description']
                    pkg.homepage = result['URL']

                    if 'License' in result:
                        for license in result['License']:
                            pkg.licenses.append(license)

                    if 'Maintainer' in result and result['Maintainer']:
                        pkg.maintainers += GetMaintainers(
                            result['Maintainer'] + '@aur')

                    packages.append(pkg)

        return packages
Exemple #6
0
 def tolowername_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.effname = package.effname.lower()
Exemple #7
0
 def replaceinname_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     for pattern, replacement in replace_items:
         package.effname = package.effname.replace(pattern, replacement)
Exemple #8
0
 def setname_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.effname = match_context.sub_name_dollars(setname, package.effname)