From cb164c3130f15b22dbf16991c28ba609cd2f79de Mon Sep 17 00:00:00 2001 From: Chantry Xavier Date: Thu, 21 Jun 2007 12:46:37 +0200 Subject: 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 Signed-off-by: Dan McGee --- lib/libalpm/conflict.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) (limited to 'lib/libalpm') 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); -- cgit v1.2.3-24-g4f1b