From aeb013397497c8334905d33da5c50dea706621a8 Mon Sep 17 00:00:00 2001 From: Aurelien Foret Date: Sat, 14 Jan 2006 08:14:55 +0000 Subject: sysupgrade: skip version cmp for pkg elected for removal (patch from VMiklos ) --- lib/libalpm/sync.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 8617d04f..8cbba3b8 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -198,6 +198,7 @@ int sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, PMList *dbs_sync) /* match installed packages with the sync dbs and compare versions */ for(i = db_get_pkgcache(db_local); i; i = i->next) { int cmp; + int replace = 0; pmpkg_t *local = i->data; pmpkg_t *spkg = NULL; pmsyncpkg_t *sync; @@ -211,7 +212,24 @@ int sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, PMList *dbs_sync) } } if(spkg == NULL) { - /*_alpm_log(PM_LOG_ERROR, "%s: not found in sync db -- skipping.", local->name);*/ + _alpm_log(PM_LOG_DEBUG, "%s: not found in sync db -- skipping.", local->name); + continue; + } + + /* we don't care about a to-be-replaced package's newer version */ + for(j = trans->packages; j && !replace; j = j->next) { + sync = j->data; + if(sync->type == PM_SYNC_TYPE_REPLACE) { + for(k = sync->data; k && !replace; k = k->next) { + if(!strcmp(((pmpkg_t *)k->data)->name, spkg->name)) { + replace = 1; + } + } + } + } + if(replace) { + _alpm_log(PM_LOG_DEBUG, "%s is already elected for removal -- skipping", + local->name); continue; } -- cgit v1.2.3-70-g09d2