Ejemplo n.º 1
0
    def _get_packages(self, repositories, requirements):
        if requirements:
            forest = objects.PackagesForest()
            package_relations = []
            load_package_relations(
                requirements.get('packages'), package_relations.append
            )
            packages_traverse = get_packages_traverse(
                requirements.get('repositories'), package_relations.append
            )
            for repo in repositories:
                tree = forest.add_tree(repo.priority)
                self.controller.load_packages(
                    repo,
                    compose(
                        tree.add,
                        packages_traverse
                    )
                )
                mandatory = requirements.get('mandatory')
                if mandatory:
                    for package in tree.mandatory_packages:
                        package_relations.append(
                            PackageRelation.from_args(
                                (package.name,
                                 _MANDATORY[requirements['mandatory']],
                                 package.version)))

            return forest.get_packages(package_relations)

        packages = set()
        self._load_packages(repositories, packages.add)
        return packages
Ejemplo n.º 2
0
    def test_get_packages_traverse(self):
        data = [{"name": "r1", "excludes": [{"name": "p1"}]}]
        repo = generator.gen_repository(name="r1")
        repo2 = generator.gen_repository(name="r2")
        packages = [
            generator.gen_package(name="p1", version=1, repository=repo),
            generator.gen_package(name="p2", version=2, repository=repo),
            generator.gen_package(name="p3", version=2, repository=repo2),
            generator.gen_package(name="p4", version=2, repository=repo2),
        ]
        actual = []
        traverse = loaders.get_packages_traverse(data, lambda x: actual.append(str(x)))
        for p in packages:
            traverse(p)

        expected = [str(generator.gen_relation("p2", ["=", "2"]))]
        self.assertItemsEqual(expected, actual)
Ejemplo n.º 3
0
    def test_get_packages_traverse(self):
        data = [{'name': 'r1', 'excludes': [{'name': 'p1'}]}]
        repo = generator.gen_repository(name='r1')
        repo2 = generator.gen_repository(name='r2')
        packages = [
            generator.gen_package(name='p1', version=1, repository=repo),
            generator.gen_package(name='p2', version=2, repository=repo),
            generator.gen_package(name='p3', version=2, repository=repo2),
            generator.gen_package(name='p4', version=2, repository=repo2)
        ]
        actual = []
        traverse = loaders.get_packages_traverse(
            data, lambda x: actual.append(str(x)))
        for p in packages:
            traverse(p)

        expected = [str(generator.gen_relation('p2', ['=', '2']))]
        self.assertItemsEqual(expected, actual)