Skip to content

Commit 962b2b8

Browse files
committed
Add support for custom registries and repositories, read secrets from
clib_secrets.json misc: Cleanup, add headers.
1 parent cb28132 commit 962b2b8

33 files changed

+1065
-835
lines changed

Makefile

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,22 @@ RM = rm -f
1212
MKDIR = mkdir -p
1313

1414
SRC = $(wildcard src/*.c)
15-
COMMON_SRC = $(wildcard src/common/*.c src/registry/*.c)
16-
ALL_SRC = $(wildcard src/*.c src/*.h src/common/*.c src/common/*.h src/registry/*.c src/registry/*.h test/package/*.c test/cache/*.c)
15+
COMMON_SRC = $(wildcard src/common/*.c src/registry/*.c src/repository/*)
16+
ALL_SRC = $(wildcard src/*.c src/*.h src/common/*.c src/common/*.h src/registry/*.c src/registry/*.h src/repository/*.h src/repository/*.c test/package/*.c test/cache/*.c)
1717
SDEPS = $(wildcard deps/*/*.c)
1818
ODEPS = $(SDEPS:.c=.o)
1919
DEPS = $(filter-out $(ODEPS), $(SDEPS))
2020
OBJS = $(DEPS:.c=.o)
2121

2222
export CC
2323

24+
CFLAGS += -std=gnu17 -Ideps -Isrc/common -Isrc/repository -Isrc/registry -g -Wall -Werror=return-type -Wno-unused-function $(shell curl-config --cflags)
25+
2426
ifdef STATIC
25-
CFLAGS += -DCURL_STATICLIB -std=c99 -Ideps -Wall -Werror=return-type -Wno-unused-function -U__STRICT_ANSI__ $(shell deps/curl/bin/curl-config --cflags)
27+
CFLAGS += -DCURL_STATICLIB $(shell deps/curl/bin/curl-config --cflags)
2628
LDFLAGS += -static $(shell deps/curl/bin/curl-config --static-libs)
2729
else
28-
CFLAGS += -std=gnu17 -Ideps -g -Wall -Werror=return-type -Wno-unused-function $(shell curl-config --cflags)
30+
CFLAGS += $(shell curl-config --cflags)
2931
LDFLAGS += $(shell curl-config --libs)
3032
endif
3133

