Enable url=value querystring parameter
This makes is possible to use repo-urls like '/pub/scm/git/git.git' and even add path specifications, like '/pub/scm/git/git.git/log/documentation'. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
43
parsing.c
43
parsing.c
@ -132,6 +132,49 @@ int cgit_parse_query(char *txt, configfn fn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* url syntax: [repo ['/' cmd [ '/' path]]]
|
||||
* repo: any valid repo url, may contain '/'
|
||||
* cmd: log | commit | diff | tree | view | blob | snapshot
|
||||
* path: any valid path, may contain '/'
|
||||
*
|
||||
*/
|
||||
void cgit_parse_url(const char *url)
|
||||
{
|
||||
char *cmd, *p;
|
||||
|
||||
cgit_repo = NULL;
|
||||
if (!url || url[0] == '\0')
|
||||
return;
|
||||
|
||||
cgit_repo = cgit_get_repoinfo(url);
|
||||
if (cgit_repo) {
|
||||
cgit_query_repo = cgit_repo->url;
|
||||
return;
|
||||
}
|
||||
|
||||
cmd = strchr(url, '/');
|
||||
while (!cgit_repo && cmd) {
|
||||
cmd[0] = '\0';
|
||||
cgit_repo = cgit_get_repoinfo(url);
|
||||
if (cgit_repo == NULL) {
|
||||
cmd[0] = '/';
|
||||
cmd = strchr(cmd + 1, '/');
|
||||
continue;
|
||||
}
|
||||
|
||||
cgit_query_repo = cgit_repo->url;
|
||||
p = strchr(cmd + 1, '/');
|
||||
if (p) {
|
||||
p[0] = '\0';
|
||||
cgit_query_path = xstrdup(p + 1);
|
||||
}
|
||||
cgit_cmd = cgit_get_cmd_index(cmd + 1);
|
||||
cgit_query_page = xstrdup(cmd + 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
char *substr(const char *head, const char *tail)
|
||||
{
|
||||
char *buf;
|
||||
|
Reference in New Issue
Block a user