diff options
| -rw-r--r-- | cgit.c | 12 | ||||
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | cgitrc.5.txt | 5 | ||||
| -rw-r--r-- | cmd.c | 42 | ||||
| -rw-r--r-- | cmd.h | 3 | 
5 files changed, 40 insertions, 23 deletions
| @@ -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). @@ -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 index 65b210f..875d51f 100644 --- 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", @@ -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; @@ -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); | 
