diff options
Diffstat (limited to '')
-rw-r--r-- | cgit.c | 67 | ||||
-rw-r--r-- | cgit.css | 64 |
2 files changed, 97 insertions, 34 deletions
@@ -45,13 +45,44 @@ static int cgit_prepare_cache(struct cacheitem *item) return 1; } +struct refmatch { + char *req_ref; + char *first_ref; + int match; +}; + +int find_current_ref(const char *refname, const unsigned char *sha1, + int flags, void *cb_data) +{ + struct refmatch *info; + + info = (struct refmatch *)cb_data; + if (!strcmp(refname, info->req_ref)) + info->match = 1; + if (!info->first_ref) + info->first_ref = xstrdup(refname); + return info->match; +} + +char *find_default_branch(struct repoinfo *repo) +{ + struct refmatch info; + + info.req_ref = repo->defbranch; + info.first_ref = NULL; + info.match = 0; + for_each_branch_ref(find_current_ref, &info); + if (info.match) + return info.req_ref; + else + return info.first_ref; +} + static void cgit_print_repo_page(struct cacheitem *item) { - char *title; + char *title, *tmp; int show_search; - - if (!cgit_query_head) - cgit_query_head = cgit_repo->defbranch; + unsigned char sha1[20]; if (chdir(cgit_repo->path)) { title = fmt("%s - %s", cgit_root_title, "Bad request"); @@ -67,6 +98,29 @@ static void cgit_print_repo_page(struct cacheitem *item) 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 (!cgit_query_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; + 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_repobasename(cgit_repo->url), @@ -75,6 +129,11 @@ static void cgit_print_repo_page(struct cacheitem *item) return; } + if (cgit_cmd == CMD_PATCH) { + cgit_print_patch(cgit_query_sha1, item); + return; + } + if (cgit_cmd == CMD_BLOB) { cgit_print_blob(item, cgit_query_sha1, cgit_query_path); return; @@ -8,7 +8,7 @@ body { font-size: 10pt; color: #333; background: white; - padding-left: 4px; + padding: 4px; } table { @@ -78,29 +78,39 @@ img { border: none; } -div#sidebar { +table#layout { + border-collapse: collapse; + border: none; + margin: 0px; +} + +td#sidebar { vertical-align: top; width: 162px; padding: 0px 0px 0px 0px; - margin: 4px; - float: left; + margin: 0px; } -div#logo { +td#sidebar table { + border-collapse: separate; + border-spacing: 0px; margin: 0px; - padding: 4px 0px 4px 0px; - text-align: center; + padding: 0px; background-color: #ccc; +} + +td#sidebar table.sidebar td.sidebar { + padding: 4px; border-top: solid 1px #eee; border-left: solid 1px #eee; border-right: solid 1px #aaa; border-bottom: solid 1px #aaa; } -div#sidebar div.infobox { - margin: 0px 0px 0px 0px; - padding: 0.5em; - text-align: left; +div#logo { + margin: 0px; + padding: 4px 0px 4px 0px; + text-align: center; background-color: #ccc; border-top: solid 1px #eee; border-left: solid 1px #eee; @@ -108,50 +118,44 @@ div#sidebar div.infobox { border-bottom: solid 1px #aaa; } -div#sidebar div.infobox h1 { - font-size: 11pt; +td#sidebar h1 { + font-size: 10pt; font-weight: bold; - margin: 0px; + margin: 8px 0px 0px 0px; } -div#sidebar div.infobox a.menu { +td#sidebar h1.first { + margin-top: 0px; +} + +td#sidebar a.menu { display: block; background-color: #ccc; padding: 0.1em 0.5em; text-decoration: none; } -div#sidebar div.infobox a.menu:hover { +td#sidebar a.menu:hover { background-color: #bbb; text-decoration: none; } -div#sidebar div.infobox select { +td#sidebar select { width: 100%; - border: solid 1px #aaa; - background-color: #bbb; margin: 2px 0px 0px 0px; - padding: 0px; } -td#branch-dropdown-cell { - width: 99%; +td#sidebar form { + text-align: right; } input#switch-btn { - width: 20px; - border: solid 1px #aaa; - background-color: #bbb; margin: 2px 0px 0px 0px; - padding: 0px; } -div#sidebar div.infobox input.txt { +td#sidebar input.txt { width: 100%; - border: solid 1px #aaa; - background-color: #bbb; margin: 2px 0px 0px 0px; - padding: 0; } table#grid { |