summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2015-04-07 09:57:42 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2015-04-07 10:49:51 +0200
commit944eae4b27d039608dd72b1d7b3ed015c20bdcc0 (patch)
tree7bf60e2d41308feb8e7b5af73e35eaf464821680
parent7e3f4c3d7996811a37393514d6f0eaacae7178e2 (diff)
downloadapk-tools-944eae4b27d039608dd72b1d7b3ed015c20bdcc0.tar.gz
apk-tools-944eae4b27d039608dd72b1d7b3ed015c20bdcc0.tar.bz2
apk-tools-944eae4b27d039608dd72b1d7b3ed015c20bdcc0.tar.xz
apk-tools-944eae4b27d039608dd72b1d7b3ed015c20bdcc0.zip
update: return failure if any mirror update failed
fixes #4040
-rw-r--r--src/apk_database.h1
-rw-r--r--src/database.c4
-rw-r--r--src/update.c8
3 files changed, 10 insertions, 3 deletions
diff --git a/src/apk_database.h b/src/apk_database.h
index b2fa28e..315a429 100644
--- a/src/apk_database.h
+++ b/src/apk_database.h
@@ -148,6 +148,7 @@ struct apk_database {
char *cache_remount_dir;
apk_blob_t *arch;
unsigned int local_repos, available_repos;
+ int repo_update_errors;
unsigned int pending_triggers;
int performing_self_update : 1;
int permanent : 1;
diff --git a/src/database.c b/src/database.c
index 8619465..0828725 100644
--- a/src/database.c
+++ b/src/database.c
@@ -2017,8 +2017,10 @@ static int apk_repository_update(struct apk_database *db, struct apk_repository
int r, verify = (apk_flags & APK_ALLOW_UNTRUSTED) ? APK_SIGN_NONE : APK_SIGN_VERIFY;
r = apk_cache_download(db, repo, NULL, verify, NULL, NULL);
- if (r != 0)
+ if (r != 0) {
apk_error("%s: %s", repo->url, apk_error_str(r));
+ db->repo_update_errors++;
+ }
return r;
}
diff --git a/src/update.c b/src/update.c
index ed721be..84833ec 100644
--- a/src/update.c
+++ b/src/update.c
@@ -20,6 +20,7 @@ static int update_main(void *ctx, struct apk_database *db, struct apk_string_arr
{
struct apk_repository *repo;
int i;
+ char buf[32] = "OK:";
if (apk_verbosity < 1)
return 0;
@@ -35,10 +36,13 @@ static int update_main(void *ctx, struct apk_database *db, struct apk_string_arr
db->repos[i].url);
}
- apk_message("OK: %d distinct packages available",
+ if (db->repo_update_errors != 0)
+ snprintf(buf, sizeof(buf), "%d errors;",
+ db->repo_update_errors);
+ apk_message("%s %d distinct packages available", buf,
db->available.packages.num_items);
- return 0;
+ return db->repo_update_errors;
}
static struct apk_applet apk_update = {