diff options
author | Chantry Xavier <shiningxc@gmail.com> | 2007-06-21 12:46:37 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2007-07-11 00:48:03 -0400 |
commit | cb164c3130f15b22dbf16991c28ba609cd2f79de (patch) | |
tree | d0330471ebe8e8719bb4d40605e08ff355bbcf62 /lib | |
parent | 37736a56f9c5e4819a8f132a51bc0784c4b288ec (diff) | |
download | pacman-cb164c3130f15b22dbf16991c28ba609cd2f79de.tar.xz |
conflict.c: start cleaning conflict check functions
The three chk_ functions overlap for packages both in targets and in the
database. This caused the same conflict to be found in both direction
(A conflicts with B, and B conflicts with A).
This patch avoids this duplication. which shouldn't be needed, but other
changes might be required for that to work correctly.
This also has the unexpected side effect to hide the failure of sync022
pactest, for FS #7415. That's maybe not a good thing though..
Note from Dan: sync022 does succeed, but a sync023 pactest added to check
regressions also seems to pass. This may be a valid fix to this 'problem'
sync022 was meant to find.
Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/conflict.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index 8737688b..9ee89859 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -192,28 +192,18 @@ static alpm_list_t *chk_db_vs_targets(alpm_list_t *baddeps, pmpkg_t *pkg, continue; } - /* is this db package in the targets? if so use the - * new package's conflict list to pick up new changes */ - int use_newconflicts = 0; - for(j = targets; j; j = j->next) { - pmpkg_t *targ = j->data; - if(strcmp(alpm_pkg_get_name(targ), dbpkgname) == 0) { - _alpm_log(PM_LOG_DEBUG, "target '%s' is also in target list, using NEW conflicts", - dbpkgname); - conflicts = alpm_pkg_get_conflicts(targ); - use_newconflicts = 1; - break; - } - } - /* if we didn't find newer conflicts, use the original list */ - if(!use_newconflicts) { - conflicts = alpm_pkg_get_conflicts(dbpkg); + if(_alpm_pkg_find(dbpkgname, targets)) { + /* skip targets, already handled by chk_pkg_vs_targets in checkconflicts */ + _alpm_log(PM_LOG_DEBUG, "target '%s' is also in target list, ignoring it", + dbpkgname); + continue; } + conflicts = alpm_pkg_get_conflicts(dbpkg); + for(j = conflicts; j; j = j->next) { const char *conflict = j->data; - miss = does_conflict(pkgname, dbpkgname, pkg, conflict); if(miss && !_alpm_depmiss_isin(miss, baddeps)) { baddeps = alpm_list_add(baddeps, miss); |