neocgit

a more 'modern' version of cgit
Log | Files | Refs | Submodules | README | LICENSE | git clone https://git.ne02ptzero.me/git/neocgit

commit 4837fddc35bbd8d6f66a40486f75cdee3197172d
parent 568d8d3fd3f5a3b4207887215c8adcbac2bb9552
Author: Lars Hjemli <hjemli@gmail.com>
Date:   Sat, 14 May 2011 20:00:33 +0200

Merge branch 'dm/disable-clone'

Diffstat:
Mcgit.c | 12+++++++++++-
Mcgit.h | 1+
Mcgitrc.5.txt | 5+++++
Mcmd.c | 42+++++++++++++++++++++---------------------
Mcmd.h | 3++-
5 files changed, 40 insertions(+), 23 deletions(-)

diff --git a/cgit.c b/cgit.c @@ -147,6 +147,8 @@ void config_cb(const char *name, const char *value) 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")) @@ -312,6 +314,7 @@ static void prepare_context(struct cgit_context *ctx) 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; @@ -439,7 +442,7 @@ static int prepare_repo_cmd(struct cgit_context *ctx) 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); @@ -458,6 +461,8 @@ static void process_request(void *cbdata) 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); @@ -466,6 +471,11 @@ static void process_request(void *cbdata) 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). diff --git a/cgit.h b/cgit.h @@ -191,6 +191,7 @@ struct cgit_config { int embedded; int enable_filter_overrides; int enable_gitweb_owner; + int enable_http_clone; int enable_index_links; int enable_commit_graph; int enable_log_filecount; diff --git a/cgitrc.5.txt b/cgitrc.5.txt @@ -105,6 +105,11 @@ enable-gitweb-owner:: for the git config value "gitweb.owner" to determine the owner. Default value: "1". See also: scan-path. +enable-http-clone:: + If set to "1", cgit will act as an dumb HTTP endpoint for git clones. + If you use an alternate way of serving git repositories, you may wish + to disable this. Default value: "1". + enable-index-links:: Flag which, when set to "1", will make cgit generate extra links for each repo in the repository index (specifically, to the "summary", diff --git a/cmd.c b/cmd.c @@ -130,31 +130,31 @@ static void tree_fn(struct cgit_context *ctx) cgit_print_tree(ctx->qry.sha1, ctx->qry.path); } -#define def_cmd(name, want_repo, want_layout, want_vpath) \ - {#name, name##_fn, want_repo, want_layout, want_vpath} +#define def_cmd(name, want_repo, want_layout, want_vpath, is_clone) \ + {#name, name##_fn, want_repo, want_layout, want_vpath, is_clone} struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) { static struct cgit_cmd cmds[] = { - def_cmd(HEAD, 1, 0, 0), - def_cmd(atom, 1, 0, 0), - def_cmd(about, 0, 1, 0), - def_cmd(blob, 1, 0, 0), - def_cmd(commit, 1, 1, 1), - def_cmd(diff, 1, 1, 1), - def_cmd(info, 1, 0, 0), - def_cmd(log, 1, 1, 1), - def_cmd(ls_cache, 0, 0, 0), - def_cmd(objects, 1, 0, 0), - def_cmd(patch, 1, 0, 1), - def_cmd(plain, 1, 0, 0), - def_cmd(refs, 1, 1, 0), - def_cmd(repolist, 0, 0, 0), - def_cmd(snapshot, 1, 0, 0), - def_cmd(stats, 1, 1, 1), - def_cmd(summary, 1, 1, 0), - def_cmd(tag, 1, 1, 0), - def_cmd(tree, 1, 1, 1), + def_cmd(HEAD, 1, 0, 0, 1), + def_cmd(atom, 1, 0, 0, 0), + def_cmd(about, 0, 1, 0, 0), + def_cmd(blob, 1, 0, 0, 0), + def_cmd(commit, 1, 1, 1, 0), + def_cmd(diff, 1, 1, 1, 0), + def_cmd(info, 1, 0, 0, 1), + def_cmd(log, 1, 1, 1, 0), + def_cmd(ls_cache, 0, 0, 0, 0), + def_cmd(objects, 1, 0, 0, 1), + def_cmd(patch, 1, 0, 1, 0), + def_cmd(plain, 1, 0, 0, 0), + def_cmd(refs, 1, 1, 0, 0), + def_cmd(repolist, 0, 0, 0, 0), + def_cmd(snapshot, 1, 0, 0, 0), + def_cmd(stats, 1, 1, 1, 0), + def_cmd(summary, 1, 1, 0, 0), + def_cmd(tag, 1, 1, 0, 0), + def_cmd(tree, 1, 1, 1, 0), }; int i; diff --git a/cmd.h b/cmd.h @@ -8,7 +8,8 @@ struct cgit_cmd { cgit_cmd_fn fn; unsigned int want_repo:1, want_layout:1, - want_vpath:1; + want_vpath:1, + is_clone:1; }; extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx);