You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
2.1 KiB
48 lines
2.1 KiB
commit ed2a41fe646a1dcfc4f216f8babf25f93fde40e3 |
|
Author: Michal Domonkos <mdomonko@redhat.com> |
|
Date: Fri Feb 3 18:24:37 2017 +0100 |
|
|
|
Detect installed virtual provide in install(). BZ 1352585 |
|
|
|
Normally, when the user tries to install something that's already |
|
installed, we exit gracefully with 0. However, that's not the case if |
|
what we're looking for is a provide that, despite being installed, is |
|
not available in any of the enabled repos, in which case we error out. |
|
This commit makes sure we exit gracefully in that case too. |
|
|
|
The old code path for "yum install foo" looks like this: |
|
|
|
1) Look for foo in pkgSack |
|
2) If no success, look for a package in pkgSack providing foo |
|
3) If no success, look for foo in rpmdb |
|
4) If no success, error out with "No package foo available." and exit |
|
code 1 |
|
|
|
What we're adding with this commit is the following in between 3 and 4: |
|
|
|
- If no success, look for a package in rpmdb providing foo |
|
|
|
Note that we only search for the provide in pkgSack if the kwarg |
|
'pattern' is set, so let's adhere to this with the newly added rpmdb |
|
search too. |
|
|
|
diff --git a/yum/__init__.py b/yum/__init__.py |
|
index 9780d96..451b2b8 100644 |
|
--- a/yum/__init__.py |
|
+++ b/yum/__init__.py |
|
@@ -4910,8 +4910,14 @@ much more problems). |
|
# Do we still want to return errors here? |
|
# We don't in the cases below, so I didn't here... |
|
if 'pattern' in kwargs: |
|
- pkgs = self.rpmdb.returnPackages(patterns=[kwargs['pattern']], |
|
+ arg = kwargs['pattern'] |
|
+ pkgs = self.rpmdb.returnPackages(patterns=[arg], |
|
ignore_case=False) |
|
+ if not pkgs: |
|
+ self.verbose_logger.debug( |
|
+ _('Checking for installed virtual provide or file-provide for %s'), |
|
+ arg) |
|
+ pkgs = self.returnInstalledPackagesByDep(arg) |
|
if 'name' in kwargs: |
|
pkgs = self.rpmdb.searchNevra(name=kwargs['name']) |
|
if 'pkgtup' in kwargs:
|
|
|