Commit 5ea81ca5 authored by Timo Teräs's avatar Timo Teräs
Browse files

add: add support to install packages not in a repository

parent 545a915f
......@@ -22,14 +22,32 @@ static int add_main(int argc, char **argv)
return -1;
for (i = 0; i < argc; i++) {
struct apk_dependency dep = {
.name = apk_db_get_name(&db, APK_BLOB_STR(argv[i])),
};
struct apk_dependency dep;
if (strstr(argv[i], ".apk") != NULL) {
struct apk_package *pkg;
pkg = apk_db_pkg_add_file(&db, argv[i]);
if (pkg == NULL) {
apk_error("Unable to read '%s'", argv[i]);
goto err;
}
dep = (struct apk_dependency) {
.name = pkg->name,
.version_mask = APK_VERSION_RESULT_MASK(APK_VERSION_EQUAL),
.version = pkg->version,
};
} else {
dep = (struct apk_dependency) {
.name = apk_db_get_name(&db, APK_BLOB_STR(argv[i])),
};
}
apk_deps_add(&db.world, &dep);
}
apk_db_recalculate_and_commit(&db);
err:
apk_db_close(&db);
return 0;
}
......
......@@ -93,7 +93,7 @@ int apk_db_create(const char *root);
int apk_db_open(struct apk_database *db, const char *root);
void apk_db_close(struct apk_database *db);
int apk_db_pkg_add_file(struct apk_database *db, const char *file);
struct apk_package *apk_db_pkg_add_file(struct apk_database *db, const char *file);
struct apk_package *apk_db_get_pkg(struct apk_database *db, csum_t sum);
void apk_db_index_write(struct apk_database *db, int fd);
......
......@@ -55,6 +55,7 @@ struct apk_package {
char *url, *description, *license;
struct apk_dependency_array *depends;
unsigned int installed_size, size;
char *filename;
/* for installed packages only */
struct list_head installed_pkgs_list;
......
......@@ -627,16 +627,14 @@ struct apk_package *apk_db_get_pkg(struct apk_database *db, csum_t sum)
APK_BLOB_PTR_LEN((void*) sum, sizeof(csum_t)));
}
int apk_db_pkg_add_file(struct apk_database *db, const char *file)
struct apk_package *apk_db_pkg_add_file(struct apk_database *db, const char *file)
{
struct apk_package *info;
info = apk_pkg_read(db, file);
if (info == NULL)
return FALSE;
apk_db_pkg_add(db, info);
return TRUE;
if (info != NULL)
apk_db_pkg_add(db, info);
return info;
}
static int write_index_entry(apk_hash_item item, void *ctx)
......@@ -864,11 +862,15 @@ int apk_db_install_pkg(struct apk_database *db,
}
/* Install the new stuff */
snprintf(file, sizeof(file),
"%s/%s-%s.apk",
db->repos[0].url, newpkg->name->name, newpkg->version);
if (newpkg->filename == NULL) {
snprintf(file, sizeof(file),
"%s/%s-%s.apk",
db->repos[0].url, newpkg->name->name, newpkg->version);
fd = open(file, O_RDONLY);
} else
fd = open(newpkg->filename, O_RDONLY);
fd = open(file, O_RDONLY);
if (fd < 0) {
apk_error("%s: %s", file, strerror(errno));
return errno;
......
......@@ -373,6 +373,7 @@ struct apk_package *apk_pkg_read(struct apk_database *db, const char *file)
};
apk_deps_add(&ctx.pkg->depends, &dep);
}
ctx.pkg->filename = strdup(file);
return ctx.pkg;
err:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment