db: allow more than one --repository arg

cute-signatures
Natanael Copa 2009-02-17 12:23:01 +00:00
parent 6e55a18269
commit ca51ec3238
3 changed files with 29 additions and 6 deletions

View File

@ -22,7 +22,7 @@
#include "apk_applet.h" #include "apk_applet.h"
const char *apk_root; const char *apk_root;
const char *apk_repository = NULL; struct apk_repository_url apk_repository_list;
int apk_verbosity = 1, apk_progress = 0, apk_upgrade = 0; int apk_verbosity = 1, apk_progress = 0, apk_upgrade = 0;
int apk_cwd_fd; int apk_cwd_fd;
@ -99,6 +99,17 @@ static struct apk_applet *deduce_applet(int argc, char **argv)
return NULL; return NULL;
} }
static struct apk_repository_url *apk_repository_new(const char *url)
{
struct apk_repository_url *r = calloc(1,
sizeof(struct apk_repository_url));
if (r) {
r->url = url;
list_init(&r->list);
}
return r;
}
#define NUM_GENERIC_OPTS 6 #define NUM_GENERIC_OPTS 6
static struct option generic_options[32] = { static struct option generic_options[32] = {
{ "root", required_argument, NULL, 'p' }, { "root", required_argument, NULL, 'p' },
@ -116,10 +127,12 @@ int main(int argc, char **argv)
struct option *opt; struct option *opt;
int r, optindex; int r, optindex;
void *ctx = NULL; void *ctx = NULL;
struct apk_repository_url *repo = NULL;
umask(0); umask(0);
apk_cwd_fd = open(".", O_RDONLY); apk_cwd_fd = open(".", O_RDONLY);
apk_root = getenv("ROOT"); apk_root = getenv("ROOT");
list_init(&apk_repository_list.list);
applet = deduce_applet(argc, argv); applet = deduce_applet(argc, argv);
if (applet != NULL) { if (applet != NULL) {
@ -151,7 +164,9 @@ int main(int argc, char **argv)
apk_root = optarg; apk_root = optarg;
break; break;
case 'X': case 'X':
apk_repository = optarg; repo = apk_repository_new(optarg);
if (repo)
list_add(&repo->list, &apk_repository_list.list);
break; break;
case 'q': case 'q':
apk_verbosity--; apk_verbosity--;

View File

@ -13,9 +13,16 @@
#define APK_APPLET_H #define APK_APPLET_H
#include <getopt.h> #include <getopt.h>
#include "apk_defines.h"
extern const char *apk_root; extern const char *apk_root;
extern const char *apk_repository;
struct apk_repository_url {
struct list_head list;
const char *url;
};
extern struct apk_repository_url apk_repository_list;
struct apk_applet { struct apk_applet {
const char *name; const char *name;

View File

@ -621,6 +621,7 @@ int apk_db_open(struct apk_database *db, const char *root, unsigned int flags)
apk_blob_t blob; apk_blob_t blob;
const char *apk_repos = getenv("APK_REPOS"), *msg; const char *apk_repos = getenv("APK_REPOS"), *msg;
int r; int r;
struct apk_repository_url *repo = NULL;
memset(db, 0, sizeof(*db)); memset(db, 0, sizeof(*db));
apk_hash_init(&db->available.names, &pkg_name_hash_ops, 1000); apk_hash_init(&db->available.names, &pkg_name_hash_ops, 1000);
@ -696,10 +697,10 @@ int apk_db_open(struct apk_database *db, const char *root, unsigned int flags)
} }
} }
if (apk_repository != NULL) { list_for_each_entry(repo, &apk_repository_list.list, list) {
r = apk_db_add_repository(db, APK_BLOB_STR(apk_repository)); r = apk_db_add_repository(db, APK_BLOB_STR(repo->url));
if (r != 0) { if (r != 0) {
msg = "Unable to load repositories"; msg = repo->url;
goto ret_r; goto ret_r;
} }
} }