diff options
Diffstat (limited to 'lib/libalpm')
-rw-r--r-- | lib/libalpm/sync.c | 20 |
1 files changed, 19 insertions, 1 deletions
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; } |