Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
            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)
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
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):
                            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
Esempio n. 8
0
    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