summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimo Teras <timo.teras@iki.fi>2009-01-16 13:59:36 +0200
committerTimo Teras <timo.teras@iki.fi>2009-01-16 13:59:36 +0200
commit3e6fc1389f1cdd06bf18b8fd6cd741c8b9e3e1f2 (patch)
treec152bd82b0fbb5e573a944534d670a54a5a3bbc6
parent6354a278883161704c7f8650a3bdde77f163c6ad (diff)
downloadapk-tools-3e6fc1389f1cdd06bf18b8fd6cd741c8b9e3e1f2.tar.bz2
apk-tools-3e6fc1389f1cdd06bf18b8fd6cd741c8b9e3e1f2.tar.xz
add: --upgrade|-u to control if upgrading is preferred or not
-rw-r--r--src/add.c12
-rw-r--r--src/apk.c2
-rw-r--r--src/apk_database.h1
-rw-r--r--src/apk_defines.h2
-rw-r--r--src/apk_package.h7
-rw-r--r--src/apk_state.h5
-rw-r--r--src/package.c3
-rw-r--r--src/state.c6
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;
}
}