From 37eed319e5f28e8ed00736efd7d3a55275982776 Mon Sep 17 00:00:00 2001 From: Craig Tracey Date: Wed, 14 Oct 2015 21:01:50 -0400 Subject: [PATCH] Install pip dependencies iteratively Installing pip dependencies interatively (vs. concurrently) provides for interesting manifest syntax. For example, one could specify an index-url along side a dependency without affecting the other dependencies in the list. --- giftwrap/builders/__init__.py | 23 ++++++++++------------- giftwrap/builders/docker_builder.py | 8 ++------ giftwrap/builders/package_builder.py | 8 ++------ 3 files changed, 14 insertions(+), 25 deletions(-) diff --git a/giftwrap/builders/__init__.py b/giftwrap/builders/__init__.py index 617cd79..4e68195 100644 --- a/giftwrap/builders/__init__.py +++ b/giftwrap/builders/__init__.py @@ -39,11 +39,11 @@ class Builder(object): def _get_gerrit_dependencies(self, repo, project): try: review = GerritReview(repo.head.change_id, project.git_path) - return review.build_pip_dependencies(string=True) + return review.build_pip_dependencies() except Exception as e: LOG.warning("Could not install gerrit dependencies!!! " "Error was: %s", e) - return "" + return [] def _build_project(self, project): self._prepare_project_build(project) @@ -57,15 +57,15 @@ class Builder(object): # create and build the virtualenv self._create_virtualenv(project.venv_command, project.install_path) - dependencies = "" + dependencies = [] if project.pip_dependencies: - dependencies = " ".join(project.pip_dependencies) + dependencies = project.pip_dependencies if self._spec.settings.gerrit_dependencies: - dependencies = "%s %s" % (dependencies, - self._get_gerrit_dependencies(repo, - project)) + dependencies += self._get_gerrit_dependencies(repo, project) + if len(dependencies): - self._install_pip_dependencies(project.install_path, dependencies) + self._install_pip_dependencies(project.install_path, + dependencies) if self._spec.settings.include_config: self._copy_sample_config(src_clone_dir, project) @@ -73,7 +73,8 @@ class Builder(object): self._install_project(project.install_path, src_clone_dir) if project.postinstall_dependencies: - self._install_postinstall_dependencies(project) + dependencies = project.postinstall_dependencies + self._install_pip_dependencies(project, dependencies) # finish up self._finalize_project_build(project) @@ -147,10 +148,6 @@ class Builder(object): def _install_project(self, venv_path, src_clone_dir): return - @abstractmethod - def _install_postinstall_dependencies(self, project): - return - @abstractmethod def _finalize_project_build(self, project): return diff --git a/giftwrap/builders/docker_builder.py b/giftwrap/builders/docker_builder.py index 8ea99f3..c8e0d83 100644 --- a/giftwrap/builders/docker_builder.py +++ b/giftwrap/builders/docker_builder.py @@ -84,7 +84,8 @@ class DockerBuilder(Builder): def _install_pip_dependencies(self, venv_path, dependencies): pip_path = self._get_venv_pip_path(venv_path) - self._execute("%s install %s" % (pip_path, dependencies)) + for dependency in dependencies: + self._execute("%s install %s" % (pip_path, dependency)) def _copy_sample_config(self, src_clone_dir, project): src_config = os.path.join(src_clone_dir, 'etc') @@ -97,11 +98,6 @@ class DockerBuilder(Builder): pip_path = self._get_venv_pip_path(venv_path) self._execute("%s install %s" % (pip_path, src_clone_dir)) - def _install_postinstall_dependencies(self, project): - pip_path = self._get_venv_pip_path(project.install_path) - dependencies = " ".join(project.postinstall_dependencies) - self._execute("%s install %s" % (pip_path, dependencies)) - def _finalize_project_build(self, project): self._commands.append("rm -rf %s" % self._temp_dir) for command in self._commands: diff --git a/giftwrap/builders/package_builder.py b/giftwrap/builders/package_builder.py index fb49fa8..3b5ff79 100644 --- a/giftwrap/builders/package_builder.py +++ b/giftwrap/builders/package_builder.py @@ -70,7 +70,8 @@ class PackageBuilder(Builder): def _install_pip_dependencies(self, venv_path, dependencies): pip_path = self._get_venv_pip_path(venv_path) - self._execute("%s install %s" % (pip_path, dependencies)) + for dependency in dependencies: + self._execute("%s install %s" % (pip_path, dependency)) def _copy_sample_config(self, src_clone_dir, project): src_config = os.path.join(src_clone_dir, 'etc') @@ -88,11 +89,6 @@ class PackageBuilder(Builder): pip_path = self._get_venv_pip_path(venv_path) self._execute("%s install %s" % (pip_path, src_clone_dir)) - def _install_postinstall_dependencies(self, project): - pip_path = self._get_venv_pip_path(project.install_path) - dependencies = " ".join(project.postinstall_dependencies) - self._execute("%s install %s" % (pip_path, dependencies)) - def _finalize_project_build(self, project): # build the package pkg = Package(project.package_name, project.version,