diff options
author | Timo Teräs <timo.teras@iki.fi> | 2012-01-12 10:42:27 +0200 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2012-01-12 10:42:27 +0200 |
commit | f1de353b8162b6f41c36c01fd54599d446203a68 (patch) | |
tree | cd1d39497fc8c7f73f308c27be009b59068cd671 | |
parent | 2372692660c80e79f1161f6ea99dd5eeea60a6d4 (diff) | |
download | apk-tools-f1de353b8162b6f41c36c01fd54599d446203a68.tar.gz apk-tools-f1de353b8162b6f41c36c01fd54599d446203a68.tar.bz2 apk-tools-f1de353b8162b6f41c36c01fd54599d446203a68.tar.xz apk-tools-f1de353b8162b6f41c36c01fd54599d446203a68.zip |
db, solver: refuse committing changes if there is missing tags
-rw-r--r-- | src/apk_database.h | 1 | ||||
-rw-r--r-- | src/database.c | 10 | ||||
-rw-r--r-- | src/solver.c | 10 |
3 files changed, 20 insertions, 1 deletions
diff --git a/src/apk_database.h b/src/apk_database.h index 2d3b51f..929f262 100644 --- a/src/apk_database.h +++ b/src/apk_database.h @@ -130,6 +130,7 @@ struct apk_database { unsigned int local_repos; int performing_self_update : 1; int permanent : 1; + int missing_tags : 1; int compat_newfeatures : 1; int compat_notinstallable : 1; diff --git a/src/database.c b/src/database.c index 0c62b4d..dd3f4b5 100644 --- a/src/database.c +++ b/src/database.c @@ -1135,7 +1135,7 @@ int apk_db_open(struct apk_database *db, struct apk_db_options *dbopts) struct apk_bstream *bs; struct statfs stfs; apk_blob_t blob; - int r, fd, rr = 0; + int i, r, fd, rr = 0; memset(db, 0, sizeof(*db)); if (apk_flags & APK_SIMULATE) { @@ -1312,6 +1312,14 @@ int apk_db_open(struct apk_database *db, struct apk_db_options *dbopts) goto ret_r; } + for (i = 0; i < db->num_repo_tags; i++) { + if (!db->repo_tags[i].allowed_repos) { + apk_warning("Repository tag '" BLOB_FMT "' used in world is no longer available", + BLOB_PRINTF(*db->repo_tags[i].name)); + db->missing_tags = 1; + } + } + if (db->compat_newfeatures) { apk_warning("This apk-tools is OLD! Some packages %s.", db->compat_notinstallable ? diff --git a/src/solver.c b/src/solver.c index 965694b..1ebadcc 100644 --- a/src/solver.c +++ b/src/solver.c @@ -1261,6 +1261,11 @@ int apk_solver_commit_changeset(struct apk_database *db, struct apk_change *change; int i, r = 0, size_diff = 0; + if (db->missing_tags && !(apk_flags & APK_FORCE)) { + apk_error("Not committing changes due to missing repository tags. Use --force to override."); + return -1; + } + if (changeset->changes == NULL) goto all_done; @@ -1406,6 +1411,11 @@ int apk_solver_commit(struct apk_database *db, struct apk_package_array *solution = NULL; int r; + if (db->missing_tags && !(apk_flags & APK_FORCE)) { + apk_error("Not committing changes due to missing repository tags. Use --force to override."); + return -1; + } + r = apk_solver_solve(db, solver_flags, world, &solution, &changeset); if (r < 0) |