author | Lars Hjemli <hjemli@gmail.com> | 2009-08-24 11:31:49 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2009-08-24 11:31:49 (UTC) |
commit | ee554849ac7209fa8f7486327ec9f3b370e4c876 (patch) (unidiff) | |
tree | 63c284ebf72ea401067dd5d4d59ae8ede8f8743c | |
parent | 588fb8efc69778b85062e8fc2f482a8de43bad75 (diff) | |
download | cgit-ee554849ac7209fa8f7486327ec9f3b370e4c876.zip cgit-ee554849ac7209fa8f7486327ec9f3b370e4c876.tar.gz cgit-ee554849ac7209fa8f7486327ec9f3b370e4c876.tar.bz2 |
cgit.c: respect repo-local 'snapshots' option for --scan-path
The repo-specific 'snapshots' option is bitwise AND'ed with the global
'snapshots' option during parsing, and since the global cgitrc hasn't
been parsed when --scan-path is processed the global 'snapshots' will
always be 0 (i.e. no repo-specific 'snapshots' setting will have any
effect).
This patch fixes the issue by setting the global 'snapshots' mask to
0xFF (hence relying on later parsing of the generated cgitrc repolist
to do the right thing).
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -591,64 +591,74 @@ static void cgit_parse_args(int argc, const char **argv) | |||
591 | for (i = 1; i < argc; i++) { | 591 | for (i = 1; i < argc; i++) { |
592 | if (!strncmp(argv[i], "--cache=", 8)) { | 592 | if (!strncmp(argv[i], "--cache=", 8)) { |
593 | ctx.cfg.cache_root = xstrdup(argv[i]+8); | 593 | ctx.cfg.cache_root = xstrdup(argv[i]+8); |
594 | } | 594 | } |
595 | if (!strcmp(argv[i], "--nocache")) { | 595 | if (!strcmp(argv[i], "--nocache")) { |
596 | ctx.cfg.nocache = 1; | 596 | ctx.cfg.nocache = 1; |
597 | } | 597 | } |
598 | if (!strcmp(argv[i], "--nohttp")) { | 598 | if (!strcmp(argv[i], "--nohttp")) { |
599 | ctx.env.no_http = "1"; | 599 | ctx.env.no_http = "1"; |
600 | } | 600 | } |
601 | if (!strncmp(argv[i], "--query=", 8)) { | 601 | if (!strncmp(argv[i], "--query=", 8)) { |
602 | ctx.qry.raw = xstrdup(argv[i]+8); | 602 | ctx.qry.raw = xstrdup(argv[i]+8); |
603 | } | 603 | } |
604 | if (!strncmp(argv[i], "--repo=", 7)) { | 604 | if (!strncmp(argv[i], "--repo=", 7)) { |
605 | ctx.qry.repo = xstrdup(argv[i]+7); | 605 | ctx.qry.repo = xstrdup(argv[i]+7); |
606 | } | 606 | } |
607 | if (!strncmp(argv[i], "--page=", 7)) { | 607 | if (!strncmp(argv[i], "--page=", 7)) { |
608 | ctx.qry.page = xstrdup(argv[i]+7); | 608 | ctx.qry.page = xstrdup(argv[i]+7); |
609 | } | 609 | } |
610 | if (!strncmp(argv[i], "--head=", 7)) { | 610 | if (!strncmp(argv[i], "--head=", 7)) { |
611 | ctx.qry.head = xstrdup(argv[i]+7); | 611 | ctx.qry.head = xstrdup(argv[i]+7); |
612 | ctx.qry.has_symref = 1; | 612 | ctx.qry.has_symref = 1; |
613 | } | 613 | } |
614 | if (!strncmp(argv[i], "--sha1=", 7)) { | 614 | if (!strncmp(argv[i], "--sha1=", 7)) { |
615 | ctx.qry.sha1 = xstrdup(argv[i]+7); | 615 | ctx.qry.sha1 = xstrdup(argv[i]+7); |
616 | ctx.qry.has_sha1 = 1; | 616 | ctx.qry.has_sha1 = 1; |
617 | } | 617 | } |
618 | if (!strncmp(argv[i], "--ofs=", 6)) { | 618 | if (!strncmp(argv[i], "--ofs=", 6)) { |
619 | ctx.qry.ofs = atoi(argv[i]+6); | 619 | ctx.qry.ofs = atoi(argv[i]+6); |
620 | } | 620 | } |
621 | if (!strncmp(argv[i], "--scan-tree=", 12) || | 621 | if (!strncmp(argv[i], "--scan-tree=", 12) || |
622 | !strncmp(argv[i], "--scan-path=", 12)) { | 622 | !strncmp(argv[i], "--scan-path=", 12)) { |
623 | /* HACK: the global snapshot bitmask defines the | ||
624 | * set of allowed snapshot formats, but the config | ||
625 | * file hasn't been parsed yet so the mask is | ||
626 | * currently 0. By setting all bits high before | ||
627 | * scanning we make sure that any in-repo cgitrc | ||
628 | * snapshot setting is respected by scan_tree(). | ||
629 | * BTW: we assume that there'll never be more than | ||
630 | * 255 different snapshot formats supported by cgit... | ||
631 | */ | ||
632 | ctx.cfg.snapshots = 0xFF; | ||
623 | scan++; | 633 | scan++; |
624 | scan_tree(argv[i] + 12, repo_config); | 634 | scan_tree(argv[i] + 12, repo_config); |
625 | } | 635 | } |
626 | } | 636 | } |
627 | if (scan) { | 637 | if (scan) { |
628 | qsort(cgit_repolist.repos, cgit_repolist.count, | 638 | qsort(cgit_repolist.repos, cgit_repolist.count, |
629 | sizeof(struct cgit_repo), cmp_repos); | 639 | sizeof(struct cgit_repo), cmp_repos); |
630 | print_repolist(stdout, &cgit_repolist, 0); | 640 | print_repolist(stdout, &cgit_repolist, 0); |
631 | exit(0); | 641 | exit(0); |
632 | } | 642 | } |
633 | } | 643 | } |
634 | 644 | ||
635 | static int calc_ttl() | 645 | static int calc_ttl() |
636 | { | 646 | { |
637 | if (!ctx.repo) | 647 | if (!ctx.repo) |
638 | return ctx.cfg.cache_root_ttl; | 648 | return ctx.cfg.cache_root_ttl; |
639 | 649 | ||
640 | if (!ctx.qry.page) | 650 | if (!ctx.qry.page) |
641 | return ctx.cfg.cache_repo_ttl; | 651 | return ctx.cfg.cache_repo_ttl; |
642 | 652 | ||
643 | if (ctx.qry.has_symref) | 653 | if (ctx.qry.has_symref) |
644 | return ctx.cfg.cache_dynamic_ttl; | 654 | return ctx.cfg.cache_dynamic_ttl; |
645 | 655 | ||
646 | if (ctx.qry.has_sha1) | 656 | if (ctx.qry.has_sha1) |
647 | return ctx.cfg.cache_static_ttl; | 657 | return ctx.cfg.cache_static_ttl; |
648 | 658 | ||
649 | return ctx.cfg.cache_repo_ttl; | 659 | return ctx.cfg.cache_repo_ttl; |
650 | } | 660 | } |
651 | 661 | ||
652 | int main(int argc, const char **argv) | 662 | int main(int argc, const char **argv) |
653 | { | 663 | { |
654 | const char *path; | 664 | const char *path; |