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().

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)

        - Panu -


_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to