[pacman-dev] [patch] I. deps.c/checkdeps bugfix + upgrade059.py

Nagy Gabor ngaba at petra.hos.u-szeged.hu
Sat Apr 21 11:07:55 EDT 2007


Hi!
I started to work on deps.c. I send smaller patches instead of a big
one. At first I rewrite alpm_*deps functions (implement topological
sort...); I merge them later (which would be the most optimal imho)
after testing.
I found a bug:
---upgrade059.py---
self.description = "Try to upgrade packages which would break a multiple-depend"

lp1 = pmpkg("pkg1")
lp1.depends = ["imaginary"]
self.addpkg2db("local", lp1)

lp2 = pmpkg("pkg2", "1.0-1")
lp2.provides = ["imaginary"]
lp2.requiredby = [ "pkg1" ]
self.addpkg2db("local", lp2)

lp3 = pmpkg("pkg3", "1.0-1")
lp3.provides = ["imaginary"]
lp3.requiredby = [ "pkg1" ]
self.addpkg2db("local", lp3)

p2 = pmpkg("pkg2", "1.0-2")
self.addpkg(p2)

p3 = pmpkg("pkg3", "1.0-2")
self.addpkg(p3)

self.args = "-U %s" % " ".join([p.filename() for p in p2, p3])

self.addrule("PACMAN_RETCODE=1")
self.addrule("PKG_EXIST=pkg1")
self.addrule("PKG_VERSION=pkg2|1.0-1")
self.addrule("PKG_VERSION=pkg3|1.0-1")
-------------------
Here is my patch (WARNING: with large targetlist this may cause notable
slowdown).
-------------------
diff -Naur pacman-lib/lib/libalpm/deps.c pacman-lib.new/lib/libalpm/deps.c
--- pacman-lib/lib/libalpm/deps.c	2007-03-19 05:23:45.000000000 +0100
+++ pacman-lib.new/lib/libalpm/deps.c	2007-04-21 16:42:29.000000000 +0200
@@ -271,8 +271,9 @@
 							for(l = _alpm_db_get_pkgcache(db); l; l = l->next) {
 								pmpkg_t *pkg = l->data;
 
-								if(strcmp(alpm_pkg_get_name(pkg), alpm_pkg_get_name(oldpkg)) == 0) {
-									/* well, we know this one succeeds, but we're removing it... skip it */
+								if(_alpm_pkg_find(alpm_pkg_get_name(pkg), packages)) {
+									/* we ignore packages that will be updated because we know that
+									updated ones don't satisfy depend.*/
 									continue;
 								}
------------------
Bye, ngaba




More information about the pacman-dev mailing list