clib.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"stephenmathieson/gumbo-get-element-by-id.c": "*",
4545
"stephenmathieson/gumbo-get-elements-by-tag-name.c": "*",
4646
"clibs/list": "*",
47-
"jwerle/url.h": "0.0.*"
47+
"jwerle/url.h": "0.1.*"
4848
},
4949
"development": {
5050
"stephenmathieson/describe.h": "2.0.1"

deps/http-get/http-get.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ static size_t http_get_file_cb(void *ptr, size_t size, size_t nmemb, void *strea
9797
* Request `url` and save to `file`
9898
*/
9999

100-
int http_get_file_shared(const char *url, const char *file, CURLSH *share) {
100+
int http_get_file_shared(const char *url, const char *file, CURLSH *share, const char** headers, int header_count) {
101101
CURL *req = curl_easy_init();
102102
if (!req) return -1;
103103

@@ -108,6 +108,15 @@ int http_get_file_shared(const char *url, const char *file, CURLSH *share) {
108108
curl_easy_setopt(req, CURLOPT_SHARE, share);
109109
}
110110

111+
if (header_count > 0) {
112+
struct curl_slist *chunk = NULL;
113+
for (int i = 0; i < header_count; i++) {
114+
chunk = curl_slist_append(chunk, headers[i]);
115+
}
116+
/* set our custom set of headers */
117+
curl_easy_setopt(req, CURLOPT_HTTPHEADER, chunk);
118+
}
119+
111120
curl_easy_setopt(req, CURLOPT_URL, url);
112121
curl_easy_setopt(req, CURLOPT_HTTPGET, 1);
113122
curl_easy_setopt(req, CURLOPT_FOLLOWLOCATION, 1);
@@ -125,7 +134,7 @@ int http_get_file_shared(const char *url, const char *file, CURLSH *share) {
125134
}
126135

127136
int http_get_file(const char *url, const char *file) {
128-
return http_get_file_shared(url, file, NULL);
137+
return http_get_file_shared(url, file, NULL, NULL, 0);
129138
}
130139

131140
/**

deps/http-get/http-get.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ http_get_response_t *http_get(const char *url, const char** headers, int header_
2525
http_get_response_t *http_get_shared(const char *url, void *, const char** headers, int header_count);
2626

2727
int http_get_file(const char *, const char *);
28-
int http_get_file_shared(const char *, const char *, void *);
28+
int http_get_file_shared(const char *, const char *, void *, const char** headers, int header_count);
2929

3030
void http_get_free(http_get_response_t *);
3131

deps/url/url.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
* http://en.wikipedia.org/wiki/URI_scheme
5252
*/
5353

54+
#ifdef URL_H_IMPLEMENTATION
5455
char *URL_SCHEMES[] = {
5556
// official IANA registered schemes
5657
"aaa", "aaas", "about", "acap", "acct", "adiumxtra", "afp", "afs", "aim", "apt", "attachment", "aw",
@@ -72,6 +73,7 @@ char *URL_SCHEMES[] = {
7273
// unofficial schemes
7374
"javascript", "jdbc", "doi"
7475
};
76+
#endif
7577

7678

7779
/**
@@ -102,7 +104,7 @@ typedef struct url_data {
102104
*/
103105

104106
url_data_t *
105-
url_parse (char *url);
107+
url_parse (const char *url);
106108

107109
char *
108110
url_get_protocol (char *url);
@@ -151,7 +153,7 @@ url_data_inspect (url_data_t *data);
151153

152154

153155
// implementation
154-
156+
#ifdef URL_H_IMPLEMENTATION
155157

156158
// non C99 standard functions
157159
#if _POSIX_C_SOURCE < 200809L
@@ -220,7 +222,7 @@ get_part (char *url, const char *format, int l) {
220222
}
221223

222224
url_data_t *
223-
url_parse (char *url) {
225+
url_parse (const char *url) {
224226
url_data_t *data = malloc(sizeof(url_data_t));
225227
if (!data) return NULL;
226228

@@ -590,5 +592,6 @@ url_free (url_data_t *data) {
590592
free(data);
591593
}
592594

595+
#endif
593596

594597
#endif

src/clib-build.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ int build_package_with_manifest_name(const char *dir, const char *file) {
199199
#ifdef DEBUG
200200
package = clib_package_new_from_slug(dir, 1);
201201
#else
202-
package = clib_package_new_from_slug(dir, 0);
202+
package = clib_package_new_from_slug_and_url(dir, "FIXME", 0);
203203
#endif
204204
}
205205

@@ -330,7 +330,7 @@ int build_package_with_manifest_name(const char *dir, const char *file) {
330330
char *dep_dir = 0;
331331
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
332332

333-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
333+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, "FIXME", 0);
334334
if (opts.dir && dependency && dependency->name) {
335335
dep_dir = path_join(opts.dir, dependency->name);
336336
}
@@ -401,7 +401,7 @@ int build_package_with_manifest_name(const char *dir, const char *file) {
401401
char *slug = 0;
402402
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
403403

404-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
404+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, "FIXME", 0);
405405
char *dep_dir = path_join(opts.dir, dependency->name);
406406

407407
free(slug);

src/clib-configure.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ int configure_package_with_manifest_name(const char *dir, const char *file) {
192192
#ifdef DEBUG
193193
package = clib_package_new_from_slug(dir, 1);
194194
#else
195-
package = clib_package_new_from_slug(dir, 0);
195+
package = clib_package_new_from_slug_and_url(dir, "FIXME", 0);
196196
#endif
197197
}
198198

@@ -288,7 +288,7 @@ int configure_package_with_manifest_name(const char *dir, const char *file) {
288288
char *slug = 0;
289289
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
290290

291-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
291+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, "FIXME", 0);
292292
char *dep_dir = path_join(opts.dir, dependency->name);
293293

294294
free(slug);
@@ -359,7 +359,7 @@ int configure_package_with_manifest_name(const char *dir, const char *file) {
359359
char *slug = 0;
360360
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
361361

362-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
362+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, "FIXME", 0);
363363
char *dep_dir = path_join(opts.dir, dependency->name);
364364

365365
free(slug);

src/clib-install.c

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
#include "parson/parson.h"
1818
#include "str-replace/str-replace.h"
1919
#include "version.h"
20+
#include <clib-secrets.h>
2021
#include <curl/curl.h>
2122
#include <libgen.h>
2223
#include <limits.h>
24+
#include <registry-manager.h>
25+
#include <repository.h>
2326
#include <stdio.h>
2427
#include <stdlib.h>
2528
#include <string.h>
@@ -251,21 +254,6 @@ static int install_package(const char *slug) {
251254
long path_max = 4096;
252255
#endif
253256

254-
if (!root_package) {
255-
const char *name = NULL;
256-
char *json = NULL;
257-
unsigned int i = 0;
258-
259-
do {
260-
name = manifest_names[i];
261-
json = fs_read(name);
262-
} while (NULL != manifest_names[++i] && !json);
263-
264-
if (json) {
265-
root_package = clib_package_new(json, opts.verbose);
266-
}
267-
}
268-
269257
if ('.' == slug[0]) {
270258
if (1 == strlen(slug) || ('/' == slug[1] && 2 == strlen(slug))) {
271259
char dir[path_max];
@@ -291,10 +279,21 @@ static int install_package(const char *slug) {
291279
}
292280
}
293281

294-
if (!pkg) {
295-
pkg = clib_package_new_from_slug(slug, opts.verbose);
282+
// Read local config files.
283+
clib_secrets_t secrets = clib_secrets_load_from_file("clib_secrets.json");
284+
repository_init(secrets); // The repository requires the secrets for authentication.
285+
clib_package_t *package = clib_package_load_local_manifest(0);
286+
287+
registries_t registries = registry_manager_init_registries(package->registries, secrets);
288+
registry_manager_fetch_registries(registries);
289+
registry_package_ptr_t package_info = registry_manger_find_package(registries, slug);
290+
if (!package_info) {
291+
debug(&debugger, "Package %s not found in any registry.", slug);
292+
return -1;
296293
}
297294

295+
296+
pkg = clib_package_new_from_slug_and_url(slug, registry_package_get_href(package_info), opts.verbose);
298297
if (NULL == pkg)
299298
return -1;
300299

@@ -437,6 +436,21 @@ int main(int argc, char *argv[]) {
437436

438437
clib_package_set_opts(package_opts);
439438

439+
if (!root_package) {
440+
const char *name = NULL;
441+
char *json = NULL;
442+
unsigned int i = 0;
443+
444+
do {
445+
name = manifest_names[i];
446+
json = fs_read(name);
447+
} while (NULL != manifest_names[++i] && !json);
448+
449+
if (json) {
450+
root_package = clib_package_new(json, opts.verbose);
451+
}
452+
}
453+
440454
int code = 0 == program.argc ? install_local_packages()
441455
: install_packages(program.argc, program.argv);
442456

0 commit comments

Comments
 (0)