X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/a3722ec3c6660ace9fe637d617a0ca225acfacbc..8eef4589d0ba80fd4e6a9ce2f3ca4fcf266a64e0:/cgit.c diff --git a/cgit.c b/cgit.c index f488ebf..c16ed8c 100644 --- a/cgit.c +++ b/cgit.c @@ -69,7 +69,7 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va repo->max_stats = cgit_find_stats_period(value, NULL); else if (!strcmp(name, "module-link")) repo->module_link= xstrdup(value); - else if (!prefixcmp(name, "module-link.")) { + else if (starts_with(name, "module-link.")) { item = string_list_append(&repo->submodules, xstrdup(name + 12)); item->util = xstrdup(value); } else if (!strcmp(name, "section")) @@ -91,6 +91,12 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va repo->source_filter = cgit_new_filter(value, SOURCE); else if (!strcmp(name, "email-filter")) repo->email_filter = cgit_new_filter(value, EMAIL); + else if (!strcmp(name, "owner-filter")) + repo->owner_filter = cgit_new_filter(value, OWNER); + } else if (!strcmp(name, "hide")) { + repo->hide = atoi(value); + } else if (!strcmp(name, "ignore")) { + repo->ignore = atoi(value); } } @@ -102,7 +108,7 @@ static void config_cb(const char *name, const char *value) ctx.repo = cgit_add_repo(value); else if (ctx.repo && !strcmp(name, "repo.path")) ctx.repo->path = trim_end(value, '/'); - else if (ctx.repo && !prefixcmp(name, "repo.")) + else if (ctx.repo && starts_with(name, "repo.")) repo_config(ctx.repo, name + 5, value); else if (!strcmp(name, "readme") && value != NULL) string_list_append(&ctx.cfg.readme, xstrdup(value)); @@ -194,6 +200,8 @@ static void config_cb(const char *name, const char *value) ctx.cfg.commit_filter = cgit_new_filter(value, COMMIT); else if (!strcmp(name, "email-filter")) ctx.cfg.email_filter = cgit_new_filter(value, EMAIL); + else if (!strcmp(name, "owner-filter")) + ctx.cfg.owner_filter = cgit_new_filter(value, OWNER); else if (!strcmp(name, "auth-filter")) ctx.cfg.auth_filter = cgit_new_filter(value, AUTH); else if (!strcmp(name, "embedded")) @@ -237,7 +245,7 @@ static void config_cb(const char *name, const char *value) else if (!strcmp(name, "summary-tags")) ctx.cfg.summary_tags = atoi(value); else if (!strcmp(name, "side-by-side-diffs")) - ctx.cfg.ssdiff = atoi(value); + ctx.cfg.difftype = atoi(value) ? DIFF_SSDIFF : DIFF_UNIFIED; else if (!strcmp(name, "agefile")) ctx.cfg.agefile = xstrdup(value); else if (!strcmp(name, "mimetype-file")) @@ -264,7 +272,7 @@ static void config_cb(const char *name, const char *value) ctx.cfg.branch_sort = 1; if (!strcmp(value, "name")) ctx.cfg.branch_sort = 0; - } else if (!prefixcmp(name, "mimetype.")) + } else if (starts_with(name, "mimetype.")) add_mimetype(name + 9, value); else if (!strcmp(name, "include")) parse_configfile(expand_macros(value), config_cb); @@ -312,9 +320,13 @@ static void querystring_cb(const char *name, const char *value) ctx.qry.showmsg = atoi(value); } else if (!strcmp(name, "period")) { ctx.qry.period = xstrdup(value); + } else if (!strcmp(name, "dt")) { + ctx.qry.difftype = atoi(value); + ctx.qry.has_difftype = 1; } else if (!strcmp(name, "ss")) { - ctx.qry.ssdiff = atoi(value); - ctx.qry.has_ssdiff = 1; + /* No longer generated, but there may be links out there. */ + ctx.qry.difftype = atoi(value) ? DIFF_SSDIFF : DIFF_UNIFIED; + ctx.qry.has_difftype = 1; } else if (!strcmp(name, "all")) { ctx.qry.show_all = atoi(value); } else if (!strcmp(name, "context")) { @@ -372,7 +384,7 @@ static void prepare_context(void) ctx.cfg.summary_log = 10; ctx.cfg.summary_tags = 10; ctx.cfg.max_atom_items = 10; - ctx.cfg.ssdiff = 0; + ctx.cfg.difftype = DIFF_UNIFIED; ctx.env.cgit_config = getenv("CGIT_CONFIG"); ctx.env.http_host = getenv("HTTP_HOST"); ctx.env.https = getenv("HTTPS"); @@ -453,8 +465,8 @@ static char *guess_defbranch(void) const char *ref; unsigned char sha1[20]; - ref = resolve_ref_unsafe("HEAD", sha1, 0, NULL); - if (!ref || prefixcmp(ref, "refs/heads/")) + ref = resolve_ref_unsafe("HEAD", 0, sha1, NULL); + if (!ref || !starts_with(ref, "refs/heads/")) return "master"; return xstrdup(ref + 11); } @@ -504,12 +516,6 @@ static void choose_readme(struct cgit_repo *repo) free(ref); continue; } - /* If there's only one item, we skip the possibly expensive - * selection process. */ - if (repo->readme.nr == 1) { - found = 1; - break; - } if (ref) { if (cgit_ref_path_exists(filename, ref, 1)) { found = 1; @@ -530,6 +536,17 @@ static void choose_readme(struct cgit_repo *repo) string_list_append(&repo->readme, filename)->util = ref; } +static void print_no_repo_clone_urls(const char *url) +{ + html(""); + html_txt(url); + html("\n"); +} + static int prepare_repo_cmd(void) { unsigned char sha1[20]; @@ -580,6 +597,11 @@ static int prepare_repo_cmd(void) cgit_print_docstart(); cgit_print_pageheader(); cgit_print_error("Repository seems to be empty"); + if (!strcmp(ctx.qry.page, "summary")) { + html("\n"); + cgit_add_clone_urls(print_no_repo_clone_urls); + html("
 
Clone
\n"); + } cgit_print_docend(); return 1; } @@ -597,7 +619,7 @@ static int prepare_repo_cmd(void) free(tmp); return 1; } - sort_string_list(&ctx.repo->submodules); + string_list_sort(&ctx.repo->submodules); cgit_prepare_repo_env(ctx.repo); choose_readme(ctx.repo); return 0; @@ -802,6 +824,8 @@ static void print_repo(FILE *f, struct cgit_repo *repo) cgit_fprintf_filter(repo->source_filter, f, "repo.source-filter="); if (repo->email_filter && repo->email_filter != ctx.cfg.email_filter) cgit_fprintf_filter(repo->email_filter, f, "repo.email-filter="); + if (repo->owner_filter && repo->owner_filter != ctx.cfg.owner_filter) + cgit_fprintf_filter(repo->owner_filter, f, "repo.owner-filter="); if (repo->snapshots != ctx.cfg.snapshots) { char *tmp = build_snapshot_setting(repo->snapshots); fprintf(f, "repo.snapshots=%s\n", tmp ? tmp : ""); @@ -824,6 +848,8 @@ static void print_repo(FILE *f, struct cgit_repo *repo) else if (repo->commit_sort == 2) fprintf(f, "repo.commit-sort=topo\n"); } + fprintf(f, "repo.hide=%d\n", repo->hide); + fprintf(f, "repo.ignore=%d\n", repo->ignore); fprintf(f, "\n"); } @@ -941,28 +967,28 @@ static void cgit_parse_args(int argc, const char **argv) exit(0); } - if (!prefixcmp(argv[i], "--cache=")) { + if (starts_with(argv[i], "--cache=")) { ctx.cfg.cache_root = xstrdup(argv[i] + 8); } else if (!strcmp(argv[i], "--nocache")) { ctx.cfg.nocache = 1; } else if (!strcmp(argv[i], "--nohttp")) { ctx.env.no_http = "1"; - } else if (!prefixcmp(argv[i], "--query=")) { + } else if (starts_with(argv[i], "--query=")) { ctx.qry.raw = xstrdup(argv[i] + 8); - } else if (!prefixcmp(argv[i], "--repo=")) { + } else if (starts_with(argv[i], "--repo=")) { ctx.qry.repo = xstrdup(argv[i] + 7); - } else if (!prefixcmp(argv[i], "--page=")) { + } else if (starts_with(argv[i], "--page=")) { ctx.qry.page = xstrdup(argv[i] + 7); - } else if (!prefixcmp(argv[i], "--head=")) { + } else if (starts_with(argv[i], "--head=")) { ctx.qry.head = xstrdup(argv[i] + 7); ctx.qry.has_symref = 1; - } else if (!prefixcmp(argv[i], "--sha1=")) { + } else if (starts_with(argv[i], "--sha1=")) { ctx.qry.sha1 = xstrdup(argv[i] + 7); ctx.qry.has_sha1 = 1; - } else if (!prefixcmp(argv[i], "--ofs=")) { + } else if (starts_with(argv[i], "--ofs=")) { ctx.qry.ofs = atoi(argv[i] + 6); - } else if (!prefixcmp(argv[i], "--scan-tree=") || - !prefixcmp(argv[i], "--scan-path=")) { + } else if (starts_with(argv[i], "--scan-tree=") || + starts_with(argv[i], "--scan-path=")) { /* * HACK: The global snapshot bit mask defines the set * of allowed snapshot formats, but the config file @@ -987,7 +1013,7 @@ static void cgit_parse_args(int argc, const char **argv) } } -static int calc_ttl() +static int calc_ttl(void) { if (!ctx.repo) return ctx.cfg.cache_root_ttl;