Skip to content

Commit 0021740

Browse files
committed
Add support for custom registries and repositories, read secrets from
clib_secrets.json
1 parent 7c1a3d0 commit 0021740

31 files changed

+1027
-663
lines changed

.clang-format

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
BasedOnStyle: LLVM
2+
AccessModifierOffset: -2
3+
AlignAfterOpenBracket: Align
4+
AlignConsecutiveAssignments: false
5+
AlignOperands: false
6+
AllowAllArgumentsOnNextLine: false
7+
AllowAllConstructorInitializersOnNextLine: false
8+
AllowAllParametersOfDeclarationOnNextLine: false
9+
AllowShortBlocksOnASingleLine: Always
10+
AllowShortCaseLabelsOnASingleLine: true
11+
AllowShortFunctionsOnASingleLine: All
12+
AllowShortIfStatementsOnASingleLine: Never
13+
AllowShortLambdasOnASingleLine: All
14+
AllowShortLoopsOnASingleLine: false
15+
AlwaysBreakAfterReturnType: None
16+
AlwaysBreakTemplateDeclarations: MultiLine
17+
BreakBeforeBraces: Custom
18+
BraceWrapping:
19+
AfterCaseLabel: false
20+
AfterClass: false
21+
AfterControlStatement: Never
22+
AfterEnum: false
23+
AfterFunction: false
24+
AfterNamespace: false
25+
AfterUnion: false
26+
BeforeCatch: false
27+
BeforeElse: false
28+
IndentBraces: false
29+
SplitEmptyFunction: false
30+
SplitEmptyRecord: false
31+
BreakBeforeBinaryOperators: NonAssignment
32+
BreakBeforeTernaryOperators: true
33+
BreakConstructorInitializers: BeforeColon
34+
BreakInheritanceList: BeforeColon
35+
ColumnLimit: 0
36+
CompactNamespaces: false
37+
ContinuationIndentWidth: 4
38+
IndentCaseLabels: false
39+
IndentPPDirectives: None
40+
IndentWidth: 2
41+
KeepEmptyLinesAtTheStartOfBlocks: true
42+
MaxEmptyLinesToKeep: 1
43+
NamespaceIndentation: None
44+
ObjCSpaceAfterProperty: false
45+
ObjCSpaceBeforeProtocolList: true
46+
PointerAlignment: Right
47+
ReflowComments: false
48+
SpaceAfterCStyleCast: true
49+
SpaceAfterLogicalNot: false
50+
SpaceAfterTemplateKeyword: false
51+
SpaceBeforeAssignmentOperators: true
52+
SpaceBeforeCpp11BracedList: false
53+
SpaceBeforeCtorInitializerColon: true
54+
SpaceBeforeInheritanceColon: true
55+
SpaceBeforeParens: ControlStatements
56+
SpaceBeforeRangeBasedForLoopColon: true
57+
SpaceInEmptyParentheses: false
58+
SpacesBeforeTrailingComments: 0
59+
SpacesInAngles: false
60+
SpacesInCStyleCastParentheses: false
61+
SpacesInContainerLiterals: false
62+
SpacesInParentheses: false
63+
SpacesInSquareBrackets: false
64+
TabWidth: 4
65+
UseTab: Never

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
@@ -205,7 +205,7 @@ int build_package_with_manifest_name(const char *dir, const char *file) {
205205
#ifdef DEBUG
206206
package = clib_package_new_from_slug(dir, 1);
207207
#else
208-
package = clib_package_new_from_slug(dir, 0);
208+
package = clib_package_new_from_slug_and_url(dir, 0);
209209
#endif
210210
}
211211

@@ -336,7 +336,7 @@ int build_package_with_manifest_name(const char *dir, const char *file) {
336336
char *dep_dir = 0;
337337
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
338338

339-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
339+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, 0);
340340
if (opts.dir && dependency && dependency->name) {
341341
dep_dir = path_join(opts.dir, dependency->name);
342342
}
@@ -407,7 +407,7 @@ int build_package_with_manifest_name(const char *dir, const char *file) {
407407
char *slug = 0;
408408
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
409409

410-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
410+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, 0);
411411
char *dep_dir = path_join(opts.dir, dependency->name);
412412

