diff options
author | Timo Teras <timo.teras@iki.fi> | 2009-06-25 10:31:05 +0300 |
---|---|---|
committer | Timo Teras <timo.teras@iki.fi> | 2009-06-25 10:31:05 +0300 |
commit | 4d04bd8a463262059d83f126e604914898de81e9 (patch) | |
tree | 30eb009721f6b40b58558bd12b211deb8425ed3f | |
parent | 5eab547de6f695bee4de4c0095dd8d058c27f32b (diff) | |
download | apk-tools-4d04bd8a463262059d83f126e604914898de81e9.tar.bz2 apk-tools-4d04bd8a463262059d83f126e604914898de81e9.tar.xz |
upgrade: new applet
Currently just goes through all world dependencies and updates them
where possible (ref #51).
-rw-r--r-- | src/Makefile | 2 | ||||
-rw-r--r-- | src/upgrade.c | 55 |
2 files changed, 56 insertions, 1 deletions
diff --git a/src/Makefile b/src/Makefile index b2737d2..fe962e7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,7 +2,7 @@ progs-y += apk apk-objs := state.o database.o package.o archive.o \ version.o io.o url.o gunzip.o blob.o \ hash.o md5.o apk.o \ - add.o del.o update.o info.o search.o \ + add.o del.o update.o info.o search.o upgrade.o \ ver.o index.o fetch.o audit.o CFLAGS_apk.o := -DAPK_VERSION=\"$(FULL_VERSION)\" diff --git a/src/upgrade.c b/src/upgrade.c new file mode 100644 index 0000000..81a6d45 --- /dev/null +++ b/src/upgrade.c @@ -0,0 +1,55 @@ +/* upgrade.c - Alpine Package Keeper (APK) + * + * Copyright (C) 2005-2008 Natanael Copa <n@tanael.org> + * Copyright (C) 2008 Timo Teräs <timo.teras@iki.fi> + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. See http://www.gnu.org/ for details. + */ + +#include <errno.h> +#include <stdio.h> +#include <zlib.h> +#include "apk_applet.h" +#include "apk_database.h" +#include "apk_state.h" + +static int upgrade_main(void *ctx, int argc, char **argv) +{ + struct apk_database db; + struct apk_state *state = NULL; + int i, r; + + apk_flags |= APK_UPGRADE; + + r = apk_db_open(&db, apk_root, APK_OPENF_WRITE); + if (r != 0) + return r; + + state = apk_state_new(&db); + for (i = 0; i < db.world->num; i++) { + r = apk_state_lock_dependency(state, &db.world->item[i]); + if (r != 0) { + apk_error("Unable to upgrade '%s'", + db.world->item[i].name->name); + goto err; + } + } + r = apk_state_commit(state, &db); +err: + if (state != NULL) + apk_state_unref(state); + apk_db_close(&db); + return r; +} + +static struct apk_applet apk_upgrade = { + .name = "upgrade", + .usage = "", + .main = upgrade_main, +}; + +APK_DEFINE_APPLET(apk_upgrade); + |