From 3e6fc1389f1cdd06bf18b8fd6cd741c8b9e3e1f2 Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Fri, 16 Jan 2009 13:59:36 +0200 Subject: [PATCH 1/2] add: --upgrade|-u to control if upgrading is preferred or not --- src/add.c | 12 ++++++++---- src/apk.c | 2 +- src/apk_database.h | 1 - src/apk_defines.h | 2 +- src/apk_package.h | 7 ++----- src/apk_state.h | 5 ++--- src/package.c | 3 --- src/state.c | 6 +++--- 8 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/add.c b/src/add.c index d8cb62a..9101db2 100644 --- a/src/add.c +++ b/src/add.c @@ -14,7 +14,7 @@ #include "apk_applet.h" #include "apk_database.h" -#define FLAG_INITDB 0x001 +#define FLAG_INITDB 0x0001 struct add_ctx { unsigned int flags; @@ -28,6 +28,9 @@ static int add_parse(void *ctx, int optch, int optindex, const char *optarg) case 0x10000: actx->flags |= FLAG_INITDB; break; + case 'u': + apk_upgrade = 1; + break; default: return -1; } @@ -73,8 +76,8 @@ static int add_main(void *ctx, int argc, char **argv) dep = (struct apk_dependency) { .name = pkg->name, - .version_mask = APK_VERSION_RESULT_MASK(APK_VERSION_EQUAL), - .version = pkg->version, + .min_version = pkg->version, + .max_version = pkg->version, }; } else { dep = (struct apk_dependency) { @@ -91,11 +94,12 @@ err: static struct option add_options[] = { { "initdb", no_argument, NULL, 0x10000 }, + { "upgrade", no_argument, NULL, 'u' }, }; static struct apk_applet apk_add = { .name = "add", - .usage = "[--initdb] apkname...", + .usage = "[--initdb] [--upgrade|-u] apkname...", .context_size = sizeof(struct add_ctx), .num_options = ARRAY_SIZE(add_options), .options = add_options, diff --git a/src/apk.c b/src/apk.c index 2233d4b..3e70086 100644 --- a/src/apk.c +++ b/src/apk.c @@ -23,7 +23,7 @@ const char *apk_root; const char *apk_repository = NULL; -int apk_verbosity = 1, apk_progress = 0; +int apk_verbosity = 1, apk_progress = 0, apk_upgrade = 0; int apk_cwd_fd; void apk_log(const char *prefix, const char *format, ...) diff --git a/src/apk_database.h b/src/apk_database.h index 0bbca9a..e2f16fa 100644 --- a/src/apk_database.h +++ b/src/apk_database.h @@ -53,7 +53,6 @@ struct apk_db_dir_instance { struct apk_name { apk_hash_node hash_node; - char *name; struct apk_package_array *pkgs; }; diff --git a/src/apk_defines.h b/src/apk_defines.h index 865ec5f..efae83f 100644 --- a/src/apk_defines.h +++ b/src/apk_defines.h @@ -50,7 +50,7 @@ extern csum_t bad_checksum; #define csum_valid(buf) memcmp(buf, bad_checksum, sizeof(csum_t)) #endif -extern int apk_cwd_fd, apk_verbosity, apk_progress; +extern int apk_cwd_fd, apk_verbosity, apk_progress, apk_upgrade; #define apk_error(args...) apk_log("ERROR: ", args); #define apk_warning(args...) if (apk_verbosity > 0) { apk_log("WARNING: ", args); } diff --git a/src/apk_package.h b/src/apk_package.h index 1978aca..c6eaa1c 100644 --- a/src/apk_package.h +++ b/src/apk_package.h @@ -36,12 +36,9 @@ struct apk_script { }; struct apk_dependency { - unsigned conflict : 1; - unsigned prefer_upgrade : 1; - unsigned version_mask : 3; - struct apk_name *name; - char *version; + char *min_version; + char *max_version; }; APK_ARRAY(apk_dependency_array, struct apk_dependency); diff --git a/src/apk_state.h b/src/apk_state.h index ac51e5b..d89af98 100644 --- a/src/apk_state.h +++ b/src/apk_state.h @@ -15,9 +15,8 @@ #include "apk_database.h" #define APK_STATE_NOT_CONSIDERED 0 -#define APK_STATE_PREFER_UPGRADE 1 -#define APK_STATE_INSTALL 2 -#define APK_STATE_NO_INSTALL 3 +#define APK_STATE_INSTALL 1 +#define APK_STATE_NO_INSTALL 2 struct apk_change { struct list_head change_list; diff --git a/src/package.c b/src/package.c index 59ca93a..d4147ff 100644 --- a/src/package.c +++ b/src/package.c @@ -112,10 +112,7 @@ static int parse_depend(void *ctx, apk_blob_t blob) return -1; *dep = (struct apk_dependency){ - .prefer_upgrade = 0, - .version_mask = 0, .name = name, - .version = NULL, }; return 0; diff --git a/src/state.c b/src/state.c index 3b93fc1..a6aaf7f 100644 --- a/src/state.c +++ b/src/state.c @@ -205,7 +205,7 @@ int apk_state_satisfy_name(struct apk_state *state, struct apk_name *name) { struct apk_package *preferred = NULL, *installed = NULL; - int i, r, upgrading = 1; + int i, r; /* Is something already installed? Or figure out the preferred * package. */ @@ -216,9 +216,9 @@ int apk_state_satisfy_name(struct apk_state *state, if (apk_pkg_get_state(name->pkgs->item[i]) == APK_STATE_INSTALL) { installed = name->pkgs->item[i]; - if (!upgrading) { + if (!apk_upgrade) { preferred = installed; - continue; + break; } } From 6b6c10cdf244d3a307df4c339cde774600d49f49 Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Fri, 16 Jan 2009 14:52:47 +0200 Subject: [PATCH 2/2] db: fix relative --root to work after apk_db_create call This was broke on --initdb addition to add applet since apk_db_create changes the working directory. --- src/database.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/database.c b/src/database.c index 626c0fb..32f224d 100644 --- a/src/database.c +++ b/src/database.c @@ -638,6 +638,7 @@ int apk_db_open(struct apk_database *db, const char *root) list_init(&db->installed.packages); if (root != NULL) { + fchdir(apk_cwd_fd); db->root = strdup(root); db->root_fd = open(root, O_RDONLY); if (db->root_fd < 0) {