From: Lars Hjemli Date: Sat, 18 Jun 2011 12:59:51 +0000 (+0200) Subject: Merge branch 'stable' X-Git-Url: https://gitweb.ps.run/ps-cgit/commitdiff_plain/b0d72da02850abaf4be65ff220774a457c214651?ds=inline;hp=-c Merge branch 'stable' --- b0d72da02850abaf4be65ff220774a457c214651 diff --combined cgit.c index 51ca78a,5259f56..b7807ad --- a/cgit.c +++ b/cgit.c @@@ -26,27 -26,14 +26,27 @@@ void add_mimetype(const char *name, con item->util = xstrdup(value); } -struct cgit_filter *new_filter(const char *cmd, int extra_args) +struct cgit_filter *new_filter(const char *cmd, filter_type filtertype) { struct cgit_filter *f; int args_size = 0; + int extra_args; if (!cmd || !cmd[0]) return NULL; + switch (filtertype) { + case SOURCE: + extra_args = 1; + break; + + case ABOUT: + case COMMIT: + default: + extra_args = 0; + break; + } + f = xmalloc(sizeof(struct cgit_filter)); f->cmd = xstrdup(cmd); args_size = (2 + extra_args) * sizeof(char *); @@@ -96,11 -83,11 +96,11 @@@ void repo_config(struct cgit_repo *repo repo->logo_link = xstrdup(value); else if (ctx.cfg.enable_filter_overrides) { if (!strcmp(name, "about-filter")) - repo->about_filter = new_filter(value, 0); + repo->about_filter = new_filter(value, ABOUT); else if (!strcmp(name, "commit-filter")) - repo->commit_filter = new_filter(value, 0); + repo->commit_filter = new_filter(value, COMMIT); else if (!strcmp(name, "source-filter")) - repo->source_filter = new_filter(value, 1); + repo->source_filter = new_filter(value, SOURCE); } } @@@ -160,8 -147,6 +160,8 @@@ void config_cb(const char *name, const ctx.cfg.enable_filter_overrides = atoi(value); else if (!strcmp(name, "enable-gitweb-owner")) ctx.cfg.enable_gitweb_owner = atoi(value); + else if (!strcmp(name, "enable-http-clone")) + ctx.cfg.enable_http_clone = atoi(value); else if (!strcmp(name, "enable-index-links")) ctx.cfg.enable_index_links = atoi(value); else if (!strcmp(name, "enable-commit-graph")) @@@ -193,9 -178,9 +193,9 @@@ else if (!strcmp(name, "cache-dynamic-ttl")) ctx.cfg.cache_dynamic_ttl = atoi(value); else if (!strcmp(name, "about-filter")) - ctx.cfg.about_filter = new_filter(value, 0); + ctx.cfg.about_filter = new_filter(value, ABOUT); else if (!strcmp(name, "commit-filter")) - ctx.cfg.commit_filter = new_filter(value, 0); + ctx.cfg.commit_filter = new_filter(value, COMMIT); else if (!strcmp(name, "embedded")) ctx.cfg.embedded = atoi(value); else if (!strcmp(name, "max-atom-items")) @@@ -225,7 -210,7 +225,7 @@@ else if (!strcmp(name, "section-from-path")) ctx.cfg.section_from_path = atoi(value); else if (!strcmp(name, "source-filter")) - ctx.cfg.source_filter = new_filter(value, 1); + ctx.cfg.source_filter = new_filter(value, SOURCE); else if (!strcmp(name, "summary-log")) ctx.cfg.summary_log = atoi(value); else if (!strcmp(name, "summary-branches")) @@@ -244,8 -229,6 +244,8 @@@ ctx.cfg.robots = xstrdup(value); else if (!strcmp(name, "clone-prefix")) ctx.cfg.clone_prefix = xstrdup(value); + else if (!strcmp(name, "clone-url")) + ctx.cfg.clone_url = xstrdup(value); else if (!strcmp(name, "local-time")) ctx.cfg.local_time = atoi(value); else if (!prefixcmp(name, "mimetype.")) @@@ -329,7 -312,6 +329,7 @@@ static void prepare_context(struct cgit ctx->cfg.logo = "/cgit.png"; ctx->cfg.local_time = 0; ctx->cfg.enable_gitweb_owner = 1; + ctx->cfg.enable_http_clone = 1; ctx->cfg.enable_tree_linenumbers = 1; ctx->cfg.max_repo_count = 50; ctx->cfg.max_commit_count = 50; @@@ -421,13 -403,17 +421,17 @@@ static int prepare_repo_cmd(struct cgit char *tmp; unsigned char sha1[20]; int nongit = 0; + int rc; setenv("GIT_DIR", ctx->repo->path, 1); setup_git_directory_gently(&nongit); if (nongit) { + rc = errno; ctx->page.title = fmt("%s - %s", ctx->cfg.root_title, "config error"); - tmp = fmt("Not a git repository: '%s'", ctx->repo->path); + tmp = fmt("Failed to open %s: %s", + ctx->repo->name, + rc ? strerror(rc) : "Not a valid git repository"); ctx->repo = NULL; cgit_print_http_headers(ctx); cgit_print_docstart(ctx); @@@ -457,7 -443,7 +461,7 @@@ tmp = xstrdup(ctx->qry.head); ctx->qry.head = ctx->repo->defbranch; ctx->page.status = 404; - ctx->page.statusmsg = "not found"; + ctx->page.statusmsg = "Not found"; cgit_print_http_headers(ctx); cgit_print_docstart(ctx); cgit_print_pageheader(ctx); @@@ -465,7 -451,6 +469,7 @@@ cgit_print_docend(); return 1; } + cgit_prepare_repo_env(ctx->repo); return 0; } @@@ -477,8 -462,6 +481,8 @@@ static void process_request(void *cbdat cmd = cgit_get_cmd(ctx); if (!cmd) { ctx->page.title = "cgit error"; + ctx->page.status = 404; + ctx->page.statusmsg = "Not found"; cgit_print_http_headers(ctx); cgit_print_docstart(ctx); cgit_print_pageheader(ctx); @@@ -487,11 -470,6 +491,11 @@@ return; } + if (!ctx->cfg.enable_http_clone && cmd->is_clone) { + html_status(404, "Not found", 0); + return; + } + /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual" * in-project path limit to be made available at ctx->qry.vpath. * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL).