summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2008-04-13 10:20:00 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-04-13 10:20:00 (UTC)
commit39912a24edf45497e668ebda25636aa6f6db0c9b (patch) (unidiff)
tree5de079ba1441a4f9546252e38c31d4d1b5f17b40
parent536b0541fcfea2169e4df33043cd9ff14c657bce (diff)
downloadcgit-39912a24edf45497e668ebda25636aa6f6db0c9b.zip
cgit-39912a24edf45497e668ebda25636aa6f6db0c9b.tar.gz
cgit-39912a24edf45497e668ebda25636aa6f6db0c9b.tar.bz2
Remove 'patch' link from tab, add to commit view
It's a bit confusing to enter the patch view from the tab, since it has no layout. And the commit view has always lacked showing the commit id. Both of these warts are fixed by this commit, which adds a new header line in the commit view which shows the commit id as a 'permalink' to the current commit and also adds a link to the patch view of the current commit. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-commit.c6
-rw-r--r--ui-shared.c2
-rw-r--r--ui-shared.h2
3 files changed, 8 insertions, 2 deletions
diff --git a/ui-commit.c b/ui-commit.c
index c2fafd7..dd36cc0 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -154,48 +154,54 @@ void cgit_print_commit(char *hex)
154 return; 154 return;
155 } 155 }
156 commit = lookup_commit_reference(sha1); 156 commit = lookup_commit_reference(sha1);
157 if (!commit) { 157 if (!commit) {
158 cgit_print_error(fmt("Bad commit reference: %s", hex)); 158 cgit_print_error(fmt("Bad commit reference: %s", hex));
159 return; 159 return;
160 } 160 }
161 info = cgit_parse_commit(commit); 161 info = cgit_parse_commit(commit);
162 162
163 html("<table summary='commit info' class='commit-info'>\n"); 163 html("<table summary='commit info' class='commit-info'>\n");
164 html("<tr><th>author</th><td>"); 164 html("<tr><th>author</th><td>");
165 html_txt(info->author); 165 html_txt(info->author);
166 html(" "); 166 html(" ");
167 html_txt(info->author_email); 167 html_txt(info->author_email);
168 html("</td><td class='right'>"); 168 html("</td><td class='right'>");
169 cgit_print_date(info->author_date, FMT_LONGDATE); 169 cgit_print_date(info->author_date, FMT_LONGDATE);
170 html("</td></tr>\n"); 170 html("</td></tr>\n");
171 html("<tr><th>committer</th><td>"); 171 html("<tr><th>committer</th><td>");
172 html_txt(info->committer); 172 html_txt(info->committer);
173 html(" "); 173 html(" ");
174 html_txt(info->committer_email); 174 html_txt(info->committer_email);
175 html("</td><td class='right'>"); 175 html("</td><td class='right'>");
176 cgit_print_date(info->committer_date, FMT_LONGDATE); 176 cgit_print_date(info->committer_date, FMT_LONGDATE);
177 html("</td></tr>\n"); 177 html("</td></tr>\n");
178 html("<tr><th>commit</th><td colspan='2' class='sha1'>");
179 tmp = sha1_to_hex(commit->object.sha1);
180 cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp);
181 html(" (");
182 cgit_patch_link("patch", NULL, NULL, NULL, tmp);
183 html(")</td></tr>\n");
178 html("<tr><th>tree</th><td colspan='2' class='sha1'>"); 184 html("<tr><th>tree</th><td colspan='2' class='sha1'>");
179 tmp = xstrdup(hex); 185 tmp = xstrdup(hex);
180 cgit_tree_link(sha1_to_hex(commit->tree->object.sha1), NULL, NULL, 186 cgit_tree_link(sha1_to_hex(commit->tree->object.sha1), NULL, NULL,
181 ctx.qry.head, tmp, NULL); 187 ctx.qry.head, tmp, NULL);
182 html("</td></tr>\n"); 188 html("</td></tr>\n");
183 for (p = commit->parents; p ; p = p->next) { 189 for (p = commit->parents; p ; p = p->next) {
184 parent = lookup_commit_reference(p->item->object.sha1); 190 parent = lookup_commit_reference(p->item->object.sha1);
185 if (!parent) { 191 if (!parent) {
186 html("<tr><td colspan='3'>"); 192 html("<tr><td colspan='3'>");
187 cgit_print_error("Error reading parent commit"); 193 cgit_print_error("Error reading parent commit");
188 html("</td></tr>"); 194 html("</td></tr>");
189 continue; 195 continue;
190 } 196 }
191 html("<tr><th>parent</th>" 197 html("<tr><th>parent</th>"
192 "<td colspan='2' class='sha1'>"); 198 "<td colspan='2' class='sha1'>");
193 cgit_commit_link(sha1_to_hex(p->item->object.sha1), NULL, NULL, 199 cgit_commit_link(sha1_to_hex(p->item->object.sha1), NULL, NULL,
194 ctx.qry.head, sha1_to_hex(p->item->object.sha1)); 200 ctx.qry.head, sha1_to_hex(p->item->object.sha1));
195 html(" ("); 201 html(" (");
196 cgit_diff_link("diff", NULL, NULL, ctx.qry.head, hex, 202 cgit_diff_link("diff", NULL, NULL, ctx.qry.head, hex,
197 sha1_to_hex(p->item->object.sha1), NULL); 203 sha1_to_hex(p->item->object.sha1), NULL);
198 html(")</td></tr>"); 204 html(")</td></tr>");
199 } 205 }
200 if (ctx.repo->snapshots) { 206 if (ctx.repo->snapshots) {
201 html("<tr><th>download</th><td colspan='2' class='sha1'>"); 207 html("<tr><th>download</th><td colspan='2' class='sha1'>");
diff --git a/ui-shared.c b/ui-shared.c
index 6253a90..bb08c4a 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -520,50 +520,48 @@ void cgit_print_pageheader(struct cgit_context *ctx)
520*/ 520*/
521 else { 521 else {
522 html(">"); 522 html(">");
523 html_txt("a fast webinterface for the git dscm"); 523 html_txt("a fast webinterface for the git dscm");
524 } 524 }
525 html("</td></tr>\n"); 525 html("</td></tr>\n");
526 526
527 html("</tr>\n"); 527 html("</tr>\n");
528 html("</table>\n"); 528 html("</table>\n");
529 529
530 html("<table class='tabs'><tr><td>\n"); 530 html("<table class='tabs'><tr><td>\n");
531 if (ctx->repo) { 531 if (ctx->repo) {
532 reporevlink(NULL, "summary", NULL, hc(cmd, "summary"), 532 reporevlink(NULL, "summary", NULL, hc(cmd, "summary"),
533 ctx->qry.head, NULL, NULL); 533 ctx->qry.head, NULL, NULL);
534 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head, 534 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head,
535 ctx->qry.sha1, NULL); 535 ctx->qry.sha1, NULL);
536 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head, 536 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head,
537 NULL, NULL, 0, NULL, NULL); 537 NULL, NULL, 0, NULL, NULL);
538 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head, 538 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head,
539 ctx->qry.sha1, NULL); 539 ctx->qry.sha1, NULL);
540 cgit_commit_link("commit", NULL, hc(cmd, "commit"), 540 cgit_commit_link("commit", NULL, hc(cmd, "commit"),
541 ctx->qry.head, ctx->qry.sha1); 541 ctx->qry.head, ctx->qry.sha1);
542 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head, 542 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
543 ctx->qry.sha1, ctx->qry.sha2, NULL); 543 ctx->qry.sha1, ctx->qry.sha2, NULL);
544 cgit_patch_link("patch", NULL, hc(cmd, "patch"), ctx->qry.head,
545 ctx->qry.sha1);
546 html("</td><td class='form'>"); 544 html("</td><td class='form'>");
547 html("<form class='right' method='get' action='"); 545 html("<form class='right' method='get' action='");
548 if (ctx->cfg.virtual_root) 546 if (ctx->cfg.virtual_root)
549 html_attr(cgit_fileurl(ctx->qry.repo, "log", 547 html_attr(cgit_fileurl(ctx->qry.repo, "log",
550 ctx->qry.path, NULL)); 548 ctx->qry.path, NULL));
551 html("'>\n"); 549 html("'>\n");
552 add_hidden_formfields(1, 0, "log"); 550 add_hidden_formfields(1, 0, "log");
553 html("<select name='qt'>\n"); 551 html("<select name='qt'>\n");
554 html_option("grep", "log msg", ctx->qry.grep); 552 html_option("grep", "log msg", ctx->qry.grep);
555 html_option("author", "author", ctx->qry.grep); 553 html_option("author", "author", ctx->qry.grep);
556 html_option("committer", "committer", ctx->qry.grep); 554 html_option("committer", "committer", ctx->qry.grep);
557 html("</select>\n"); 555 html("</select>\n");
558 html("<input class='txt' type='text' size='10' name='q' value='"); 556 html("<input class='txt' type='text' size='10' name='q' value='");
559 html_attr(ctx->qry.search); 557 html_attr(ctx->qry.search);
560 html("'/>\n"); 558 html("'/>\n");
561 html("<input type='submit' value='search'/>\n"); 559 html("<input type='submit' value='search'/>\n");
562 html("</form>\n"); 560 html("</form>\n");
563 } else { 561 } else {
564 html("<a class='active' href='"); 562 html("<a class='active' href='");
565 html_attr(cgit_rooturl()); 563 html_attr(cgit_rooturl());
566 html("'>index</a>\n"); 564 html("'>index</a>\n");
567 html("</td><td class='form'>"); 565 html("</td><td class='form'>");
568 html("<form method='get' action='"); 566 html("<form method='get' action='");
569 html_attr(cgit_rooturl()); 567 html_attr(cgit_rooturl());
diff --git a/ui-shared.h b/ui-shared.h
index 94de884..76c2b1f 100644
--- a/ui-shared.h
+++ b/ui-shared.h
@@ -1,36 +1,38 @@
1#ifndef UI_SHARED_H 1#ifndef UI_SHARED_H
2#define UI_SHARED_H 2#define UI_SHARED_H
3 3
4extern char *cgit_repourl(const char *reponame); 4extern char *cgit_repourl(const char *reponame);
5extern char *cgit_fileurl(const char *reponame, const char *pagename, 5extern char *cgit_fileurl(const char *reponame, const char *pagename,
6 const char *filename, const char *query); 6 const char *filename, const char *query);
7extern char *cgit_pageurl(const char *reponame, const char *pagename, 7extern char *cgit_pageurl(const char *reponame, const char *pagename,
8 const char *query); 8 const char *query);
9 9
10extern void cgit_tree_link(char *name, char *title, char *class, char *head, 10extern void cgit_tree_link(char *name, char *title, char *class, char *head,
11 char *rev, char *path); 11 char *rev, char *path);
12extern void cgit_log_link(char *name, char *title, char *class, char *head, 12extern void cgit_log_link(char *name, char *title, char *class, char *head,
13 char *rev, char *path, int ofs, char *grep, 13 char *rev, char *path, int ofs, char *grep,
14 char *pattern); 14 char *pattern);
15extern void cgit_commit_link(char *name, char *title, char *class, char *head, 15extern void cgit_commit_link(char *name, char *title, char *class, char *head,
16 char *rev); 16 char *rev);
17extern void cgit_patch_link(char *name, char *title, char *class, char *head,
18 char *rev);
17extern void cgit_refs_link(char *name, char *title, char *class, char *head, 19extern void cgit_refs_link(char *name, char *title, char *class, char *head,
18 char *rev, char *path); 20 char *rev, char *path);
19extern void cgit_snapshot_link(char *name, char *title, char *class, 21extern void cgit_snapshot_link(char *name, char *title, char *class,
20 char *head, char *rev, char *archivename); 22 char *head, char *rev, char *archivename);
21extern void cgit_diff_link(char *name, char *title, char *class, char *head, 23extern void cgit_diff_link(char *name, char *title, char *class, char *head,
22 char *new_rev, char *old_rev, char *path); 24 char *new_rev, char *old_rev, char *path);
23extern void cgit_object_link(struct object *obj); 25extern void cgit_object_link(struct object *obj);
24 26
25extern void cgit_print_error(char *msg); 27extern void cgit_print_error(char *msg);
26extern void cgit_print_date(time_t secs, char *format); 28extern void cgit_print_date(time_t secs, char *format);
27extern void cgit_print_age(time_t t, time_t max_relative, char *format); 29extern void cgit_print_age(time_t t, time_t max_relative, char *format);
28extern void cgit_print_http_headers(struct cgit_context *ctx); 30extern void cgit_print_http_headers(struct cgit_context *ctx);
29extern void cgit_print_docstart(struct cgit_context *ctx); 31extern void cgit_print_docstart(struct cgit_context *ctx);
30extern void cgit_print_docend(); 32extern void cgit_print_docend();
31extern void cgit_print_pageheader(struct cgit_context *ctx); 33extern void cgit_print_pageheader(struct cgit_context *ctx);
32extern void cgit_print_filemode(unsigned short mode); 34extern void cgit_print_filemode(unsigned short mode);
33extern void cgit_print_snapshot_links(const char *repo, const char *head, 35extern void cgit_print_snapshot_links(const char *repo, const char *head,
34 const char *hex, int snapshots); 36 const char *hex, int snapshots);
35 37
36#endif /* UI_SHARED_H */ 38#endif /* UI_SHARED_H */