[pacman-dev] [PATCH] Failed database downloads cause transaction to stop

Allan McRae allan at archlinux.org
Sun Feb 21 08:34:59 UTC 2016


Previously, we errored only if all databases failed to download. If any
database downloads fail, we are unable to determine whether an update is
still considered safe. So now if any database download fails, the transaction
is aborted (after attempting all database downloads).

Fixes FS#47599.

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 src/pacman/util.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/src/pacman/util.c b/src/pacman/util.c
index e2c9900..0862de0 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -147,7 +147,7 @@ int check_syncdbs(size_t need_repos, int check_valid)
 int sync_syncdbs(int level, alpm_list_t *syncs)
 {
 	alpm_list_t *i;
-	unsigned int success = 0;
+	unsigned int success = 1;
 
 	for(i = syncs; i; i = alpm_list_next(i)) {
 		alpm_db_t *db = i->data;
@@ -156,21 +156,14 @@ int sync_syncdbs(int level, alpm_list_t *syncs)
 		if(ret < 0) {
 			pm_printf(ALPM_LOG_ERROR, _("failed to update %s (%s)\n"),
 					alpm_db_get_name(db), alpm_strerror(alpm_errno(config->handle)));
+			success = 0;
 		} else if(ret == 1) {
 			printf(_(" %s is up to date\n"), alpm_db_get_name(db));
-			success++;
-		} else {
-			success++;
 		}
 	}
 
-	/* We should always succeed if at least one DB was upgraded - we may possibly
-	 * fail later with unresolved deps, but that should be rare, and would be
-	 * expected
-	 */
 	if(!success) {
-		pm_printf(ALPM_LOG_ERROR, _("failed to synchronize any databases\n"));
-		trans_init_error();
+		pm_printf(ALPM_LOG_ERROR, _("failed to synchronize all databases\n"));
 	}
 	return (success > 0);
 }
-- 
2.7.1


More information about the pacman-dev mailing list