[pacman-dev] [patch] Conflict variables
Hi! After the professional cleanup of conflict.c (by Xavier, thx; anyway, do you want to add conflict checking to db_test?;-) we don't need to restrict conflicts to conflict-name only, we can use the depend syntax. So this patch doesn't change any important thing in the source code, mainly this is a testcase instead. Bye, ngaba
On Thu, Aug 02, 2007 at 09:17:16PM +0200, Nagy Gabor wrote:
Hi! After the professional cleanup of conflict.c (by Xavier, thx; anyway, do you want to add conflict checking to db_test?;-) we don't need to restrict conflicts to conflict-name only, we can use the depend syntax. So this patch doesn't change any important thing in the source code, mainly this is a testcase instead. Bye, ngaba
Indeed, we now get versioned conflicts for free, that's pretty cool :) About adding it to db_test, do you mean just checking that there are no conflicts between the locally installed packages, by calling something like : check_conflict(dblist, dblist, &baddeps, 0);
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index d52f7e1..1baa0c2 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -112,13 +112,6 @@ static void check_conflict(alpm_list_t *list1, alpm_list_t *list2, for(j = alpm_pkg_get_conflicts(pkg1); j; j = j->next) { const char *conflict = j->data;
- if(strcmp(pkg1name, conflict) == 0) { - /* a package cannot conflict with itself -- that's just not nice */ - _alpm_log(PM_LOG_DEBUG, "package '%s' conflicts with itself - packaging error", - pkg1name); - continue; - } - for(k = list2; k; k = k->next) { pmpkg_t *pkg2 = k->data; const char *pkg2name = alpm_pkg_get_name(pkg2); @@ -140,8 +133,7 @@ static void check_conflict(alpm_list_t *list1, alpm_list_t *list2, } }
-/* Returns a alpm_list_t* of pmdepmissing_t pointers. - * conflicts are always name only */ +/* Returns a alpm_list_t* of pmdepmissing_t pointers. */ alpm_list_t *_alpm_checkconflicts(pmdb_t *db, alpm_list_t *packages) { alpm_list_t *baddeps = NULL; diff --git a/pactest/tests/conflict002.py b/pactest/tests/conflict002.py new file mode 100644 index 0000000..2e326f5 --- /dev/null +++ b/pactest/tests/conflict002.py @@ -0,0 +1,13 @@ +self.description = "conflict with version (conflict)" + +p = pmpkg("pkg1") +p.conflicts = ["pkg2<=1.0-2"] +self.addpkg(p); + +lp = pmpkg("pkg2", "1.0-1") +self.addpkg2db("local", lp) + +self.args = "-A %s" % p.filename() +self.addrule("PACMAN_RETCODE=1") +self.addrule("!PKG_EXIST=pkg1") +self.addrule("PKG_EXIST=pkg2") diff --git a/pactest/tests/conflict003.py b/pactest/tests/conflict003.py new file mode 100644 index 0000000..7205086 --- /dev/null +++ b/pactest/tests/conflict003.py @@ -0,0 +1,13 @@ +self.description = "conflict with version (no conflict)" + +p = pmpkg("pkg1") +p.conflicts = ["pkg2=1.0-2"] +self.addpkg(p); + +lp = pmpkg("pkg2", "1.0-1") +self.addpkg2db("local", lp) + +self.args = "-A %s" % p.filename() +self.addrule("PACMAN_RETCODE=0") +self.addrule("PKG_EXIST=pkg1") +self.addrule("PKG_EXIST=pkg2")
That looks nice, applied it in my git tree :)
Have a nice holiday! I won't let you get bored, so I explain my hidden bonus patch: I removed the "foo" package cannot conflict with "foo" from conflict.c Reason: For example "nvidia conflicts with nvidia" means that nvidia package conflicts with all (future) nvidia providers. A package still cannot conflict with itself. Bye, ngaba ---------------------------------------------------- SZTE Egyetemi Könyvtár - http://www.bibl.u-szeged.hu This mail sent through IMP: http://horde.org/imp/
About adding it to db_test, do you mean just checking that there are no conflicts between the locally installed packages, by calling something like :
check_conflict(dblist, dblist, &baddeps, 0);
Exactly. ---------------------------------------------------- SZTE Egyetemi Könyvtár - http://www.bibl.u-szeged.hu This mail sent through IMP: http://horde.org/imp/
participants (3)
-
Nagy Gabor
-
ngaba@bibl.u-szeged.hu
-
Xavier