Beispiel #1
0
def main():
    options = parse_arguments()

    logger = StderrLogger()
    if options.logfile:
        logger = FileLogger(options.logfile)

    if options.fields == 'all':
        options.fields = sorted(Package().__dict__.keys())
    else:
        options.fields = options.fields.split(',')

    # Set up filters
    filters = []
    if options.maintainer:
        filters.append(MaintainerFilter(options.maintainer))
    if options.category:
        filters.append(CategoryFilter(options.maintainer))
    if options.more_repos is not None or options.less_repos is not None:
        filters.append(FamilyCountFilter(more=options.more_repos, less=options.less_repos))
    if options.in_repository:
        filters.append(InRepoFilter(options.in_repository))
    if options.not_in_repository:
        filters.append(NotInRepoFilter(options.not_in_repository))
    if options.outdated_in_repository:
        filters.append(OutdatedInRepoFilter(options.not_in_repository))
    if not options.no_shadow:
        filters.append(ShadowFilter())

    repomgr = RepositoryManager(options.repos_dir)
    repoproc = RepositoryProcessor(repomgr, options.statedir)

    logger.Log('dumping...')
    for packageset in repoproc.StreamDeserializeMulti(reponames=options.reponames):
        FillPackagesetVersions(packageset)

        if not PackagesetCheckFilters(packageset, *filters):
            continue

        if options.dump == 'packages':
            for package in packageset:
                print(
                    options.field_separator.join(
                        (
                            format_package_field(field, getattr(package, field)) for field in options.fields
                        )
                    )
                )
        if options.dump == 'summaries':
            print(packageset[0].effname)
            best_pkg_by_repo = PackagesetToBestByRepo(packageset)
            for reponame in repomgr.GetNames(options.reponames):
                if reponame in best_pkg_by_repo:
                    print('  {}: {} ({})'.format(
                        reponame,
                        best_pkg_by_repo[reponame].version,
                        VersionClass.ToString(best_pkg_by_repo[reponame].versionclass)
                    ))

    return 0
Beispiel #2
0
def Main():
    options = ParseArguments()

    repomgr = RepositoryManager(options.repos_dir)
    repoproc = RepositoryProcessor(repomgr,
                                   options.statedir,
                                   safety_checks=not options.no_safety_checks)

    if options.list:
        print('\n'.join(repomgr.GetNames(reponames=options.reponames)))
        return 0

    transformer = PackageTransformer(repomgr, options.rules_dir)

    logger = StderrLogger()
    if options.logfile:
        logger = FileLogger(options.logfile)

    repositories_updated = []
    repositories_not_updated = []

    start = timer()
    if options.fetch or options.parse or options.reprocess:
        repositories_updated, repositories_not_updated = ProcessRepositories(
            options=options,
            logger=logger,
            repoproc=repoproc,
            transformer=transformer,
            reponames=repomgr.GetNames(reponames=options.reponames))

    if options.initdb or options.database or options.postupdate:
        ProcessDatabase(
            options=options,
            logger=logger,
            repomgr=repomgr,
            repoproc=repoproc,
            repositories_updated=repositories_updated,
            reponames=repomgr.GetNames(reponames=options.reponames))

    if (options.parse or options.reprocess) and (options.show_unmatched_rules):
        ShowUnmatchedRules(options=options,
                           logger=logger,
                           transformer=transformer,
                           reliable=repositories_not_updated == [])

    logger.Log('total time taken: {:.2f} seconds'.format((timer() - start)))

    return 1 if repositories_not_updated else 0
Beispiel #3
0
def main() -> int:
    options = parse_arguments()

    logger: Logger = StderrLogger()
    if options.logfile:
        logger = FileLogger(options.logfile)

    if options.fields == 'all':
        options.fields = sorted(Package().__dict__.keys())
    else:
        options.fields = options.fields.split(',')

    repomgr = RepositoryManager(options.repos_dir)
    repoproc = RepositoryProcessor(repomgr, options.statedir,
                                   options.parseddir)

    logger.log('dumping...')
    for packageset in repoproc.iter_parsed(reponames=options.reponames):
        FillPackagesetVersions(packageset)

        if not options.all and packageset_is_shadow_only(packageset):
            continue

        for package in packageset:
            print(
                options.field_separator.join(
                    (format_package_field(field, getattr(package, field))
                     for field in options.fields)))

    return 0
def main():
    options = parse_arguments()

    logger = StderrLogger()
    if options.logfile:
        logger = FileLogger(options.logfile)

    if options.fields == 'all':
        options.fields = sorted(Package().__dict__.keys())
    else:
        options.fields = options.fields.split(',')

    repomgr = RepositoryManager(options.repos_dir)
    repoproc = RepositoryProcessor(repomgr, options.statedir,
                                   options.parseddir)

    logger.Log('dumping...')
    for packageset in repoproc.iter_parsed(reponames=options.reponames):
        FillPackagesetVersions(packageset)

        if not options.all and packageset_is_shadow_only(packageset):
            continue

        if options.dump == 'packages':
            for package in packageset:
                print(
                    options.field_separator.join(
                        (format_package_field(field, getattr(package, field))
                         for field in options.fields)))
        if options.dump == 'summaries':
            print(packageset[0].effname)
            best_pkg_by_repo = PackagesetToBestByRepo(packageset)
            for reponame in repomgr.GetNames(options.reponames):
                if reponame in best_pkg_by_repo:
                    print('  {}: {} ({})'.format(
                        reponame, best_pkg_by_repo[reponame].version,
                        VersionClass.ToString(
                            best_pkg_by_repo[reponame].versionclass)))

    return 0
