From 718ef3079ea18fcb588264d26e3316628ad18ba0 Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Wed, 22 Jul 2009 20:47:21 +0300 Subject: add: fixes to installing non-repository package make sure cache is enabled on non-permanent rootfs setups. some optimizations and fixes too. --- src/add.c | 16 +++++++++++++--- src/apk_database.h | 1 + src/database.c | 11 +++++++++++ src/package.c | 4 ++-- 4 files changed, 27 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/add.c b/src/add.c index 4dd93e9..0b402fe 100644 --- a/src/add.c +++ b/src/add.c @@ -116,17 +116,27 @@ static int add_main(void *ctx, int argc, char **argv) struct apk_dependency dep; if (strstr(argv[i], ".apk") != NULL) { - struct apk_package *pkg; + struct apk_package *pkg = NULL; struct apk_sign_ctx sctx; - apk_sign_ctx_init(&sctx, APK_SIGN_VERIFY, NULL); + if (!apk_db_cache_active(&db) && + !apk_db_permanent(&db) && + !(apk_flags & APK_FORCE)) { + apk_error("Use --force or enable package " + "caching to install non-repository " + "packages."); + goto err; + } + + /* FIXME: should verify the package too */ + apk_sign_ctx_init(&sctx, APK_SIGN_GENERATE, NULL); r = apk_pkg_read(&db, argv[i], &sctx, &pkg); apk_sign_ctx_free(&sctx); if (r != 0) { apk_error("%s: %s", argv[i], apk_error_str(r)); goto err; - } + } apk_dep_from_pkg(&dep, &db, pkg); } else { r = apk_dep_from_blob(&dep, &db, APK_BLOB_STR(argv[i])); diff --git a/src/apk_database.h b/src/apk_database.h index 0edf4f2..46e6152 100644 --- a/src/apk_database.h +++ b/src/apk_database.h @@ -134,6 +134,7 @@ int apk_db_open(struct apk_database *db, const char *root, unsigned int flags); int apk_db_write_config(struct apk_database *db); void apk_db_close(struct apk_database *db); int apk_db_cache_active(struct apk_database *db); +int apk_db_permanent(struct apk_database *db); struct apk_package *apk_db_pkg_add(struct apk_database *db, struct apk_package *pkg); struct apk_package *apk_db_get_pkg(struct apk_database *db, struct apk_checksum *csum); diff --git a/src/database.c b/src/database.c index b27df99..e171ca9 100644 --- a/src/database.c +++ b/src/database.c @@ -941,6 +941,17 @@ int apk_db_cache_active(struct apk_database *db) return db->cache_dir != apk_static_cache_dir; } +int apk_db_permanent(struct apk_database *db) +{ + struct stat st; + + if (fstat(db->root_fd, &st) != 0) + return 0; + if (major(st.st_dev) == 0) + return 0; + return 1; +} + struct apk_package *apk_db_get_pkg(struct apk_database *db, struct apk_checksum *csum) { diff --git a/src/package.c b/src/package.c index 4f6262e..0ef1d59 100644 --- a/src/package.c +++ b/src/package.c @@ -181,7 +181,7 @@ void apk_dep_from_pkg(struct apk_dependency *dep, struct apk_database *db, struct apk_package *pkg) { *dep = (struct apk_dependency) { - .name = apk_db_get_name(db, APK_BLOB_STR(pkg->name->name)), + .name = pkg->name, .version = pkg->version, .result_mask = APK_VERSION_EQUAL, }; @@ -735,7 +735,7 @@ int apk_pkg_read(struct apk_database *db, const char *file, ctx.pkg = apk_db_pkg_add(db, ctx.pkg); if (pkg != NULL) *pkg = ctx.pkg; - r = 0; + return 0; err: apk_pkg_free(ctx.pkg); return r; -- cgit v1.2.3-70-g09d2