Panu Matilainen wrote:
On Thu, 4 Oct 2007, Tim Lauridsen wrote:
Florian Festi wrote:
Hi!
While creating the new test frame work I came across several minor
issues. One problem is the existence of the
RPMDBPackageSack.installed() method. It is currently only supported
by the RPMDBPackageSack class. This doesn't allow to replace the
rpmdb with an inmemory PackageSack. Seth already rejected the idea
of just moving the method to the base class as "installed" doesn't
make any sense for non RpmDB sacks.
As I really dislike inconsistent APIs I'd like to suggest to just
remove the usage of that method from the code. There are just 7
places in yum and one place in yum-utils where it is used and it is
nothing more than a tiny convenience wrapper. In fact it can be
replaced quite easily by .searchNevra() - one of our work horse
methods. The attached patches remove the usage of the method and add
an deprecation warning (feel free to ignore that if we want to keep
the method).
Florian
PS: The patch also fixes a small issue when running without
repositories which simplifies setting up the test cases.
------------------------------------------------------------------------
_______________________________________________
Yum-devel mailing list
> [email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel
RPMDBPackageSack.installed() make the code look better and make it
easier to understand.
self.rpmdb.installed(po)
Look much better then self.rpmdb.searchNevra(po.name, po.epoch,
po.version, po.release, po.arch)
Removing the installed() method is a API breakage and there is other
API users out there (yumex, pirut, pungi, revisor, PackageKit etc)
and api users (like me) hate this kind of breakage :)
from an API users point of view, he/she want to simple and easy to
use API, and in this case 'installed(po)' is much better than
'self.rpmdb.searchNevra(n,e,v,r,a)', there have also been done a lot
of work to replace n,e,v,r,a tuples with po object, this is a step
backwards.
The problem with installed() is just that it's the wrong term for this
- make it exists() and it'll make sense for all the package sack
types. Whether a package is installed or not is just a question
whether it exists in rpmdb or not, if you want to keep API compat just
make rpmdb.installed() a wrapper for exists().
Sound like a good idea, it still keeps the api simple.
Somewhat related, IMO the installed() method belongs to the package,
not sack object. So something like
for pkg in installable:
if self.rpmdb.installed(po=pkg):
# do stuff
would become
for pkg in installable:
if pkg.installed():
# do stuff
..but that's another story, dunno how feasible it'd be within yum
currently (sorry I haven't been paying that much attention lately)
Sound like a great idea, but can be tricky to implement.
a YumInstalledPackage know it is installed, but a YumAvailablePackage
dont know if it is installed, I know it is available in a repo, but it
dont know if it is installed on the system.
Tim
_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel