diff options
author | Lars Hjemli <hjemli@gmail.com> | 2007-05-18 03:00:54 +0200 |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-05-18 22:51:01 +0200 |
commit | 30ccdcaa74ebc0aab2b7843b0db8251d0ddf56de (patch) | |
tree | efb3eddd091117281d5592c9eab44bc63121edf6 /parsing.c | |
parent | Add lookup-function for valid repo commands (diff) | |
download | cgit-pink-30ccdcaa74ebc0aab2b7843b0db8251d0ddf56de.tar.gz cgit-pink-30ccdcaa74ebc0aab2b7843b0db8251d0ddf56de.zip |
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>
Diffstat (limited to '')
-rw-r--r-- | parsing.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/parsing.c b/parsing.c index 36b0f0c..a028625 100644 --- a/parsing.c +++ b/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; |