add: --upgrade|-u to control if upgrading is preferred or not

cute-signatures
Timo Teras 2009-01-16 13:59:36 +02:00
parent 6354a27888
commit 3e6fc1389f
8 changed files with 17 additions and 21 deletions

View File

@ -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,

View File

@ -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, ...)

View File

@ -53,7 +53,6 @@ struct apk_db_dir_instance {
struct apk_name {
apk_hash_node hash_node;
char *name;
struct apk_package_array *pkgs;
};

View File

@ -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); }

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}