From 3bd140827fedb72c8a69a73ab4c1d357662a0e5a Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Sun, 4 Aug 2013 20:38:01 -0700 Subject: [PATCH] Fix how we weren't looking at installed packages. Change-Id: Ia6590e7353841acc5b514ba62605a99fc10e7f7d --- anvil/packaging/helpers/pip_helper.py | 27 +++++++++++++-------------- anvil/packaging/helpers/yum_helper.py | 19 +++++++++++-------- anvil/packaging/yum.py | 11 +++++++---- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/anvil/packaging/helpers/pip_helper.py b/anvil/packaging/helpers/pip_helper.py index 5940c775..077de6eb 100644 --- a/anvil/packaging/helpers/pip_helper.py +++ b/anvil/packaging/helpers/pip_helper.py @@ -14,7 +14,6 @@ # License for the specific language governing permissions and limitations # under the License. -import copy import pkg_resources import re @@ -153,7 +152,7 @@ class Helper(object): self._pip_executable = sh.which_first(['pip-python', 'pip']) self._installed_cache = None - def _list_installed(self): + def _get_installed(self): cmd = [self._pip_executable] + FREEZE_CMD (stdout, _stderr) = sh.execute(cmd) return parse_requirements(stdout, True) @@ -161,21 +160,21 @@ class Helper(object): def uncache(self): self._installed_cache = None - def whats_installed(self): + def list_installed(self): if self._installed_cache is None: - self._installed_cache = self._list_installed() - return copy.copy(self._installed_cache) + self._installed_cache = self._get_installed() + return list(self._installed_cache) def is_installed(self, name): - if self.get_installed(name): + matches = self.find_installed(name) + if len(matches): return True return False - def get_installed(self, name): - whats_there = self.whats_installed() - wanted_package = create_requirement(name) - for whats_installed in whats_there: - if not (wanted_package.key == whats_installed.key): - continue - return whats_installed - return None + def find_installed(self, name): + wanted_pkg = create_requirement(name) + matches = [] + for pkg in self.list_installed(): + if pkg.key == wanted_pkg.key: + matches.append(pkg) + return matches diff --git a/anvil/packaging/helpers/yum_helper.py b/anvil/packaging/helpers/yum_helper.py index b3b75a68..3f1134a4 100644 --- a/anvil/packaging/helpers/yum_helper.py +++ b/anvil/packaging/helpers/yum_helper.py @@ -53,21 +53,24 @@ class Helper(object): tracewriter.package_installed(action['name']) def is_installed(self, name): - if len(self.get_installed(name)): + matches = self.find_installed(name) + if len(matches): return True - else: - return False + return False - def get_available(self): + def find_installed(self, name): + installed = self.list_installed() + return [item for item in installed if item['name'] == name] + + def list_available(self): if self._available is None: self._available = self._yyoom(['list', 'available'], 'list-available') - return self._available + return list(self._available) - def get_installed(self, name): + def list_installed(self): if self._installed is None: self._installed = self._yyoom(['list', 'installed'], 'list-installed') - return [item for item in self._installed - if item['name'] == name] + return list(self._installed) def builddep(self, srpm_path, tracewriter=None): self._trace_installed_packages(tracewriter, diff --git a/anvil/packaging/yum.py b/anvil/packaging/yum.py index 11c78a8f..8c1cca46 100644 --- a/anvil/packaging/yum.py +++ b/anvil/packaging/yum.py @@ -277,9 +277,12 @@ class YumDependencyHandler(base.DependencyHandler): sh.copy(repo_filename, system_repo_filename, tracewriter=self.tracewriter) LOG.info("Copied to %s", system_repo_filename) - def _get_yum_available(self): + def _get_known_yum_packages(self): yum_map = collections.defaultdict(list) - for pkg in self.helper.get_available(): + pkgs = [] + pkgs.extend(self.helper.list_available()) + pkgs.extend(self.helper.list_installed()) + for pkg in pkgs: for provides in pkg['provides']: yum_map[provides[0]].append((pkg['version'], pkg['repo'])) # Note(harlowja): this is done to remove the default lists @@ -296,7 +299,7 @@ class YumDependencyHandler(base.DependencyHandler): return (None, None) def filter_download_requires(self): - yum_map = self._get_yum_available() + yum_map = self._get_known_yum_packages() pip_origins = {} for line in self.pips_to_install: req = pip_helper.extract_requirement(line) @@ -337,7 +340,7 @@ class YumDependencyHandler(base.DependencyHandler): # build or can satisfy by other means no_pips = [pkg_resources.Requirement.parse(name).key for name in self.python_names] - yum_map = self._get_yum_available() + yum_map = self._get_known_yum_packages() pips_keys = set([p.key for p in pips_downloaded]) def _filter_package_files(package_files):