413413
free(slug);

src/clib-configure.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ int configure_package_with_manifest_name(const char *dir, const char *file) {
198198
#ifdef DEBUG
199199
package = clib_package_new_from_slug(dir, 1);
200200
#else
201-
package = clib_package_new_from_slug(dir, 0);
201+
package = clib_package_new_from_slug_and_url(dir, 0);
202202
#endif
203203
}
204204

@@ -294,7 +294,7 @@ int configure_package_with_manifest_name(const char *dir, const char *file) {
294294
char *slug = 0;
295295
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
296296

297-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
297+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, 0);
298298
char *dep_dir = path_join(opts.dir, dependency->name);
299299

300300
free(slug);
@@ -365,7 +365,7 @@ int configure_package_with_manifest_name(const char *dir, const char *file) {
365365
char *slug = 0;
366366
asprintf(&slug, "%s/%s@%s", dep->author, dep->name, dep->version);
367367

368-
clib_package_t *dependency = clib_package_new_from_slug(slug, 0);
368+
clib_package_t *dependency = clib_package_new_from_slug_and_url(slug, 0);
369369
char *dep_dir = path_join(opts.dir, dependency->name);
370370

371371
free(slug);

src/clib-install.c

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616
#include "parson/parson.h"
1717
#include "str-replace/str-replace.h"
1818
#include "version.h"
19+
#include <clib-secrets.h>
1920
#include <curl/curl.h>
2021
#include <libgen.h>
2122
#include <limits.h>
23+
#include <registry-manager.h>
24+
#include <repository.h>
2225
#include <stdio.h>
2326
#include <stdlib.h>
2427
#include <string.h>
@@ -258,21 +261,6 @@ static int install_package(const char *slug) {
258261
long path_max = 4096;
259262
#endif
260263

261-
if (!root_package) {
262-
const char *name = NULL;
263-
char *json = NULL;
264-
unsigned int i = 0;
265-
266-
do {
267-
name = manifest_names[i];
268-
json = fs_read(name);
269-
} while (NULL != manifest_names[++i] && !json);
270-
271-
if (json) {
272-
root_package = clib_package_new(json, opts.verbose);
273-
}
274-
}
275-
276264
if ('.' == slug[0]) {
277265
if (1 == strlen(slug) || ('/' == slug[1] && 2 == strlen(slug))) {
278266
char dir[path_max];
@@ -298,10 +286,21 @@ static int install_package(const char *slug) {
298286
}
299287
}
300288

301-
if (!pkg) {
302-
pkg = clib_package_new_from_slug(slug, opts.verbose);
289+
// Read local config files.
290+
clib_secrets_t secrets = clib_secrets_load_from_file("clib_secrets.json");
291+
repository_init(secrets); // The repository requires the secrets for authentication.
292+
clib_package_t *package = clib_package_load_local_manifest(0);
293+
294+
registries_t registries = registry_manager_init_registries(package->registries, secrets);
295+
registry_manager_fetch_registries(registries);
296+
wiki_package_ptr_t package_info = registry_manger_find_package(registries, slug);
297+
if (!package_info) {
298+
debug(&debugger, "Package %s not found in any registry.", slug);
299+
return -1;
303300
}
304301

302+
303+
pkg = clib_package_new_from_slug_and_url(slug, wiki_package_get_href(package_info), opts.verbose);
305304
if (NULL == pkg)
306305
return -1;
307306

@@ -444,6 +443,21 @@ int main(int argc, char *argv[]) {
444443

445444
clib_package_set_opts(package_opts);
446445

446+
if (!root_package) {
447+
const char *name = NULL;
448+
char *json = NULL;
449+
unsigned int i = 0;
450+
451+
do {
452+
name = manifest_names[i];
453+
json = fs_read(name);
454+
} while (NULL != manifest_names[++i] && !json);
455+
456+
if (json) {
457+
root_package = clib_package_new(json, opts.verbose);
458+
}
459+
}
460+
447461
int code = 0 == program.argc ? install_local_packages()
448462
: install_packages(program.argc, program.argv);
449463

0 commit comments

Comments
 (0)