diff options
author | Lars Hjemli <hjemli@gmail.com> | 2008-09-15 07:07:12 (JST) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-09-16 06:35:27 (JST) |
commit | 93397a765b9d9af11b7d10c114406e303ea4fb1c (patch) | |
tree | fa40c0c8df7549525123359bf817598ae7e9f43d /cgit.c | |
parent | e154edd8078020d6eba41b448afade0a68617f35 (diff) | |
download | cgit-93397a765b9d9af11b7d10c114406e303ea4fb1c.zip cgit-93397a765b9d9af11b7d10c114406e303ea4fb1c.tar.gz |
Add support for --scan-tree=<path> option to cgit
This option makes cgit scan a directory tree looking for git repositories,
generating suitable definitions for a cgitrc file on stdout.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'cgit.c')
-rw-r--r-- | cgit.c | 47 |
1 files changed, 44 insertions, 3 deletions
@@ -12,6 +12,7 @@ | |||
12 | #include "configfile.h" | 12 | #include "configfile.h" |
13 | #include "html.h" | 13 | #include "html.h" |
14 | #include "ui-shared.h" | 14 | #include "ui-shared.h" |
15 | #include "scan-tree.h" | ||
15 | 16 | ||
16 | const char *cgit_version = CGIT_VERSION; | 17 | const char *cgit_version = CGIT_VERSION; |
17 | 18 | ||
@@ -320,9 +321,39 @@ static void process_request(void *cbdata) | |||
320 | cgit_print_docend(); | 321 | cgit_print_docend(); |
321 | } | 322 | } |
322 | 323 | ||
324 | int cmp_repos(const void *a, const void *b) | ||
325 | { | ||
326 | const struct cgit_repo *ra = a, *rb = b; | ||
327 | return strcmp(ra->url, rb->url); | ||
328 | } | ||
329 | |||
330 | void print_repo(struct cgit_repo *repo) | ||
331 | { | ||
332 | printf("repo.url=%s\n", repo->url); | ||
333 | printf("repo.name=%s\n", repo->name); | ||
334 | printf("repo.path=%s\n", repo->path); | ||
335 | if (repo->owner) | ||
336 | printf("repo.owner=%s\n", repo->owner); | ||
337 | if (repo->desc) | ||
338 | printf("repo.desc=%s\n", repo->desc); | ||
339 | if (repo->readme) | ||
340 | printf("repo.readme=%s\n", repo->readme); | ||
341 | printf("\n"); | ||
342 | } | ||
343 | |||
344 | void print_repolist(struct cgit_repolist *list) | ||
345 | { | ||
346 | int i; | ||
347 | |||
348 | for(i = 0; i < list->count; i++) | ||
349 | print_repo(&list->repos[i]); | ||
350 | } | ||
351 | |||
352 | |||
323 | static void cgit_parse_args(int argc, const char **argv) | 353 | static void cgit_parse_args(int argc, const char **argv) |
324 | { | 354 | { |
325 | int i; | 355 | int i; |
356 | int scan = 0; | ||
326 | 357 | ||
327 | for (i = 1; i < argc; i++) { | 358 | for (i = 1; i < argc; i++) { |
328 | if (!strncmp(argv[i], "--cache=", 8)) { | 359 | if (!strncmp(argv[i], "--cache=", 8)) { |
@@ -351,6 +382,16 @@ static void cgit_parse_args(int argc, const char **argv) | |||
351 | if (!strncmp(argv[i], "--ofs=", 6)) { | 382 | if (!strncmp(argv[i], "--ofs=", 6)) { |
352 | ctx.qry.ofs = atoi(argv[i]+6); | 383 | ctx.qry.ofs = atoi(argv[i]+6); |
353 | } | 384 | } |
385 | if (!strncmp(argv[i], "--scan-tree=", 12)) { | ||
386 | scan++; | ||
387 | scan_tree(argv[i] + 12); | ||
388 | } | ||
389 | } | ||
390 | if (scan) { | ||
391 | qsort(cgit_repolist.repos, cgit_repolist.count, | ||
392 | sizeof(struct cgit_repo), cmp_repos); | ||
393 | print_repolist(&cgit_repolist); | ||
394 | exit(0); | ||
354 | } | 395 | } |
355 | } | 396 | } |
356 | 397 | ||
@@ -383,14 +424,14 @@ int main(int argc, const char **argv) | |||
383 | cgit_repolist.count = 0; | 424 | cgit_repolist.count = 0; |
384 | cgit_repolist.repos = NULL; | 425 | cgit_repolist.repos = NULL; |
385 | 426 | ||
386 | parse_configfile(cgit_config_env ? cgit_config_env : CGIT_CONFIG, | ||
387 | config_cb); | ||
388 | ctx.repo = NULL; | ||
389 | if (getenv("SCRIPT_NAME")) | 427 | if (getenv("SCRIPT_NAME")) |
390 | ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME")); | 428 | ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME")); |
391 | if (getenv("QUERY_STRING")) | 429 | if (getenv("QUERY_STRING")) |
392 | ctx.qry.raw = xstrdup(getenv("QUERY_STRING")); | 430 | ctx.qry.raw = xstrdup(getenv("QUERY_STRING")); |
393 | cgit_parse_args(argc, argv); | 431 | cgit_parse_args(argc, argv); |
432 | parse_configfile(cgit_config_env ? cgit_config_env : CGIT_CONFIG, | ||
433 | config_cb); | ||
434 | ctx.repo = NULL; | ||
394 | http_parse_querystring(ctx.qry.raw, querystring_cb); | 435 | http_parse_querystring(ctx.qry.raw, querystring_cb); |
395 | 436 | ||
396 | /* If virtual-root isn't specified in cgitrc and no url | 437 | /* If virtual-root isn't specified in cgitrc and no url |