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
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)
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)