def Parse(self, path): result = [] root = xml.etree.ElementTree.parse(path) for info in root.findall('./info'): pkg = Package() fn = info.attrib['fn'] url = info.attrib['url'] license_ = info.attrib['license'] pos2 = fn.rfind('-') if pos2 == -1: print('WARNING: unable to parse fn: {}'.format(fn), file=sys.stderr) continue pos1 = fn.rfind('-', 0, pos2) if pos1 == -1: print('WARNING: unable to parse fn: {}'.format(fn), file=sys.stderr) continue pkg.name = fn[:pos1] pkg.origversion = fn[pos1 + 1:] pkg.version = fn[pos1 + 1:pos2] pkg.homepage = url pkg.licenses = [license_] result.append(pkg) return result
def Parse(self, path): result = [] with open(path, 'r', encoding='utf-8') as jsonfile: for package in json.load(jsonfile)['packages']: pkg = Package() pkg.name = package['name'] if package['version'] is None: print('no version: {}'.format(pkg.name), file=sys.stderr) continue pkg.version, _ = SanitizeVersion(package['version']) pkg.origversion = package['full_version'] pkg.category = package['pkg_section'] or package['section'] pkg.comment = package['description'] pkg.maintainers = GetMaintainers(package['committer']) if pkg.version == '999': pkg.SetFlag(PackageFlags.ignore) # XXX: rolling? revisit result.append(pkg) return result
def setver_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None: if package.origversion is None: package.origversion = package.version package.version = match_context.sub_ver_dollars( setver, package.version)
def Parse(self, path): result = [] root = xml.etree.ElementTree.parse(path) for info in root.findall('./info'): pkg = Package() # derive names and versions from fn field fn = info.attrib['fn'].rsplit('-', 2) if len(fn) < 3: print('WARNING: unable to parse fn: {}'.format(fn), file=sys.stderr) continue pkg.name = fn[0] pkg.origversion = '-'.join(fn[1:]) pkg.version = fn[1] # Rosa packages are named like PKGNAME-PKGVER-ROSAREV # where ROSAREV is most commonly in the form of N.src, but # may contain other components, such as prerelease stuff # like alpha/beta/rc/pre/... and snapshot revisions/dates # # What we do here is we try to extract prerelease part # and mark version as ignored with non-trivial ROSAREV, # as it it likely a snapshot and trus cannot be trusted if not re.fullmatch('[0-9]+\\.src', fn[2]): pkg.SetFlag(PackageFlags.ignore) match = re.search('\\b(a|alpha|b|beta|pre|rc)[0-9]+', fn[2].lower()) if match: pkg.version += match.group(0) # process url and license url = info.attrib['url'] if url: pkg.homepage = url license_ = info.attrib['license'] pkg.licenses = [license_] result.append(pkg) return result
def Parse(self, path): result = [] for row in lxml.html.parse(path).getroot().xpath( './/table[@class="ctable"]')[0].xpath( './form/tr[position()>3 and position()<last()-3]'): pkg = Package() name, version, revision = row.xpath('./td[1]/a')[0].text.rsplit( '-', 2) pkg.name = name pkg.origversion = version + '-' + revision pkg.version = version.split(':', 1)[-1] # drop epoch result.append(pkg) return result
def Parse(self, path): result = [] root = xml.etree.ElementTree.parse(path) content = root.find('.//div[@id="mw-content-text"]') for item in content.findall( './div[@style="float:left; width:25.3em; height:8.5em; border:1px solid #ccc; padding:0.1em; margin-bottom: 2em; margin-right: 1em; overflow:hidden"]' ): pkg = Package() # name cell = item.find('./p[1]/b[1]/a[1]') if cell is None or not cell.text: continue pkg.name = cell.text # version cell = item.find('./p[2]') if cell is None or not cell.text: continue pkg.version = cell.text match = re.match('(.*) \(.*\)$', pkg.version) if match: pkg.origversion = pkg.version pkg.version = match.group(1) # www for a in item.findall('./p[2]/a'): if a.text == 'Website': pkg.homepage = a.attrib['href'] # category pkg.category = 'games' result.append(pkg) return result
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): has_badsuffix = True break if has_badsuffix: continue pkg.origversion = result['Version'] 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 Parse(self, path): result = [] for category in os.listdir(path): category_path = os.path.join(path, category) if not os.path.isdir(category_path): continue if category == 'virtual' or category == 'metadata': continue for package in os.listdir(category_path): package_path = os.path.join(category_path, package) if not os.path.isdir(package_path): continue metadata_path = os.path.join(package_path, 'metadata.xml') pkg = Package() if os.path.isfile(metadata_path): with open(os.path.join(package_path, 'metadata.xml'), 'r', encoding='utf-8') as metafile: meta = xml.etree.ElementTree.parse(metafile) for entry in meta.findall('maintainer'): email_node = entry.find('email') if email_node is not None and email_node.text is not None: pkg.maintainers += GetMaintainers( email_node.text) maxorigversion = None maxversion = None for ebuild in os.listdir(package_path): if not ebuild.endswith('.ebuild'): continue version, origversion = SanitizeVersion( ebuild[len(package) + 1:-7]) if IsBetterVersion(version, maxversion): maxorigversion = origversion maxversion = version if maxversion is not None: pkg.name = package pkg.version = maxversion pkg.origversion = maxorigversion pkg.category = category if not pkg.maintainers: # If we have no maintainer, assign Gentoo's default maintainer value # See https://wiki.gentoo.org/wiki/GLEP:67#Bug_assignment pkg.maintainers = ['*****@*****.**'] metadata_path = os.path.join( path, 'metadata', 'md5-cache', category, package + '-' + (maxorigversion if maxorigversion else maxversion)) if os.path.isfile(metadata_path): with open(metadata_path, 'r', encoding='utf-8') as metadata_file: for line in metadata_file: line = line.strip() key, value = line.split('=', 1) if key == 'DESCRIPTION': pkg.comment = value elif key == 'HOMEPAGE': pkg.homepage = value.split(' ')[ 0] # XXX: save all urls elif key == 'LICENSE': if value.find('(') != -1: # XXX: conditionals and OR's: need more # complex parsing and backend support pkg.licenses.append(value) else: pkg.licenses += value.split(' ') elif key == 'SRC_URI': pkg.downloads += ParseConditionalExpr( value) result.append(pkg) return result