summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChantry Xavier <shiningxc@gmail.com>2007-06-21 12:46:37 +0200
committerDan McGee <dan@archlinux.org>2007-07-11 00:48:03 -0400
commitcb164c3130f15b22dbf16991c28ba609cd2f79de (patch)
treed0330471ebe8e8719bb4d40605e08ff355bbcf62
parent37736a56f9c5e4819a8f132a51bc0784c4b288ec (diff)
downloadpacman-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>
-rw-r--r--lib/libalpm/conflict.c24
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);