summaryrefslogtreecommitdiffstats
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
parent9bf647c82bb496010474d2e49b7002be7da35485 (diff)
downloadpacman-aeb013397497c8334905d33da5c50dea706621a8.tar.xz
sysupgrade: skip version cmp for pkg elected for removal (patch from VMiklos <vmiklos@frugalware.org>)
-rw-r--r--TODO3
-rw-r--r--lib/libalpm/sync.c20
-rw-r--r--src/pacman/download.c2
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';
}