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 ) --- TODO | 3 --- lib/libalpm/sync.c | 20 +++++++++++++++++++- src/pacman/download.c | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/TODO b/TODO index 8c953f5e..2859895a 100644 --- a/TODO +++ b/TODO @@ -18,9 +18,6 @@ meanings) PACMAN ====== -- implement missing functionnalities (mainly handling of package conflicts -during packages replacement) - - review how things are displayed in the frontend (normal display, verbose mode, which usage for the library log callback, debug levels, ...) 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; } diff --git a/src/pacman/download.c b/src/pacman/download.c index 447021ef..ad19f4d4 100644 --- a/src/pacman/download.c +++ b/src/pacman/download.c @@ -364,7 +364,7 @@ int downloadfiles_forreal(list_t *servers, const char *localpath, filedone = -1; complete = list_add(complete, fn); } else { - if(mtime2) { + if(mtime2) { strncpy(mtime2, fmtime, 15); /* YYYYMMDDHHMMSS (=14b) */ mtime2[14] = '\0'; } -- cgit v1.2.3