Beispiel #5
0
def test_parsers_regress(regtest):
    repomgr = RepositoryManager(YamlConfig.from_path(config['REPOS_DIR']))
    repoproc = RepositoryProcessor(repomgr,
                                   'testdata',
                                   'testdata',
                                   safety_checks=False)

    # NOTE: run the following command to canonize this test after parser or testdata update
    #
    #     pytest -k test_parsers_regress --regtest-reset
    #
    with regtest:
        map(
            print,
            sorted(
                json.dumps(package.__dict__, indent=1)
                for package in repoproc.iter_parse(
                    reponames=['have_testdata'])))
Beispiel #6
0
def main() -> int:
    options = parse_arguments()

    logger: Logger = StderrLogger()
    if options.logfile:
        logger = FileLogger(options.logfile)

    if options.fields == 'all':
        options.fields = ['effname', 'repo', 'version'] + [
            slot for slot in Package.__slots__
            if slot not in ['effname', 'repo', 'version']
        ]
    else:
        options.fields = options.fields.split(',')

    repomgr = RepositoryManager(options.repos_dir)
    repoproc = RepositoryProcessor(repomgr, options.statedir,
                                   options.parseddir)

    logger.log('dumping...')
    for packageset in repoproc.iter_parsed(reponames=options.reponames,
                                           logger=logger):
        if options.from_ is not None and packageset[0].effname < options.from_:
            continue
        if options.to is not None and packageset[0].effname > options.to:
            break

        fill_packageset_versions(packageset)

        if not options.all and packageset_is_shadow_only(packageset):
            continue

        for package in packageset:
            print(
                options.field_separator.join(
                    (format_package_field(field, getattr(package, field, None))
                     for field in options.fields)))

    return 0
Beispiel #7
0
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with repology.  If not, see <http://www.gnu.org/licenses/>.

import unittest
from typing import Any, Dict

from repology.config import config
from repology.repomgr import RepositoryManager
from repology.repoproc import RepositoryProcessor


repomgr = RepositoryManager(config['REPOS_DIR'])
repoproc = RepositoryProcessor(repomgr, 'testdata', 'testdata', safety_checks=False)


class TestParsers(unittest.TestCase):
    def setUp(self) -> None:
        self.maxDiff = None
        self.packages = list(repoproc.iter_parse(reponames=['have_testdata']))

    def check_package(self, name: str, reference: Dict[str, Any]) -> None:
        reference_with_default = {
            # repo must be filled
            # family must be filled
            'subrepo': None,

            # name must be filled
 def get_repo_manager(self) -> RepositoryManager:
     return RepositoryManager(self.options.repos_dir)
Beispiel #9
0
# along with repology.  If not, see <http://www.gnu.org/licenses/>.

# mypy: no-disallow-untyped-calls

import unittest
from typing import Any, Dict

from repology.package import Package, PackageFlags
from repology.repomgr import RepositoryManager
from repology.transformer import PackageTransformer


repomgr = RepositoryManager(repostext="""
[
    { name: foo, desc: foo, family: foo, sources: [] },
    { name: bar, desc: bar, family: bar, sources: [] },
    { name: baz, desc: baz, family: baz, sources: [] }
]
""")


class TestPackageTransformer(unittest.TestCase):
    def check_transformer(self, rulestext: str, *packages: Dict[str, Any]) -> None:
        transformer = PackageTransformer(repomgr, rulestext=rulestext)
        for packagedict in packages:
            create_params = {}
            expected_params = {}
            for field, value in packagedict.items():
                if field.startswith('expect_'):
                    expected_params[field[7:]] = value
                else:
Beispiel #10
0
 def get_repo_manager(self) -> RepositoryManager:
     return RepositoryManager(self.get_repos_config())
Beispiel #11
0
# along with repology.  If not, see <http://www.gnu.org/licenses/>.

from collections import defaultdict

from repology.repomgr import RepositoryManager
from repology.transformer import PackageTransformer
from repology.transformer.ruleset import Ruleset
from repology.yamlloader import YamlConfig

from ..package import PackageSample


_repomgr = RepositoryManager(YamlConfig.from_text("""
[
    { name: dummyrepo, desc: dummyrepo, family: dummyrepo, sources: [] },
    { name: foo, desc: foo, family: foo, sources: [] },
    { name: bar, desc: bar, family: bar, sources: [] },
    { name: baz, desc: baz, family: baz, sources: [] }
]
"""))


def check_transformer(rulestext: str, *samples: PackageSample) -> None:
    __tracebackhide__ = True

    ruleset = Ruleset(YamlConfig.from_text(rulestext))

    sample_by_repo = defaultdict(list)

    for sample in samples:
        sample_by_repo[sample.package.repo].append(sample)