Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
    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))
Beispiel #4
0
    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))
Beispiel #5
0
 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
Beispiel #6
0
 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