summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAurelien Foret <aurelien@archlinux.org>2006-01-14 08:14:55 +0000
committerAurelien Foret <aurelien@archlinux.org>2006-01-14 08:14:55 +0000
commitaeb013397497c8334905d33da5c50dea706621a8 (patch)
tree1ee0e95dd854b9d846be7f94e7b5205e785e66ed /lib
parent9bf647c82bb496010474d2e49b7002be7da35485 (diff)
sysupgrade: skip version cmp for pkg elected for removal (patch from VMiklos <vmiklos@frugalware.org>)
Diffstat (limited to 'lib')
-rw-r--r--lib/libalpm/sync.c20
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;
}