author | Lars Hjemli <hjemli@gmail.com> | 2008-02-16 10:53:40 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-02-16 11:07:28 (UTC) |
commit | d14d77fe95c3b6224b40df9b101dded0deea913c (patch) (side-by-side diff) | |
tree | 7e0d9c8f2c0f86b8946aea0bb823085c33b164b3 | |
parent | e5ed227ef0da561e2bde8646ec816842392377ee (diff) | |
download | cgit-d14d77fe95c3b6224b40df9b101dded0deea913c.zip cgit-d14d77fe95c3b6224b40df9b101dded0deea913c.tar.gz cgit-d14d77fe95c3b6224b40df9b101dded0deea913c.tar.bz2 |
Introduce struct cgit_context
This struct will hold all the cgit runtime information currently found in
a multitude of global variables.
The first cleanup removes all querystring-related variables.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cache.c | 4 | ||||
-rw-r--r-- | cgit.c | 72 | ||||
-rw-r--r-- | cgit.h | 35 | ||||
-rw-r--r-- | parsing.c | 8 | ||||
-rw-r--r-- | shared.c | 43 | ||||
-rw-r--r-- | ui-commit.c | 14 | ||||
-rw-r--r-- | ui-diff.c | 6 | ||||
-rw-r--r-- | ui-log.c | 20 | ||||
-rw-r--r-- | ui-patch.c | 2 | ||||
-rw-r--r-- | ui-refs.c | 4 | ||||
-rw-r--r-- | ui-shared.c | 86 | ||||
-rw-r--r-- | ui-summary.c | 6 | ||||
-rw-r--r-- | ui-tree.c | 20 |
13 files changed, 156 insertions, 164 deletions
@@ -54,16 +54,16 @@ int cache_create_dirs() path = fmt("%s/%s", cgit_cache_root, cache_safe_filename(cgit_repo->url)); if (mkdir(path, S_IRWXU) && errno!=EEXIST) return 0; - if (cgit_query_page) { + if (ctx.qry.page) { path = fmt("%s/%s/%s", cgit_cache_root, cache_safe_filename(cgit_repo->url), - cgit_query_page); + ctx.qry.page); if (mkdir(path, S_IRWXU) && errno!=EEXIST) return 0; } return 1; } @@ -7,17 +7,17 @@ */ #include "cgit.h" static int cgit_prepare_cache(struct cacheitem *item) { - if (!cgit_repo && cgit_query_repo) { + if (!cgit_repo && ctx.qry.repo) { char *title = fmt("%s - %s", cgit_root_title, "Bad request"); cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); - cgit_print_error(fmt("Unknown repo: %s", cgit_query_repo)); + cgit_print_error(fmt("Unknown repo: %s", ctx.qry.repo)); cgit_print_docend(); return 0; } if (!cgit_repo) { item->name = xstrdup(fmt("%s/index.html", cgit_cache_root)); @@ -25,22 +25,22 @@ static int cgit_prepare_cache(struct cacheitem *item) return 1; } if (!cgit_cmd) { item->name = xstrdup(fmt("%s/%s/index.%s.html", cgit_cache_root, cache_safe_filename(cgit_repo->url), - cache_safe_filename(cgit_querystring))); + cache_safe_filename(ctx.qry.raw))); item->ttl = cgit_cache_repo_ttl; } else { item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root, cache_safe_filename(cgit_repo->url), - cgit_query_page, - cache_safe_filename(cgit_querystring))); - if (cgit_query_has_symref) + ctx.qry.page, + cache_safe_filename(ctx.qry.raw))); + if (ctx.qry.has_symref) item->ttl = cgit_cache_dynamic_ttl; - else if (cgit_query_has_sha1) + else if (ctx.qry.has_sha1) item->ttl = cgit_cache_static_ttl; else item->ttl = cgit_cache_repo_ttl; } return 1; } @@ -95,84 +95,84 @@ static void cgit_print_repo_page(struct cacheitem *item) } title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); show_search = 0; setenv("GIT_DIR", cgit_repo->path, 1); - if (!cgit_query_head) { - cgit_query_head = xstrdup(find_default_branch(cgit_repo)); - cgit_repo->defbranch = cgit_query_head; + if (!ctx.qry.head) { + ctx.qry.head = xstrdup(find_default_branch(cgit_repo)); + cgit_repo->defbranch = ctx.qry.head; } - if (!cgit_query_head) { + if (!ctx.qry.head) { cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); cgit_print_error("Repository seems to be empty"); cgit_print_docend(); return; } - if (get_sha1(cgit_query_head, sha1)) { - tmp = xstrdup(cgit_query_head); - cgit_query_head = cgit_repo->defbranch; + if (get_sha1(ctx.qry.head, sha1)) { + tmp = xstrdup(ctx.qry.head); + ctx.qry.head = cgit_repo->defbranch; cgit_print_docstart(title, item); cgit_print_pageheader(title, 0); cgit_print_error(fmt("Invalid branch: %s", tmp)); cgit_print_docend(); return; } if ((cgit_cmd == CMD_SNAPSHOT) && cgit_repo->snapshots) { - cgit_print_snapshot(item, cgit_query_head, cgit_query_sha1, + cgit_print_snapshot(item, ctx.qry.head, ctx.qry.sha1, cgit_repobasename(cgit_repo->url), - cgit_query_path, + ctx.qry.path, cgit_repo->snapshots ); return; } if (cgit_cmd == CMD_PATCH) { - cgit_print_patch(cgit_query_sha1, item); + cgit_print_patch(ctx.qry.sha1, item); return; } if (cgit_cmd == CMD_BLOB) { - cgit_print_blob(item, cgit_query_sha1, cgit_query_path); + cgit_print_blob(item, ctx.qry.sha1, ctx.qry.path); return; } show_search = (cgit_cmd == CMD_LOG); cgit_print_docstart(title, item); if (!cgit_cmd) { cgit_print_pageheader("summary", show_search); cgit_print_summary(); cgit_print_docend(); return; } - cgit_print_pageheader(cgit_query_page, show_search); + cgit_print_pageheader(ctx.qry.page, show_search); switch(cgit_cmd) { case CMD_LOG: - cgit_print_log(cgit_query_sha1, cgit_query_ofs, - cgit_max_commit_count, cgit_query_grep, cgit_query_search, - cgit_query_path, 1); + cgit_print_log(ctx.qry.sha1, ctx.qry.ofs, + cgit_max_commit_count, ctx.qry.grep, ctx.qry.search, + ctx.qry.path, 1); break; case CMD_TREE: - cgit_print_tree(cgit_query_sha1, cgit_query_path); + cgit_print_tree(ctx.qry.sha1, ctx.qry.path); break; case CMD_COMMIT: - cgit_print_commit(cgit_query_sha1); + cgit_print_commit(ctx.qry.sha1); break; case CMD_REFS: cgit_print_refs(); break; case CMD_TAG: - cgit_print_tag(cgit_query_sha1); + cgit_print_tag(ctx.qry.sha1); break; case CMD_DIFF: - cgit_print_diff(cgit_query_sha1, cgit_query_sha2, cgit_query_path); + cgit_print_diff(ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path); break; default: cgit_print_error("Invalid request"); } cgit_print_docend(); } @@ -261,30 +261,30 @@ static void cgit_parse_args(int argc, const char **argv) cgit_cache_root = xstrdup(argv[i]+8); } if (!strcmp(argv[i], "--nocache")) { cgit_nocache = 1; } if (!strncmp(argv[i], "--query=", 8)) { - cgit_querystring = xstrdup(argv[i]+8); + ctx.qry.raw = xstrdup(argv[i]+8); } if (!strncmp(argv[i], "--repo=", 7)) { - cgit_query_repo = xstrdup(argv[i]+7); + ctx.qry.repo = xstrdup(argv[i]+7); } if (!strncmp(argv[i], "--page=", 7)) { - cgit_query_page = xstrdup(argv[i]+7); + ctx.qry.page = xstrdup(argv[i]+7); } if (!strncmp(argv[i], "--head=", 7)) { - cgit_query_head = xstrdup(argv[i]+7); - cgit_query_has_symref = 1; + ctx.qry.head = xstrdup(argv[i]+7); + ctx.qry.has_symref = 1; } if (!strncmp(argv[i], "--sha1=", 7)) { - cgit_query_sha1 = xstrdup(argv[i]+7); - cgit_query_has_sha1 = 1; + ctx.qry.sha1 = xstrdup(argv[i]+7); + ctx.qry.has_sha1 = 1; } if (!strncmp(argv[i], "--ofs=", 6)) { - cgit_query_ofs = atoi(argv[i]+6); + ctx.qry.ofs = atoi(argv[i]+6); } } } int main(int argc, const char **argv) { @@ -300,15 +300,15 @@ int main(int argc, const char **argv) cgit_read_config(cgit_config_env ? cgit_config_env : CGIT_CONFIG, cgit_global_config_cb); cgit_repo = NULL; if (getenv("SCRIPT_NAME")) cgit_script_name = xstrdup(getenv("SCRIPT_NAME")); if (getenv("QUERY_STRING")) - cgit_querystring = xstrdup(getenv("QUERY_STRING")); + ctx.qry.raw = xstrdup(getenv("QUERY_STRING")); cgit_parse_args(argc, argv); - cgit_parse_query(cgit_querystring, cgit_querystring_cb); + cgit_parse_query(ctx.qry.raw, cgit_querystring_cb); if (!cgit_prepare_cache(&item)) return 0; if (cgit_nocache) { cgit_fill_cache(&item, 0); } else { cgit_check_cache(&item); @@ -120,16 +120,37 @@ struct refinfo { struct reflist { struct refinfo **refs; int alloc; int count; }; +struct cgit_query { + int has_symref; + int has_sha1; + char *raw; + char *repo; + char *page; + char *search; + char *grep; + char *head; + char *sha1; + char *sha2; + char *path; + char *name; + int ofs; +}; + +struct cgit_context { + struct cgit_query qry; +}; + extern const char *cgit_version; extern struct repolist cgit_repolist; extern struct repoinfo *cgit_repo; +extern struct cgit_context ctx; extern int cgit_cmd; extern char *cgit_root_title; extern char *cgit_css; extern char *cgit_logo; extern char *cgit_index_header; @@ -160,26 +181,12 @@ extern int cgit_summary_tags; extern int cgit_summary_branches; extern int cgit_max_msg_len; extern int cgit_max_repodesc_len; extern int cgit_max_commit_count; -extern int cgit_query_has_symref; -extern int cgit_query_has_sha1; - -extern char *cgit_querystring; -extern char *cgit_query_repo; -extern char *cgit_query_page; -extern char *cgit_query_search; -extern char *cgit_query_grep; -extern char *cgit_query_head; -extern char *cgit_query_sha1; -extern char *cgit_query_sha2; -extern char *cgit_query_path; -extern char *cgit_query_name; -extern int cgit_query_ofs; extern int htmlfd; extern int cgit_get_cmd_index(const char *cmd); extern struct repoinfo *cgit_get_repoinfo(const char *url); extern void cgit_global_config_cb(const char *name, const char *value); @@ -146,13 +146,13 @@ void cgit_parse_url(const char *url) cgit_repo = NULL; if (!url || url[0] == '\0') return; cgit_repo = cgit_get_repoinfo(url); if (cgit_repo) { - cgit_query_repo = cgit_repo->url; + ctx.qry.repo = cgit_repo->url; return; } cmd = strchr(url, '/'); while (!cgit_repo && cmd) { cmd[0] = '\0'; @@ -160,21 +160,21 @@ void cgit_parse_url(const char *url) if (cgit_repo == NULL) { cmd[0] = '/'; cmd = strchr(cmd + 1, '/'); continue; } - cgit_query_repo = cgit_repo->url; + ctx.qry.repo = cgit_repo->url; p = strchr(cmd + 1, '/'); if (p) { p[0] = '\0'; if (p[1]) - cgit_query_path = trim_end(p + 1, '/'); + ctx.qry.path = trim_end(p + 1, '/'); } cgit_cmd = cgit_get_cmd_index(cmd + 1); - cgit_query_page = xstrdup(cmd + 1); + ctx.qry.page = xstrdup(cmd + 1); return; } } char *substr(const char *head, const char *tail) { @@ -7,12 +7,13 @@ */ #include "cgit.h" struct repolist cgit_repolist; struct repoinfo *cgit_repo; +struct cgit_context ctx; int cgit_cmd; const char *cgit_version = CGIT_VERSION; char *cgit_root_title = "Git repository browser"; char *cgit_css = "/cgit.css"; @@ -46,30 +47,14 @@ int cgit_summary_branches = 0; int cgit_renamelimit = -1; int cgit_max_msg_len = 60; int cgit_max_repodesc_len = 60; int cgit_max_commit_count = 50; -int cgit_query_has_symref = 0; -int cgit_query_has_sha1 = 0; - -char *cgit_querystring = NULL; -char *cgit_query_repo = NULL; -char *cgit_query_page = NULL; -char *cgit_query_head = NULL; -char *cgit_query_search = NULL; -char *cgit_query_grep = NULL; -char *cgit_query_sha1 = NULL; -char *cgit_query_sha2 = NULL; -char *cgit_query_path = NULL; -char *cgit_query_name = NULL; -int cgit_query_ofs = 0; - int htmlfd = 0; - int cgit_get_cmd_index(const char *cmd) { static char *cmds[] = {"log", "commit", "diff", "tree", "blob", "snapshot", "tag", "refs", "patch", NULL}; int i; @@ -236,38 +221,38 @@ void cgit_global_config_cb(const char *name, const char *value) cgit_read_config(value, cgit_global_config_cb); } void cgit_querystring_cb(const char *name, const char *value) { if (!strcmp(name,"r")) { - cgit_query_repo = xstrdup(value); + ctx.qry.repo = xstrdup(value); cgit_repo = cgit_get_repoinfo(value); } else if (!strcmp(name, "p")) { - cgit_query_page = xstrdup(value); + ctx.qry.page = xstrdup(value); cgit_cmd = cgit_get_cmd_index(value); } else if (!strcmp(name, "url")) { cgit_parse_url(value); } else if (!strcmp(name, "qt")) { - cgit_query_grep = xstrdup(value); + ctx.qry.grep = xstrdup(value); } else if (!strcmp(name, "q")) { - cgit_query_search = xstrdup(value); + ctx.qry.search = xstrdup(value); } else if (!strcmp(name, "h")) { - cgit_query_head = xstrdup(value); - cgit_query_has_symref = 1; + ctx.qry.head = xstrdup(value); + ctx.qry.has_symref = 1; } else if (!strcmp(name, "id")) { - cgit_query_sha1 = xstrdup(value); - cgit_query_has_sha1 = 1; + ctx.qry.sha1 = xstrdup(value); + ctx.qry.has_sha1 = 1; } else if (!strcmp(name, "id2")) { - cgit_query_sha2 = xstrdup(value); - cgit_query_has_sha1 = 1; + ctx.qry.sha2 = xstrdup(value); + ctx.qry.has_sha1 = 1; } else if (!strcmp(name, "ofs")) { - cgit_query_ofs = atoi(value); + ctx.qry.ofs = atoi(value); } else if (!strcmp(name, "path")) { - cgit_query_path = trim_end(value, '/'); + ctx.qry.path = trim_end(value, '/'); } else if (!strcmp(name, "name")) { - cgit_query_name = xstrdup(value); + ctx.qry.name = xstrdup(value); } } void *cgit_free_commitinfo(struct commitinfo *info) { free(info->author); diff --git a/ui-commit.c b/ui-commit.c index bd55a33..3b0919b 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -72,13 +72,13 @@ void print_fileinfo(struct fileinfo *info) !is_null_sha1(info->new_sha1)) { html("<span class='modechange'>["); html_filemode(info->old_mode); html("]</span>"); } htmlf("</td><td class='%s'>", class); - cgit_diff_link(info->new_path, NULL, NULL, cgit_query_head, curr_rev, + cgit_diff_link(info->new_path, NULL, NULL, ctx.qry.head, curr_rev, NULL, info->new_path); if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED) htmlf(" (%s from %s)", info->status == DIFF_STATUS_COPIED ? "copied" : "renamed", info->old_path); html("</td><td class='right'>"); @@ -140,13 +140,13 @@ void cgit_print_commit(char *hex) struct commit_list *p; unsigned char sha1[20]; char *tmp; int i; if (!hex) - hex = cgit_query_head; + hex = ctx.qry.head; curr_rev = hex; if (get_sha1(hex, sha1)) { cgit_print_error(fmt("Bad object id: %s", hex)); return; } @@ -172,34 +172,34 @@ void cgit_print_commit(char *hex) html("</td><td class='right'>"); cgit_print_date(info->committer_date, FMT_LONGDATE); html("</td></tr>\n"); html("<tr><th>tree</th><td colspan='2' class='sha1'>"); tmp = xstrdup(hex); cgit_tree_link(sha1_to_hex(commit->tree->object.sha1), NULL, NULL, - cgit_query_head, tmp, NULL); + ctx.qry.head, tmp, NULL); html("</td></tr>\n"); for (p = commit->parents; p ; p = p->next) { parent = lookup_commit_reference(p->item->object.sha1); if (!parent) { html("<tr><td colspan='3'>"); cgit_print_error("Error reading parent commit"); html("</td></tr>"); continue; } html("<tr><th>parent</th>" "<td colspan='2' class='sha1'>"); cgit_commit_link(sha1_to_hex(p->item->object.sha1), NULL, NULL, - cgit_query_head, sha1_to_hex(p->item->object.sha1)); + ctx.qry.head, sha1_to_hex(p->item->object.sha1)); html(" ("); - cgit_diff_link("diff", NULL, NULL, cgit_query_head, hex, + cgit_diff_link("diff", NULL, NULL, ctx.qry.head, hex, sha1_to_hex(p->item->object.sha1), NULL); html(")</td></tr>"); } if (cgit_repo->snapshots) { html("<tr><th>download</th><td colspan='2' class='sha1'>"); - cgit_print_snapshot_links(cgit_query_repo, cgit_query_head, + cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head, hex, cgit_repo->snapshots); html("</td></tr>"); } html("</table>\n"); html("<div class='commit-subject'>"); html_txt(info->subject); @@ -215,12 +215,12 @@ void cgit_print_commit(char *hex) for(i = 0; i<files; i++) print_fileinfo(&items[i]); html("</table>"); html("<div class='diffstat-summary'>"); htmlf("%d files changed, %d insertions, %d deletions (", files, total_adds, total_rems); - cgit_diff_link("show diff", NULL, NULL, cgit_query_head, hex, + cgit_diff_link("show diff", NULL, NULL, ctx.qry.head, hex, NULL, NULL); html(")</div>"); } cgit_free_commitinfo(info); } @@ -68,19 +68,19 @@ static void header(unsigned char *sha1, char *path1, int mode1, htmlf(" %.6o", mode1); if (mode2 != mode1) htmlf("..%.6o", mode2); } html("<br/>--- a/"); if (mode1 != 0) - cgit_tree_link(path1, NULL, NULL, cgit_query_head, + cgit_tree_link(path1, NULL, NULL, ctx.qry.head, sha1_to_hex(old_rev_sha1), path1); else html_txt(path1); html("<br/>+++ b/"); if (mode2 != 0) - cgit_tree_link(path2, NULL, NULL, cgit_query_head, + cgit_tree_link(path2, NULL, NULL, ctx.qry.head, sha1_to_hex(new_rev_sha1), path2); else html_txt(path2); } html("</div>"); } @@ -104,13 +104,13 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefi { enum object_type type; unsigned long size; struct commit *commit, *commit2; if (!new_rev) - new_rev = cgit_query_head; + new_rev = ctx.qry.head; get_sha1(new_rev, new_rev_sha1); type = sha1_object_info(new_rev_sha1, &size); if (type == OBJ_BAD) { cgit_print_error(fmt("Bad object name: %s", new_rev)); return; } @@ -34,13 +34,13 @@ void print_commit(struct commit *commit) struct commitinfo *info; info = cgit_parse_commit(commit); html("<tr><td>"); cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE); html("</td><td>"); - cgit_commit_link(info->subject, NULL, NULL, cgit_query_head, + cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, sha1_to_hex(commit->object.sha1)); if (cgit_repo->enable_log_filecount) { files = 0; add_lines = 0; rem_lines = 0; cgit_diff_commit(commit, inspect_files); @@ -64,13 +64,13 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern struct commit *commit; const char *argv[] = {NULL, tip, NULL, NULL, NULL}; int argc = 2; int i; if (!tip) - argv[1] = cgit_query_head; + argv[1] = ctx.qry.head; if (grep && pattern && (!strcmp(grep, "grep") || !strcmp(grep, "author") || !strcmp(grep, "committer"))) argv[argc++] = fmt("--%s=%s", grep, pattern); @@ -120,21 +120,21 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern } html("</table>\n"); if (pager) { html("<div class='pager'>"); if (ofs > 0) { - cgit_log_link("[prev]", NULL, NULL, cgit_query_head, - cgit_query_sha1, cgit_query_path, - ofs - cnt, cgit_query_grep, - cgit_query_search); + cgit_log_link("[prev]", NULL, NULL, ctx.qry.head, + ctx.qry.sha1, ctx.qry.path, + ofs - cnt, ctx.qry.grep, + ctx.qry.search); html(" "); } if ((commit = get_revision(&rev)) != NULL) { - cgit_log_link("[next]", NULL, NULL, cgit_query_head, - cgit_query_sha1, cgit_query_path, - ofs + cnt, cgit_query_grep, - cgit_query_search); + cgit_log_link("[next]", NULL, NULL, ctx.qry.head, + ctx.qry.sha1, ctx.qry.path, + ofs + cnt, ctx.qry.grep, + ctx.qry.search); } html("</div>"); } } @@ -73,13 +73,13 @@ void cgit_print_patch(char *hex, struct cacheitem *item) struct commit *commit; struct commitinfo *info; unsigned char sha1[20], old_sha1[20]; char *patchname; if (!hex) - hex = cgit_query_head; + hex = ctx.qry.head; if (get_sha1(hex, sha1)) { cgit_print_error(fmt("Bad object id: %s", hex)); return; } commit = lookup_commit_reference(sha1); @@ -13,15 +13,15 @@ void cgit_print_refs() { html("<table class='list nowrap'>"); - if (cgit_query_path && !strncmp(cgit_query_path, "heads", 5)) + if (ctx.qry.path && !strncmp(ctx.qry.path, "heads", 5)) cgit_print_branches(0); - else if (cgit_query_path && !strncmp(cgit_query_path, "tags", 4)) + else if (ctx.qry.path && !strncmp(ctx.qry.path, "tags", 4)) cgit_print_tags(0); else { cgit_print_branches(0); html("<tr class='nohover'><td colspan='4'> </td></tr>"); cgit_print_tags(0); } diff --git a/ui-shared.c b/ui-shared.c index 60aa2e3..6a41fb0 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -109,16 +109,16 @@ const char *cgit_repobasename(const char *reponame) } char *cgit_currurl() { if (!cgit_virtual_root) return cgit_script_name; - else if (cgit_query_page) - return fmt("%s/%s/%s/", cgit_virtual_root, cgit_query_repo, cgit_query_page); - else if (cgit_query_repo) - return fmt("%s/%s/", cgit_virtual_root, cgit_query_repo); + else if (ctx.qry.page) + return fmt("%s/%s/%s/", cgit_virtual_root, ctx.qry.repo, ctx.qry.page); + else if (ctx.qry.repo) + return fmt("%s/%s/", cgit_virtual_root, ctx.qry.repo); else return fmt("%s/", cgit_virtual_root); } static char *repolink(char *title, char *class, char *page, char *head, char *path) @@ -176,13 +176,13 @@ static char *repolink(char *title, char *class, char *page, char *head, static void reporevlink(char *page, char *name, char *title, char *class, char *head, char *rev, char *path) { char *delim; delim = repolink(title, class, page, head, path); - if (rev && strcmp(rev, cgit_query_head)) { + if (rev && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_attr(rev); } html("'>"); html_txt(name); @@ -198,13 +198,13 @@ void cgit_tree_link(char *name, char *title, char *class, char *head, void cgit_log_link(char *name, char *title, char *class, char *head, char *rev, char *path, int ofs, char *grep, char *pattern) { char *delim; delim = repolink(title, class, "log", head, path); - if (rev && strcmp(rev, cgit_query_head)) { + if (rev && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_attr(rev); delim = "&"; } if (grep && pattern) { @@ -253,13 +253,13 @@ void cgit_snapshot_link(char *name, char *title, char *class, char *head, void cgit_diff_link(char *name, char *title, char *class, char *head, char *new_rev, char *old_rev, char *path) { char *delim; delim = repolink(title, class, "diff", head, path); - if (new_rev && strcmp(new_rev, cgit_query_head)) { + if (new_rev && strcmp(new_rev, ctx.qry.head)) { html(delim); html("id="); html_attr(new_rev); delim = "&"; } if (old_rev) { @@ -281,26 +281,26 @@ void cgit_patch_link(char *name, char *title, char *class, char *head, void cgit_object_link(struct object *obj) { char *page, *arg, *url; if (obj->type == OBJ_COMMIT) { cgit_commit_link(fmt("commit %s", sha1_to_hex(obj->sha1)), NULL, NULL, - cgit_query_head, sha1_to_hex(obj->sha1)); + ctx.qry.head, sha1_to_hex(obj->sha1)); return; } else if (obj->type == OBJ_TREE) { page = "tree"; arg = "id"; } else if (obj->type == OBJ_TAG) { page = "tag"; arg = "id"; } else { page = "blob"; arg = "id"; } - url = cgit_pageurl(cgit_query_repo, page, + url = cgit_pageurl(ctx.qry.repo, page, fmt("%s=%s", arg, sha1_to_hex(obj->sha1))); html_link_open(url, NULL, NULL); htmlf("%s %s", typename(obj->type), sha1_to_hex(obj->sha1)); html_link_close(); } @@ -389,13 +389,13 @@ void cgit_print_docend() } int print_branch_option(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { char *name = (char *)refname; - html_option(name, name, cgit_query_head); + html_option(name, name, ctx.qry.head); return 0; } int print_archive_ref(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { @@ -423,13 +423,13 @@ int print_archive_ref(const char *refname, const unsigned char *sha1, hashcpy(fileid, sha1); } if (!*header) { html("<h1>download</h1>\n"); *header = 1; } - url = cgit_pageurl(cgit_query_repo, "blob", + url = cgit_pageurl(ctx.qry.repo, "blob", fmt("id=%s&path=%s", sha1_to_hex(fileid), buf)); html_link_open(url, NULL, "menu"); html_txt(strlpart(buf, 20)); html_link_close(); return 0; @@ -437,31 +437,31 @@ int print_archive_ref(const char *refname, const unsigned char *sha1, void add_hidden_formfields(int incl_head, int incl_search, char *page) { char *url; if (!cgit_virtual_root) { - url = fmt("%s/%s", cgit_query_repo, page); - if (cgit_query_path) - url = fmt("%s/%s", url, cgit_query_path); + url = fmt("%s/%s", ctx.qry.repo, page); + if (ctx.qry.path) + url = fmt("%s/%s", url, ctx.qry.path); html_hidden("url", url); } - if (incl_head && strcmp(cgit_query_head, cgit_repo->defbranch)) - html_hidden("h", cgit_query_head); + if (incl_head && strcmp(ctx.qry.head, cgit_repo->defbranch)) + html_hidden("h", ctx.qry.head); - if (cgit_query_sha1) - html_hidden("id", cgit_query_sha1); - if (cgit_query_sha2) - html_hidden("id2", cgit_query_sha2); + if (ctx.qry.sha1) + html_hidden("id", ctx.qry.sha1); + if (ctx.qry.sha2) + html_hidden("id2", ctx.qry.sha2); if (incl_search) { - if (cgit_query_grep) - html_hidden("qt", cgit_query_grep); - if (cgit_query_search) - html_hidden("q", cgit_query_search); + if (ctx.qry.grep) + html_hidden("qt", ctx.qry.grep); + if (ctx.qry.search) + html_hidden("q", ctx.qry.search); } } void cgit_print_pageheader(char *title, int show_search) { static const char *default_info = "This is cgit, a fast webinterface for git repositories"; @@ -473,34 +473,34 @@ void cgit_print_pageheader(char *title, int show_search) html("<table class='sidebar' cellspacing='0' summary=''>\n"); html("<tr><td class='sidebar'>\n<a href='"); html_attr(cgit_rooturl()); htmlf("'><img src='%s' alt='cgit'/></a>\n", cgit_logo); html("</td></tr>\n<tr><td class='sidebar'>\n"); - if (cgit_query_repo) { + if (ctx.qry.repo) { html("<h1 class='first'>"); html_txt(strrpart(cgit_repo->name, 20)); html("</h1>\n"); html_txt(cgit_repo->desc); if (cgit_repo->owner) { html("<h1>owner</h1>\n"); html_txt(cgit_repo->owner); } html("<h1>navigate</h1>\n"); - reporevlink(NULL, "summary", NULL, "menu", cgit_query_head, + reporevlink(NULL, "summary", NULL, "menu", ctx.qry.head, NULL, NULL); - cgit_log_link("log", NULL, "menu", cgit_query_head, NULL, NULL, + cgit_log_link("log", NULL, "menu", ctx.qry.head, NULL, NULL, 0, NULL, NULL); - cgit_tree_link("tree", NULL, "menu", cgit_query_head, - cgit_query_sha1, NULL); - cgit_commit_link("commit", NULL, "menu", cgit_query_head, - cgit_query_sha1); - cgit_diff_link("diff", NULL, "menu", cgit_query_head, - cgit_query_sha1, cgit_query_sha2, NULL); - cgit_patch_link("patch", NULL, "menu", cgit_query_head, - cgit_query_sha1); + cgit_tree_link("tree", NULL, "menu", ctx.qry.head, + ctx.qry.sha1, NULL); + cgit_commit_link("commit", NULL, "menu", ctx.qry.head, + ctx.qry.sha1); + cgit_diff_link("diff", NULL, "menu", ctx.qry.head, + ctx.qry.sha1, ctx.qry.sha2, NULL); + cgit_patch_link("patch", NULL, "menu", ctx.qry.head, + ctx.qry.sha1); for_each_ref(print_archive_ref, &header); if (cgit_repo->clone_url || cgit_clone_prefix) { html("<h1>clone</h1>\n"); if (cgit_repo->clone_url) @@ -516,36 +516,36 @@ void cgit_print_pageheader(char *title, int show_search) html_txt(strrpart(url, 20)); html("</a>\n"); } html("<h1>branch</h1>\n"); html("<form method='get' action=''>\n"); - add_hidden_formfields(0, 1, cgit_query_page); + add_hidden_formfields(0, 1, ctx.qry.page); // html("<table summary='branch selector' class='grid'><tr><td id='branch-dropdown-cell'>"); html("<select name='h' onchange='this.form.submit();'>\n"); - for_each_branch_ref(print_branch_option, cgit_query_head); + for_each_branch_ref(print_branch_option, ctx.qry.head); html("</select>\n"); // html("</td><td>"); html("<noscript><input type='submit' id='switch-btn' value='switch'/></noscript>\n"); // html("</td></tr></table>"); html("</form>\n"); html("<h1>search</h1>\n"); html("<form method='get' action='"); if (cgit_virtual_root) - html_attr(cgit_fileurl(cgit_query_repo, "log", - cgit_query_path, NULL)); + html_attr(cgit_fileurl(ctx.qry.repo, "log", + ctx.qry.path, NULL)); html("'>\n"); add_hidden_formfields(1, 0, "log"); html("<select name='qt'>\n"); - html_option("grep", "log msg", cgit_query_grep); - html_option("author", "author", cgit_query_grep); - html_option("committer", "committer", cgit_query_grep); + html_option("grep", "log msg", ctx.qry.grep); + html_option("author", "author", ctx.qry.grep); + html_option("committer", "committer", ctx.qry.grep); html("</select>\n"); html("<input class='txt' type='text' name='q' value='"); - html_attr(cgit_query_search); + html_attr(ctx.qry.search); html("'/>\n"); html("</form>\n"); } else { if (!cgit_index_info || html_include(cgit_index_info)) html(default_info); } diff --git a/ui-summary.c b/ui-summary.c index b96414e..bbd4464 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -91,13 +91,13 @@ static int print_tag(struct refinfo *ref) if (ref->object->type == OBJ_TAG) { tag = (struct tag *)ref->object; info = ref->tag; if (!tag || !info) return 1; html("<tr><td>"); - url = cgit_pageurl(cgit_query_repo, "tag", + url = cgit_pageurl(ctx.qry.repo, "tag", fmt("id=%s", name)); html_link_open(url, NULL, NULL); html_txt(name); html_link_close(); html("</td><td>"); if (info->tagger_date > 0) @@ -120,13 +120,13 @@ static int print_tag(struct refinfo *ref) return 0; } static void print_refs_link(char *path) { html("<tr class='nohover'><td colspan='4'>"); - cgit_refs_link("[...]", NULL, NULL, cgit_query_head, NULL, path); + cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path); html("</td></tr>"); } void cgit_print_branches(int maxcount) { struct reflist list; @@ -185,13 +185,13 @@ void cgit_print_summary() if (cgit_repo->readme) { html("<div id='summary'>"); html_include(cgit_repo->readme); html("</div>"); } if (cgit_summary_log > 0) - cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, + cgit_print_log(ctx.qry.head, 0, cgit_summary_log, NULL, NULL, NULL, 0); html("<table summary='repository info' class='list nowrap'>"); if (cgit_summary_log > 0) html("<tr class='nohover'><td colspan='4'> </td></tr>"); cgit_print_branches(cgit_summary_branches); html("<tr class='nohover'><td colspan='4'> </td></tr>"); @@ -31,13 +31,13 @@ static void print_object(const unsigned char *sha1, char *path) cgit_print_error(fmt("Error reading object %s", sha1_to_hex(sha1))); return; } html(" blob: <a href='"); - html_attr(cgit_pageurl(cgit_query_repo, "blob", fmt("id=%s", sha1_to_hex(sha1)))); + html_attr(cgit_pageurl(ctx.qry.repo, "blob", fmt("id=%s", sha1_to_hex(sha1)))); htmlf("'>%s</a>",sha1_to_hex(sha1)); html("<table summary='blob content' class='blob'>\n"); idx = 0; start = 0; lineno = 0; @@ -64,14 +64,14 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, char *name; char *fullpath; enum object_type type; unsigned long size = 0; name = xstrdup(pathname); - fullpath = fmt("%s%s%s", cgit_query_path ? cgit_query_path : "", - cgit_query_path ? "/" : "", name); + fullpath = fmt("%s%s%s", ctx.qry.path ? ctx.qry.path : "", + ctx.qry.path ? "/" : "", name); type = sha1_object_info(sha1, &size); if (type == OBJ_BAD && !S_ISGITLINK(mode)) { htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>", name, sha1_to_hex(sha1)); @@ -87,22 +87,22 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, name, sha1_to_hex(sha1))); html("'>"); html_txt(name); html("</a>"); } else if (S_ISDIR(mode)) { - cgit_tree_link(name, NULL, "ls-dir", cgit_query_head, + cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, curr_rev, fullpath); } else { - cgit_tree_link(name, NULL, "ls-blob", cgit_query_head, + cgit_tree_link(name, NULL, "ls-blob", ctx.qry.head, curr_rev, fullpath); } htmlf("</td><td class='ls-size'>%li</td>", size); html("<td>"); - cgit_log_link("log", NULL, "button", cgit_query_head, curr_rev, + cgit_log_link("log", NULL, "button", ctx.qry.head, curr_rev, fullpath, 0, NULL, NULL); html("</td></tr>\n"); free(name); return 0; } @@ -150,16 +150,16 @@ static int walk_tree(const unsigned char *sha1, const char *base, int baselen, static char buffer[PATH_MAX]; char *url; if (state == 0) { memcpy(buffer, base, baselen); strcpy(buffer+baselen, pathname); - url = cgit_pageurl(cgit_query_repo, "tree", + url = cgit_pageurl(ctx.qry.repo, "tree", fmt("h=%s&path=%s", curr_rev, buffer)); html("/"); - cgit_tree_link(xstrdup(pathname), NULL, NULL, cgit_query_head, + cgit_tree_link(xstrdup(pathname), NULL, NULL, ctx.qry.head, curr_rev, buffer); if (strcmp(match_path, buffer)) return READ_TREE_RECURSIVE; if (S_ISDIR(mode)) { @@ -185,13 +185,13 @@ void cgit_print_tree(const char *rev, char *path) { unsigned char sha1[20]; struct commit *commit; const char *paths[] = {path, NULL}; if (!rev) - rev = cgit_query_head; + rev = ctx.qry.head; curr_rev = xstrdup(rev); if (get_sha1(rev, sha1)) { cgit_print_error(fmt("Invalid revision name: %s", rev)); return; } @@ -199,13 +199,13 @@ void cgit_print_tree(const char *rev, char *path) if (!commit || parse_commit(commit)) { cgit_print_error(fmt("Invalid commit reference: %s", rev)); return; } html("path: <a href='"); - html_attr(cgit_pageurl(cgit_query_repo, "tree", fmt("h=%s", rev))); + html_attr(cgit_pageurl(ctx.qry.repo, "tree", fmt("h=%s", rev))); html("'>root</a>"); if (path == NULL) { ls_tree(commit->tree->object.sha1, NULL); return; } |