def egg_info(self): app_dir = self.get_option("app_dir") pbr_version = self.get_interpolated_option("pbr_version") egg_info = pip_helper.get_directory_details(app_dir, pbr_version=pbr_version) egg_info = egg_info.copy() egg_info["dependencies"] = pip_helper.read_requirement_files(self.requires_files)[1] egg_info["test_dependencies"] = pip_helper.read_requirement_files(self.test_requires_files)[1] return egg_info
def egg_info(self): app_dir = self.get_option('app_dir') pbr_version = self.get_interpolated_option("pbr_version") egg_info = pip_helper.get_directory_details(app_dir, pbr_version=pbr_version) egg_info = egg_info.copy() egg_info['dependencies'] = pip_helper.read_requirement_files( self.requires_files)[1] egg_info['test_dependencies'] = pip_helper.read_requirement_files( self.test_requires_files)[1] return egg_info
def _gather_pips_to_install(self, requires_files, extra_pips=None): """Analyze requires_files and extra_pips. Updates `self.forced_pips` and `self.pips_to_install`. Writes requirements to `self.gathered_requires_filename`. """ ignore_pips = set(self.python_names) ignore_pips.update(self.ignore_pips) forced_pips = set() forced_distro_pips = self.distro.get_dependency_config("forced_pips", quiet=True) if forced_distro_pips: forced_pips.update(forced_distro_pips) compatibles, incompatibles = self.multipip.resolve( extra_pips, requires_files, ignore_pips, forced_pips) self.pips_to_install = compatibles sh.write_file(self.gathered_requires_filename, "\n".join(self.pips_to_install)) pip_requirements, raw_requirements = pip_helper.read_requirement_files( [self.gathered_requires_filename]) pips_to_install = sorted(raw_requirements, cmp=sort_req) utils.log_iterable(pips_to_install, logger=LOG, header="Full known python dependency list") for (name, lines) in incompatibles.items(): LOG.warn("Incompatible requirements found for %s", colorizer.quote(name, quote_color='red')) for line in lines: LOG.warn(line) if not self.pips_to_install: LOG.error("No valid dependencies found. Something went wrong.") raise exc.DependencyException("No valid dependencies found") # Translate those that we altered requirements for into a set of forced # requirements file (and associated list). self.forced_pips = [] forced_pip_keys = [] for req in [ pip_helper.extract_requirement(line) for line in self.pips_to_install ]: if req.key in incompatibles and req.key not in forced_pip_keys: self.forced_pips.append(req) forced_pip_keys.append(req.key) self.forced_pips = sorted(self.forced_pips, cmp=sort_req) forced_pips = [str(req) for req in self.forced_pips] utils.log_iterable(forced_pips, logger=LOG, header="Automatically forced python dependencies") sh.write_file(self.forced_requires_filename, "\n".join(forced_pips))
def _gather_pips_to_install(self, requires_files, extra_pips=None): """Analyze requires_files and extra_pips. Updates `self.forced_pips` and `self.pips_to_install`. Writes requirements to `self.gathered_requires_filename`. """ ignore_pips = set(self.python_names) ignore_pips.update(self.ignore_pips) forced_pips = set() forced_distro_pips = self.distro.get_dependency_config("forced_pips", quiet=True) if forced_distro_pips: forced_pips.update(forced_distro_pips) compatibles, incompatibles = self.multipip.resolve(extra_pips, requires_files, ignore_pips, forced_pips) self.pips_to_install = compatibles sh.write_file(self.gathered_requires_filename, "\n".join(self.pips_to_install)) pip_requirements, raw_requirements = pip_helper.read_requirement_files([self.gathered_requires_filename]) pips_to_install = sorted(raw_requirements, cmp=sort_req) utils.log_iterable(pips_to_install, logger=LOG, header="Full known python dependency list") for (name, lines) in incompatibles.items(): LOG.warn("Incompatible requirements found for %s", colorizer.quote(name, quote_color='red')) for line in lines: LOG.warn(line) if not self.pips_to_install: LOG.error("No valid dependencies found. Something went wrong.") raise exc.DependencyException("No valid dependencies found") # Translate those that we altered requirements for into a set of forced # requirements file (and associated list). self.forced_pips = [] forced_pip_keys = [] for req in [pip_helper.extract_requirement(line) for line in self.pips_to_install]: if req.key in incompatibles and req.key not in forced_pip_keys: self.forced_pips.append(req) forced_pip_keys.append(req.key) self.forced_pips = sorted(self.forced_pips, cmp=sort_req) forced_pips = [str(req) for req in self.forced_pips] utils.log_iterable(forced_pips, logger=LOG, header="Automatically forced python dependencies") sh.write_file(self.forced_requires_filename, "\n".join(forced_pips))
def egg_info(self): egg_info = pip_helper.get_directory_details(self.get_option('app_dir')).copy() egg_info['dependencies'] = pip_helper.read_requirement_files(self.requires_files)[1] egg_info['test_dependencies'] = pip_helper.read_requirement_files(self.test_requires_files)[1] return egg_info
def _fetch_epoch_mapping(self): epoch_map = self.distro.get_dependency_config("epoch_map", quiet=True) if not epoch_map: epoch_map = {} epoch_skips = self.distro.get_dependency_config("epoch_skips", quiet=True) if not epoch_skips: epoch_skips = _DEFAULT_SKIP_EPOCHS if not isinstance(epoch_skips, (list, tuple)): epoch_skips = [i.strip() for i in epoch_skips.split(",")] built_epochs = {} for name in self.python_names: if name in epoch_map: built_epochs[name] = str(epoch_map.pop(name)) else: built_epochs[name] = str(self.OPENSTACK_EPOCH) # Ensure epochs set by a yum searching (that are not in the list of # epochs to provide) are correctly set when building dependent # packages... keep_names = set() try: yum_satisfies = sh.load_file(self.yum_satisfies_filename) except IOError as e: if e.errno != errno.ENOENT: raise else: for line in yum_satisfies.splitlines(): raw_req_rpm = utils.parse_json(line) req = pip_helper.extract_requirement(raw_req_rpm['requirement']) if req.key in epoch_map: LOG.debug("Ensuring manually set epoch is retained for" " requirement '%s' with epoch %s", req, epoch_map[req.key]) keep_names.add(req.key) else: rpm_info = raw_req_rpm['rpm'] rpm_epoch = rpm_info.get('epoch') if rpm_epoch and str(rpm_epoch) not in epoch_skips: LOG.debug("Adding in yum satisfiable package %s for" " requirement '%s' with epoch %s from repo %s", rpm_info['name'], req, rpm_epoch, rpm_info['repo']) keep_names.add(req.key) epoch_map[req.key] = str(rpm_epoch) # Exclude names from the epoch map that we never downloaded in the # first place or that we did not just set automatically (since these # are not useful and should not be set in the first place). try: _pip_reqs, downloaded_reqs = pip_helper.read_requirement_files([self.build_requires_filename]) except IOError as e: if e.errno != errno.ENOENT: raise else: downloaded_names = set([req.key for req in downloaded_reqs]) tmp_epoch_map = {} for (name, epoch) in six.iteritems(epoch_map): name = name.lower() if name in downloaded_names or name in keep_names: tmp_epoch_map[name] = str(epoch) else: LOG.debug("Discarding %s:%s from the epoch mapping since" " it was not part of the downloaded (or automatically" " included) build requirements", name, epoch) epoch_map = tmp_epoch_map epoch_map.update(built_epochs) return epoch_map