diff options
| -rw-r--r-- | cgit.c | 6 | ||||
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | cmd.c | 42 | ||||
| -rw-r--r-- | cmd.h | 3 | 
4 files changed, 30 insertions, 22 deletions
| @@ -424,6 +424,12 @@ static void process_request(void *cbdata)  		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). +	 */ +	ctx->qry.vpath = cmd->want_vpath ? ctx->qry.path : NULL; +  	if (cmd->want_repo && !ctx->repo) {  		cgit_print_http_headers(ctx);  		cgit_print_docstart(ctx); @@ -145,6 +145,7 @@ struct cgit_query {  	char *sort;  	int showmsg;  	int ssdiff; +	char *vpath;  };  struct cgit_config { @@ -129,31 +129,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) \ -	{#name, name##_fn, want_repo, want_layout} +#define def_cmd(name, want_repo, want_layout, want_vpath) \ +	{#name, name##_fn, want_repo, want_layout, want_vpath}  struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)  {  	static struct cgit_cmd cmds[] = { -		def_cmd(HEAD, 1, 0), -		def_cmd(atom, 1, 0), -		def_cmd(about, 0, 1), -		def_cmd(blob, 1, 0), -		def_cmd(commit, 1, 1), -		def_cmd(diff, 1, 1), -		def_cmd(info, 1, 0), -		def_cmd(log, 1, 1), -		def_cmd(ls_cache, 0, 0), -		def_cmd(objects, 1, 0), -		def_cmd(patch, 1, 0), -		def_cmd(plain, 1, 0), -		def_cmd(refs, 1, 1), -		def_cmd(repolist, 0, 0), -		def_cmd(snapshot, 1, 0), -		def_cmd(stats, 1, 1), -		def_cmd(summary, 1, 1), -		def_cmd(tag, 1, 1), -		def_cmd(tree, 1, 1), +		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),  	};  	int i; @@ -7,7 +7,8 @@ struct cgit_cmd {  	const char *name;  	cgit_cmd_fn fn;  	unsigned int want_repo:1, -		want_layout:1; +		want_layout:1, +		want_vpath:1;  };  extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx); | 
