def test_with_no_units(self): """ Call with no units, which shouldn't return any dependencies. """ units = [] dependent_rpms = depsolve.find_dependent_rpms(units, self._get_units) expected_rpms = set([]) self.assertEqual(dependent_rpms, expected_rpms)
def test_with_no_dependencies(self): """ Call with glib2, which doesn't list any dependencies. """ units = [self.unit_5] dependent_rpms = depsolve.find_dependent_rpms(units, self._get_units) # The glib2 unit doesn't list any dependencies expected_rpms = set([]) self.assertEqual(dependent_rpms, expected_rpms)
def test_one_unit_with_dependencies(self): """ Call find_dependent_rpms with the Firefox unit. It should return a dependency on xulrunner. """ units = [self.unit_1] dependent_rpms = depsolve.find_dependent_rpms(units, self._get_units) # Firefox only depends directly on xulrunner expected_rpms = set([self.rpm_2.as_named_tuple]) self.assertEqual(dependent_rpms, expected_rpms)
def test_two_units_with_dependencies(self): """ Call find_dependent_rpms() with firefox and gnome-calcualtor. It should return xulrunner and glib2. """ units = [self.unit_1, self.unit_4] dependent_rpms = depsolve.find_dependent_rpms(units, self._get_units) # Firefox only depends directly on xulrunner, and gnome-calculator needs glib2 expected_rpms = set([self.rpm_2.as_named_tuple, self.rpm_5.as_named_tuple]) self.assertEqual(dependent_rpms, expected_rpms)
def copy_rpms(units, import_conduit, copy_deps): """ Copy RPMs from the source repo to the destination repo, and optionally copy dependencies as well. Dependencies are resolved recursively. :param units: iterable of Units :type units: iterable of pulp.plugins.models.Unit :param import_conduit: import conduit passed to the Importer :type import_conduit: pulp.plugins.conduits.unit_import.ImportUnitConduit :param copy_deps: if True, copies dependencies as specified in "Requires" lines in the RPM metadata. Matches against NEVRAs and Provides declarations that are found in the source repository. Silently skips any dependencies that cannot be resolved within the source repo. :return: set of pulp.plugins.models.Unit that were copied :rtype: set """ unit_set = set() for unit in units: import_conduit.associate_unit(unit) unit_set.add(unit) if copy_deps and unit_set: deps = depsolve.find_dependent_rpms(unit_set, import_conduit.get_source_units) # only consider deps that exist in the source repo available_deps = set(filter_available_rpms(deps, import_conduit)) # remove rpms already in the destination repo existing_units = set(existing.get_existing_units([dep.unit_key for dep in available_deps], models.RPM.UNIT_KEY_NAMES, models.RPM.TYPE, import_conduit.get_destination_units)) to_copy = available_deps - existing_units _LOGGER.debug('Copying deps: %s' % str(sorted([x.unit_key['name'] for x in to_copy]))) if to_copy: unit_set |= copy_rpms(to_copy, import_conduit, copy_deps) return unit_set