Fix how we weren't looking at installed packages.

Change-Id: Ia6590e7353841acc5b514ba62605a99fc10e7f7d
This commit is contained in:
Joshua Harlow 2013-08-04 20:38:01 -07:00
parent 481770e4d1
commit 3bd140827f
3 changed files with 31 additions and 26 deletions

View File

@ -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

View File

@ -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,

View File

@ -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):