about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--cgit.c12
-rw-r--r--cgit.h1
-rw-r--r--cgitrc.5.txt5
-rw-r--r--cmd.c42
-rw-r--r--cmd.h3
5 files changed, 40 insertions, 23 deletions
diff --git a/cgit.c b/cgit.c index e302a7c..349d6e0 100644 --- a/cgit.c +++ b/cgit.c
@@ -147,6 +147,8 @@ void config_cb(const char *name, const char *value)
147 ctx.cfg.enable_filter_overrides = atoi(value); 147 ctx.cfg.enable_filter_overrides = atoi(value);
148 else if (!strcmp(name, "enable-gitweb-owner")) 148 else if (!strcmp(name, "enable-gitweb-owner"))
149 ctx.cfg.enable_gitweb_owner = atoi(value); 149 ctx.cfg.enable_gitweb_owner = atoi(value);
150 else if (!strcmp(name, "enable-http-clone"))
151 ctx.cfg.enable_http_clone = atoi(value);
150 else if (!strcmp(name, "enable-index-links")) 152 else if (!strcmp(name, "enable-index-links"))
151 ctx.cfg.enable_index_links = atoi(value); 153 ctx.cfg.enable_index_links = atoi(value);
152 else if (!strcmp(name, "enable-commit-graph")) 154 else if (!strcmp(name, "enable-commit-graph"))
@@ -312,6 +314,7 @@ static void prepare_context(struct cgit_context *ctx)
312 ctx->cfg.logo = "/cgit.png"; 314 ctx->cfg.logo = "/cgit.png";
313 ctx->cfg.local_time = 0; 315 ctx->cfg.local_time = 0;
314 ctx->cfg.enable_gitweb_owner = 1; 316 ctx->cfg.enable_gitweb_owner = 1;
317 ctx->cfg.enable_http_clone = 1;
315 ctx->cfg.enable_tree_linenumbers = 1; 318 ctx->cfg.enable_tree_linenumbers = 1;
316 ctx->cfg.max_repo_count = 50; 319 ctx->cfg.max_repo_count = 50;
317 ctx->cfg.max_commit_count = 50; 320 ctx->cfg.max_commit_count = 50;
@@ -439,7 +442,7 @@ static int prepare_repo_cmd(struct cgit_context *ctx)
439 tmp = xstrdup(ctx->qry.head); 442 tmp = xstrdup(ctx->qry.head);
440 ctx->qry.head = ctx->repo->defbranch; 443 ctx->qry.head = ctx->repo->defbranch;
441 ctx->page.status = 404; 444 ctx->page.status = 404;
442 ctx->page.statusmsg = "not found"; 445 ctx->page.statusmsg = "Not found";
443 cgit_print_http_headers(ctx); 446 cgit_print_http_headers(ctx);
444 cgit_print_docstart(ctx); 447 cgit_print_docstart(ctx);
445 cgit_print_pageheader(ctx); 448 cgit_print_pageheader(ctx);
@@ -458,6 +461,8 @@ static void process_request(void *cbdata)
458 cmd = cgit_get_cmd(ctx); 461 cmd = cgit_get_cmd(ctx);
459 if (!cmd) { 462 if (!cmd) {
460 ctx->page.title = "cgit error"; 463 ctx->page.title = "cgit error";
464 ctx->page.status = 404;
465 ctx->page.statusmsg = "Not found";
461 cgit_print_http_headers(ctx); 466 cgit_print_http_headers(ctx);
462 cgit_print_docstart(ctx); 467 cgit_print_docstart(ctx);
463 cgit_print_pageheader(ctx); 468 cgit_print_pageheader(ctx);
@@ -466,6 +471,11 @@ static void process_request(void *cbdata)
466 return; 471 return;
467 } 472 }
468 473
474 if (!ctx->cfg.enable_http_clone && cmd->is_clone) {
475 html_status(404, "Not found", 0);
476 return;
477 }
478
469 /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual" 479 /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual"
470 * in-project path limit to be made available at ctx->qry.vpath. 480 * in-project path limit to be made available at ctx->qry.vpath.
471 * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL). 481 * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL).
diff --git a/cgit.h b/cgit.h index b5f00fc..ecae453 100644 --- a/cgit.h +++ b/cgit.h
@@ -191,6 +191,7 @@ struct cgit_config {
191 int embedded; 191 int embedded;
192 int enable_filter_overrides; 192 int enable_filter_overrides;
193 int enable_gitweb_owner; 193 int enable_gitweb_owner;
194 int enable_http_clone;
194 int enable_index_links; 195 int enable_index_links;
195 int enable_commit_graph; 196 int enable_commit_graph;
196 int enable_log_filecount; 197 int enable_log_filecount;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt index 65b210f..875d51f 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt
@@ -105,6 +105,11 @@ enable-gitweb-owner::
105 for the git config value "gitweb.owner" to determine the owner. 105 for the git config value "gitweb.owner" to determine the owner.
106 Default value: "1". See also: scan-path. 106 Default value: "1". See also: scan-path.
107 107
108enable-http-clone::
109 If set to "1", cgit will act as an dumb HTTP endpoint for git clones.
110 If you use an alternate way of serving git repositories, you may wish
111 to disable this. Default value: "1".
112
108enable-index-links:: 113enable-index-links::
109 Flag which, when set to "1", will make cgit generate extra links for 114 Flag which, when set to "1", will make cgit generate extra links for
110 each repo in the repository index (specifically, to the "summary", 115 each repo in the repository index (specifically, to the "summary",
diff --git a/cmd.c b/cmd.c index 536515b..d114eb3 100644 --- a/cmd.c +++ b/cmd.c
@@ -130,31 +130,31 @@ static void tree_fn(struct cgit_context *ctx)
130 cgit_print_tree(ctx->qry.sha1, ctx->qry.path); 130 cgit_print_tree(ctx->qry.sha1, ctx->qry.path);
131} 131}
132 132
133#define def_cmd(name, want_repo, want_layout, want_vpath) \ 133#define def_cmd(name, want_repo, want_layout, want_vpath, is_clone) \
134 {#name, name##_fn, want_repo, want_layout, want_vpath} 134 {#name, name##_fn, want_repo, want_layout, want_vpath, is_clone}
135 135
136struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) 136struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
137{ 137{
138 static struct cgit_cmd cmds[] = { 138 static struct cgit_cmd cmds[] = {
139 def_cmd(HEAD, 1, 0, 0), 139 def_cmd(HEAD, 1, 0, 0, 1),
140 def_cmd(atom, 1, 0, 0), 140 def_cmd(atom, 1, 0, 0, 0),
141 def_cmd(about, 0, 1, 0), 141 def_cmd(about, 0, 1, 0, 0),
142 def_cmd(blob, 1, 0, 0), 142 def_cmd(blob, 1, 0, 0, 0),
143 def_cmd(commit, 1, 1, 1), 143 def_cmd(commit, 1, 1, 1, 0),
144 def_cmd(diff, 1, 1, 1), 144 def_cmd(diff, 1, 1, 1, 0),
145 def_cmd(info, 1, 0, 0), 145 def_cmd(info, 1, 0, 0, 1),
146 def_cmd(log, 1, 1, 1), 146 def_cmd(log, 1, 1, 1, 0),
147 def_cmd(ls_cache, 0, 0, 0), 147 def_cmd(ls_cache, 0, 0, 0, 0),
148 def_cmd(objects, 1, 0, 0), 148 def_cmd(objects, 1, 0, 0, 1),
149 def_cmd(patch, 1, 0, 1), 149 def_cmd(patch, 1, 0, 1, 0),
150 def_cmd(plain, 1, 0, 0), 150 def_cmd(plain, 1, 0, 0, 0),
151 def_cmd(refs, 1, 1, 0), 151 def_cmd(refs, 1, 1, 0, 0),
152 def_cmd(repolist, 0, 0, 0), 152 def_cmd(repolist, 0, 0, 0, 0),
153 def_cmd(snapshot, 1, 0, 0), 153 def_cmd(snapshot, 1, 0, 0, 0),
154 def_cmd(stats, 1, 1, 1), 154 def_cmd(stats, 1, 1, 1, 0),
155 def_cmd(summary, 1, 1, 0), 155 def_cmd(summary, 1, 1, 0, 0),
156 def_cmd(tag, 1, 1, 0), 156 def_cmd(tag, 1, 1, 0, 0),
157 def_cmd(tree, 1, 1, 1), 157 def_cmd(tree, 1, 1, 1, 0),
158 }; 158 };
159 int i; 159 int i;
160 160
diff --git a/cmd.h b/cmd.h index 8dc01bd..eb5bc87 100644 --- a/cmd.h +++ b/cmd.h
@@ -8,7 +8,8 @@ struct cgit_cmd {
8 cgit_cmd_fn fn; 8 cgit_cmd_fn fn;
9 unsigned int want_repo:1, 9 unsigned int want_repo:1,
10 want_layout:1, 10 want_layout:1,
11 want_vpath:1; 11 want_vpath:1,
12 is_clone:1;
12}; 13};
13 14
14extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx); 15extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx);