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)
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
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)
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
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
def tolowername_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None: package.effname = package.effname.lower()
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)
def setname_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None: package.effname = match_context.sub_name_dollars(setname, package.effname)