diff options
| author | 2008-09-15 07:07:12 (JST) | |
|---|---|---|
| committer | 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 |
