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) | |||
| 424 | return; | 424 | return; |
| 425 | } | 425 | } |
| 426 | 426 | ||
| 427 | /* If cmd->want_vpath is set, assume ctx->qry.path contains a "virtual" | ||
| 428 | * in-project path limit to be made available at ctx->qry.vpath. | ||
| 429 | * Otherwise, no path limit is in effect (ctx->qry.vpath = NULL). | ||
| 430 | */ | ||
| 431 | ctx->qry.vpath = cmd->want_vpath ? ctx->qry.path : NULL; | ||
| 432 | |||
| 427 | if (cmd->want_repo && !ctx->repo) { | 433 | if (cmd->want_repo && !ctx->repo) { |
| 428 | cgit_print_http_headers(ctx); | 434 | cgit_print_http_headers(ctx); |
| 429 | cgit_print_docstart(ctx); | 435 | cgit_print_docstart(ctx); |
| @@ -145,6 +145,7 @@ struct cgit_query { | |||
| 145 | char *sort; | 145 | char *sort; |
| 146 | int showmsg; | 146 | int showmsg; |
| 147 | int ssdiff; | 147 | int ssdiff; |
| 148 | char *vpath; | ||
| 148 | }; | 149 | }; |
| 149 | 150 | ||
| 150 | struct cgit_config { | 151 | struct cgit_config { |
| @@ -129,31 +129,31 @@ static void tree_fn(struct cgit_context *ctx) | |||
| 129 | cgit_print_tree(ctx->qry.sha1, ctx->qry.path); | 129 | cgit_print_tree(ctx->qry.sha1, ctx->qry.path); |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | #define def_cmd(name, want_repo, want_layout) \ | 132 | #define def_cmd(name, want_repo, want_layout, want_vpath) \ |
| 133 | {#name, name##_fn, want_repo, want_layout} | 133 | {#name, name##_fn, want_repo, want_layout, want_vpath} |
| 134 | 134 | ||
| 135 | struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) | 135 | struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) |
| 136 | { | 136 | { |
| 137 | static struct cgit_cmd cmds[] = { | 137 | static struct cgit_cmd cmds[] = { |
| 138 | def_cmd(HEAD, 1, 0), | 138 | def_cmd(HEAD, 1, 0, 0), |
| 139 | def_cmd(atom, 1, 0), | 139 | def_cmd(atom, 1, 0, 0), |
| 140 | def_cmd(about, 0, 1), | 140 | def_cmd(about, 0, 1, 0), |
| 141 | def_cmd(blob, 1, 0), | 141 | def_cmd(blob, 1, 0, 0), |
| 142 | def_cmd(commit, 1, 1), | 142 | def_cmd(commit, 1, 1, 1), |
| 143 | def_cmd(diff, 1, 1), | 143 | def_cmd(diff, 1, 1, 1), |
| 144 | def_cmd(info, 1, 0), | 144 | def_cmd(info, 1, 0, 0), |
| 145 | def_cmd(log, 1, 1), | 145 | def_cmd(log, 1, 1, 1), |
| 146 | def_cmd(ls_cache, 0, 0), | 146 | def_cmd(ls_cache, 0, 0, 0), |
| 147 | def_cmd(objects, 1, 0), | 147 | def_cmd(objects, 1, 0, 0), |
| 148 | def_cmd(patch, 1, 0), | 148 | def_cmd(patch, 1, 0, 1), |
| 149 | def_cmd(plain, 1, 0), | 149 | def_cmd(plain, 1, 0, 0), |
| 150 | def_cmd(refs, 1, 1), | 150 | def_cmd(refs, 1, 1, 0), |
| 151 | def_cmd(repolist, 0, 0), | 151 | def_cmd(repolist, 0, 0, 0), |
| 152 | def_cmd(snapshot, 1, 0), | 152 | def_cmd(snapshot, 1, 0, 0), |
| 153 | def_cmd(stats, 1, 1), | 153 | def_cmd(stats, 1, 1, 1), |
| 154 | def_cmd(summary, 1, 1), | 154 | def_cmd(summary, 1, 1, 0), |
| 155 | def_cmd(tag, 1, 1), | 155 | def_cmd(tag, 1, 1, 0), |
| 156 | def_cmd(tree, 1, 1), | 156 | def_cmd(tree, 1, 1, 1), |
| 157 | }; | 157 | }; |
| 158 | int i; | 158 | int i; |
| 159 | 159 | ||
| @@ -7,7 +7,8 @@ struct cgit_cmd { | |||
| 7 | const char *name; | 7 | const char *name; |
| 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 | }; | 12 | }; |
| 12 | 13 | ||
| 13 | extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx); | 14 | extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx); |
