[Yum-devel] [PATCH 3/3] Create list of pkgtups we couldn't find, and output them in listTrans.
seth vidal
skvidal at fedoraproject.org
Thu Jun 2 17:04:33 UTC 2011
On Thu, 2011-06-02 at 12:56 -0400, James Antill wrote:
> ---
> output.py | 4 +++-
> yum/__init__.py | 33 +++++++++++++++++++++++++++++++--
> yum/packages.py | 39 +++++++++++++++++++++++++++++++++++++++
> 3 files changed, 73 insertions(+), 3 deletions(-)
>
> diff --git a/output.py b/output.py
> index 71e4e24..398dafa 100755
> --- a/output.py
> +++ b/output.py
> @@ -1048,7 +1048,9 @@ class YumOutput:
> pkglist_lines.append((action, lines))
>
> for (action, pkglist) in [(_('Skipped (dependency problems)'),
> - self.skipped_packages),]:
> + self.skipped_packages),
> + (_('Not installed'), self._not_found_i.values()),
> + (_('Not available'), self._not_found_a.values())]:
> lines = []
> for po in pkglist:
> a_wid = _add_line(lines, data, a_wid, po)
> diff --git a/yum/__init__.py b/yum/__init__.py
> index 209c5c6..77c4d00 100644
> --- a/yum/__init__.py
> +++ b/yum/__init__.py
> @@ -79,7 +79,7 @@ warnings.simplefilter("ignore", Errors.YumFutureDeprecationWarning)
>
> from packages import parsePackages, comparePoEVR
> from packages import YumAvailablePackage, YumLocalPackage, YumInstalledPackage
> -from packages import YumUrlPackage
> +from packages import YumUrlPackage, YumNotFoundPackage
> from constants import *
> from yum.rpmtrans import RPMTransaction,SimpleCliCallBack
> from yum.i18n import to_unicode, to_str
> @@ -182,6 +182,8 @@ class YumBase(depsolve.Depsolve):
> self._tags = None
> self._ts_save_file = None
> self.skipped_packages = [] # packages skip by the skip-broken code
> + self._not_found_a = {}
> + self._not_found_i = {}
> self.logger = logging.getLogger("yum.YumBase")
> self.verbose_logger = logging.getLogger("yum.verbose.YumBase")
> self._override_sigchecks = False
> @@ -1225,6 +1227,27 @@ class YumBase(depsolve.Depsolve):
> return 1, orig_restring
> return rescode, restring
>
> + def _add_not_found(self, pkgs, nevra_dict):
> + if pkgs:
> + return None
> +
> + pkgtup = (nevra_dict['name'], nevra_dict['arch'],
> + nevra_dict['epoch'], nevra_dict['version'],
> + nevra_dict['release'])
> + if None in pkgtup:
> + return None
> + return pkgtup
> + def _add_not_found_a(self, pkgs, nevra_dict):
> + pkgtup = self._add_not_found(pkgs, nevra_dict)
> + if pkgtup is None:
> + return
> + self._not_found_a[pkgtup] = YumNotFoundPackage(pkgtup)
> + def _add_not_found_i(self, pkgs, nevra_dict):
> + pkgtup = self._add_not_found(pkgs, nevra_dict)
> + if pkgtup is None:
> + return
> + self._not_found_i[pkgtup] = YumNotFoundPackage(pkgtup)
> +
> def _checkMissingObsoleted(self):
> """
> If multiple packages is obsoleting the same package
> @@ -2973,6 +2996,7 @@ class YumBase(depsolve.Depsolve):
> pkgs = self.pkgSack.searchPkgTuple(pkgtup)
>
> if len(pkgs) == 0:
> + self._add_not_found_a(pkgs, pkgtup)
> if allow_missing: # This can happen due to excludes after .up has
> return None # happened.
> raise Errors.DepError, _('Package tuple %s could not be found in packagesack') % str(pkgtup)
> @@ -2994,6 +3018,7 @@ class YumBase(depsolve.Depsolve):
>
> pkgs = self.rpmdb.searchPkgTuple(pkgtup)
> if len(pkgs) == 0:
> + self._add_not_found_i(pkgs, pkgtup)
> raise Errors.RpmDBError, _('Package tuple %s could not be found in rpmdb') % str(pkgtup)
>
> # Dito. FIXME from getPackageObject() for len() > 1 ... :)
> @@ -3419,6 +3444,7 @@ class YumBase(depsolve.Depsolve):
> pkgs = self.pkgSack.searchNevra(name=nevra_dict['name'],
> epoch=nevra_dict['epoch'], arch=nevra_dict['arch'],
> ver=nevra_dict['version'], rel=nevra_dict['release'])
> + self._add_not_found_a(pkgs, nevra_dict)
>
> if pkgs:
> # if was_pattern or nevra-dict['arch'] is none, take the list
> @@ -3759,6 +3785,7 @@ class YumBase(depsolve.Depsolve):
> availpkgs = self.pkgSack.searchNevra(name=nevra_dict['name'],
> epoch=nevra_dict['epoch'], arch=nevra_dict['arch'],
> ver=nevra_dict['version'], rel=nevra_dict['release'])
> + self._add_not_found_a(availpkgs, nevra_dict)
> if len(availpkgs) > 1:
> availpkgs = self._compare_providers(availpkgs, requiringPo)
> availpkgs = map(lambda x: x[0], availpkgs)
> @@ -3949,7 +3976,7 @@ class YumBase(depsolve.Depsolve):
> pkgs = self.rpmdb.searchNevra(name=nevra_dict['name'],
> epoch=nevra_dict['epoch'], arch=nevra_dict['arch'],
> ver=nevra_dict['version'], rel=nevra_dict['release'])
> -
> + self._add_not_found_i(pkgs, nevra_dict)
> if len(pkgs) == 0:
> if not kwargs.get('silence_warnings', False):
> self.logger.warning(_("No package matched to remove"))
> @@ -4268,6 +4295,8 @@ class YumBase(depsolve.Depsolve):
> arch=nevra_dict['arch'],
> ver=nevra_dict['version'],
> rel=nevra_dict['release'])
> + self._add_not_found_a(apkgs, nevra_dict)
> +
> if not apkgs:
> # Do we still want to return errors here?
> # We don't in the cases below, so I didn't here...
> diff --git a/yum/packages.py b/yum/packages.py
> index 95c50a1..0d16293 100644
> --- a/yum/packages.py
> +++ b/yum/packages.py
> @@ -274,6 +274,15 @@ class PackageObject(object):
> def __str__(self):
> return self.ui_envra
>
> + def printVer(self):
> + """returns a printable version string - including epoch, if it's set"""
> + if self.epoch != '0':
> + ver = '%s:%s-%s' % (self.epoch, self.version, self.release)
> + else:
> + ver = '%s-%s' % (self.version, self.release)
> +
> + return ver
> +
> def verCMP(self, other):
> """ Compare package to another one, only rpm-version ordering. """
> if not other:
> @@ -354,6 +363,36 @@ class PackageObject(object):
> if csumid:
> return (csumtype, csum)
>
> +
> +_not_found_repo = FakeRepository('-')
> +_not_found_repo.cost = 0
> +class YumNotFoundPackage(PackageObject):
> +
> + def __init__(self, pkgtup):
> + self.name = pkgtup[0]
> + self.arch = pkgtup[1]
> + self.epoch = pkgtup[2]
> + self.version = pkgtup[3]
> + self.release = pkgtup[4]
> + self.pkgtup = pkgtup
> +
> + self.size = 0
> + self._checksums = [] # (type, checksum, id(0,1)
> +
> + self.repo = _not_found_repo
> + self.repoid = _not_found_repo.id
> +
> + # Fakeout output.py that it's a real pkg. ...
> + def _ui_from_repo(self):
> + """ This just returns '-' """
> + return self.repoid
> + ui_from_repo = property(fget=lambda self: self._ui_from_repo())
> +
> + def verifyLocalPkg(self):
> + """check the package checksum vs the localPkg
> + return True if pkg is good, False if not"""
> + return False
> +
> # This is the virtual base class of actual packages, it basically requires a
> # repo. even though it doesn't set one up in it's __init__. It also doesn't have
> # PackageObject methods ... so is basically unusable on it's own
What's the goal of this?
-sv
More information about the Yum-devel
mailing list