struct cgit_cmd: Differentiate between various usages of ctx.qry.path
For many commands/pages (e.g. 'tree', 'diff', 'plain', etc.), the ctx.qry.path argument is interpreted as a path within the "virtual" project directory structure. However, for some other commands (notably 'refs', and the clone-related commands) ctx.qry.path is used in a different context (as a more or less "real" path within the '.git' directory). This patch differentiates between these two usages of ctx.qry.path, by introducing a new variable - ctx.qry.vpath - which is equal to ctx.qry.path in the former case, and NULL in the latter. This will become useful in future patches when we want various pages and the links between them to preserve existing in-project paths. Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Tento commit je obsažen v:
rodič
0e34c6d1ef
revize
0ff143df70
6
cgit.c
6
cgit.c
@ -424,6 +424,12 @@ static void process_request(void *cbdata)
|
|||||||
return;
|
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) {
|
if (cmd->want_repo && !ctx->repo) {
|
||||||
cgit_print_http_headers(ctx);
|
cgit_print_http_headers(ctx);
|
||||||
cgit_print_docstart(ctx);
|
cgit_print_docstart(ctx);
|
||||||
|
1
cgit.h
1
cgit.h
@ -145,6 +145,7 @@ struct cgit_query {
|
|||||||
char *sort;
|
char *sort;
|
||||||
int showmsg;
|
int showmsg;
|
||||||
int ssdiff;
|
int ssdiff;
|
||||||
|
char *vpath;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cgit_config {
|
struct cgit_config {
|
||||||
|
42
cmd.c
42
cmd.c
@ -129,31 +129,31 @@ static void tree_fn(struct cgit_context *ctx)
|
|||||||
cgit_print_tree(ctx->qry.sha1, ctx->qry.path);
|
cgit_print_tree(ctx->qry.sha1, ctx->qry.path);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define def_cmd(name, want_repo, want_layout) \
|
#define def_cmd(name, want_repo, want_layout, want_vpath) \
|
||||||
{#name, name##_fn, want_repo, want_layout}
|
{#name, name##_fn, want_repo, want_layout, want_vpath}
|
||||||
|
|
||||||
struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
|
struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
|
||||||
{
|
{
|
||||||
static struct cgit_cmd cmds[] = {
|
static struct cgit_cmd cmds[] = {
|
||||||
def_cmd(HEAD, 1, 0),
|
def_cmd(HEAD, 1, 0, 0),
|
||||||
def_cmd(atom, 1, 0),
|
def_cmd(atom, 1, 0, 0),
|
||||||
def_cmd(about, 0, 1),
|
def_cmd(about, 0, 1, 0),
|
||||||
def_cmd(blob, 1, 0),
|
def_cmd(blob, 1, 0, 0),
|
||||||
def_cmd(commit, 1, 1),
|
def_cmd(commit, 1, 1, 1),
|
||||||
def_cmd(diff, 1, 1),
|
def_cmd(diff, 1, 1, 1),
|
||||||
def_cmd(info, 1, 0),
|
def_cmd(info, 1, 0, 0),
|
||||||
def_cmd(log, 1, 1),
|
def_cmd(log, 1, 1, 1),
|
||||||
def_cmd(ls_cache, 0, 0),
|
def_cmd(ls_cache, 0, 0, 0),
|
||||||
def_cmd(objects, 1, 0),
|
def_cmd(objects, 1, 0, 0),
|
||||||
def_cmd(patch, 1, 0),
|
def_cmd(patch, 1, 0, 1),
|
||||||
def_cmd(plain, 1, 0),
|
def_cmd(plain, 1, 0, 0),
|
||||||
def_cmd(refs, 1, 1),
|
def_cmd(refs, 1, 1, 0),
|
||||||
def_cmd(repolist, 0, 0),
|
def_cmd(repolist, 0, 0, 0),
|
||||||
def_cmd(snapshot, 1, 0),
|
def_cmd(snapshot, 1, 0, 0),
|
||||||
def_cmd(stats, 1, 1),
|
def_cmd(stats, 1, 1, 1),
|
||||||
def_cmd(summary, 1, 1),
|
def_cmd(summary, 1, 1, 0),
|
||||||
def_cmd(tag, 1, 1),
|
def_cmd(tag, 1, 1, 0),
|
||||||
def_cmd(tree, 1, 1),
|
def_cmd(tree, 1, 1, 1),
|
||||||
};
|
};
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
3
cmd.h
3
cmd.h
@ -7,7 +7,8 @@ struct cgit_cmd {
|
|||||||
const char *name;
|
const char *name;
|
||||||
cgit_cmd_fn fn;
|
cgit_cmd_fn fn;
|
||||||
unsigned int want_repo:1,
|
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);
|
extern struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx);
|
||||||
|
Načítá se…
Odkázat v novém úkolu
Zablokovat Uživatele