summaryrefslogtreecommitdiffabout
path: root/ui-refs.c
authorLars Hjemli <hjemli@gmail.com>2008-11-29 17:39:41 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-11-29 17:39:41 (UTC)
commit0274b57d55a12ed38259757dbfae96b79cfa2e0b (patch) (unidiff)
tree34c7204f88168f791ef48f603bb8ab66e9df523c /ui-refs.c
parent7b5cee65fd9cf31e4f19ce4ff613778cb95512a9 (diff)
downloadcgit-0274b57d55a12ed38259757dbfae96b79cfa2e0b.zip
cgit-0274b57d55a12ed38259757dbfae96b79cfa2e0b.tar.gz
cgit-0274b57d55a12ed38259757dbfae96b79cfa2e0b.tar.bz2
ui-log: add support for showing the full commit message
Some users prefer to see the full message, so to make these users happy the new querystring parameter "showmsg" can be used to print the full commit message per log entry. A link is provided in the log heading to make this function accessible, and all links and forms tries to preserve the users preference. Note: the new link is not displayed on the summary page since the point of the summary page is to be a summary, but it is still obeyed if specified manually. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'ui-refs.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-refs.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/ui-refs.c b/ui-refs.c
index 32e0429..7eb16d5 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -1,157 +1,158 @@
1/* ui-refs.c: browse symbolic refs 1/* ui-refs.c: browse symbolic refs
2 * 2 *
3 * Copyright (C) 2006 Lars Hjemli 3 * Copyright (C) 2006 Lars Hjemli
4 * 4 *
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10#include "html.h" 10#include "html.h"
11#include "ui-shared.h" 11#include "ui-shared.h"
12 12
13static int header; 13static int header;
14 14
15static int cmp_age(int age1, int age2) 15static int cmp_age(int age1, int age2)
16{ 16{
17 if (age1 != 0 && age2 != 0) 17 if (age1 != 0 && age2 != 0)
18 return age2 - age1; 18 return age2 - age1;
19 19
20 if (age1 == 0 && age2 == 0) 20 if (age1 == 0 && age2 == 0)
21 return 0; 21 return 0;
22 22
23 if (age1 == 0) 23 if (age1 == 0)
24 return +1; 24 return +1;
25 25
26 return -1; 26 return -1;
27} 27}
28 28
29static int cmp_ref_name(const void *a, const void *b) 29static int cmp_ref_name(const void *a, const void *b)
30{ 30{
31 struct refinfo *r1 = *(struct refinfo **)a; 31 struct refinfo *r1 = *(struct refinfo **)a;
32 struct refinfo *r2 = *(struct refinfo **)b; 32 struct refinfo *r2 = *(struct refinfo **)b;
33 33
34 return strcmp(r1->refname, r2->refname); 34 return strcmp(r1->refname, r2->refname);
35} 35}
36 36
37static int cmp_branch_age(const void *a, const void *b) 37static int cmp_branch_age(const void *a, const void *b)
38{ 38{
39 struct refinfo *r1 = *(struct refinfo **)a; 39 struct refinfo *r1 = *(struct refinfo **)a;
40 struct refinfo *r2 = *(struct refinfo **)b; 40 struct refinfo *r2 = *(struct refinfo **)b;
41 41
42 return cmp_age(r1->commit->committer_date, r2->commit->committer_date); 42 return cmp_age(r1->commit->committer_date, r2->commit->committer_date);
43} 43}
44 44
45static int cmp_tag_age(const void *a, const void *b) 45static int cmp_tag_age(const void *a, const void *b)
46{ 46{
47 struct refinfo *r1 = *(struct refinfo **)a; 47 struct refinfo *r1 = *(struct refinfo **)a;
48 struct refinfo *r2 = *(struct refinfo **)b; 48 struct refinfo *r2 = *(struct refinfo **)b;
49 49
50 return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date); 50 return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date);
51} 51}
52 52
53static int print_branch(struct refinfo *ref) 53static int print_branch(struct refinfo *ref)
54{ 54{
55 struct commitinfo *info = ref->commit; 55 struct commitinfo *info = ref->commit;
56 char *name = (char *)ref->refname; 56 char *name = (char *)ref->refname;
57 57
58 if (!info) 58 if (!info)
59 return 1; 59 return 1;
60 html("<tr><td>"); 60 html("<tr><td>");
61 cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL); 61 cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL,
62 ctx.qry.showmsg);
62 html("</td><td>"); 63 html("</td><td>");
63 64
64 if (ref->object->type == OBJ_COMMIT) { 65 if (ref->object->type == OBJ_COMMIT) {
65 cgit_commit_link(info->subject, NULL, NULL, name, NULL); 66 cgit_commit_link(info->subject, NULL, NULL, name, NULL);
66 html("</td><td>"); 67 html("</td><td>");
67 html_txt(info->author); 68 html_txt(info->author);
68 html("</td><td colspan='2'>"); 69 html("</td><td colspan='2'>");
69 cgit_print_age(info->commit->date, -1, NULL); 70 cgit_print_age(info->commit->date, -1, NULL);
70 } else { 71 } else {
71 html("</td><td></td><td>"); 72 html("</td><td></td><td>");
72 cgit_object_link(ref->object); 73 cgit_object_link(ref->object);
73 } 74 }
74 html("</td></tr>\n"); 75 html("</td></tr>\n");
75 return 0; 76 return 0;
76} 77}
77 78
78static void print_tag_header() 79static void print_tag_header()
79{ 80{
80 html("<tr class='nohover'><th class='left'>Tag</th>" 81 html("<tr class='nohover'><th class='left'>Tag</th>"
81 "<th class='left'>Reference</th>" 82 "<th class='left'>Reference</th>"
82 "<th class='left'>Author</th>" 83 "<th class='left'>Author</th>"
83 "<th class='left' colspan='2'>Age</th></tr>\n"); 84 "<th class='left' colspan='2'>Age</th></tr>\n");
84 header = 1; 85 header = 1;
85} 86}
86 87
87static int print_tag(struct refinfo *ref) 88static int print_tag(struct refinfo *ref)
88{ 89{
89 struct tag *tag; 90 struct tag *tag;
90 struct taginfo *info; 91 struct taginfo *info;
91 char *name = (char *)ref->refname; 92 char *name = (char *)ref->refname;
92 93
93 if (ref->object->type == OBJ_TAG) { 94 if (ref->object->type == OBJ_TAG) {
94 tag = (struct tag *)ref->object; 95 tag = (struct tag *)ref->object;
95 info = ref->tag; 96 info = ref->tag;
96 if (!tag || !info) 97 if (!tag || !info)
97 return 1; 98 return 1;
98 html("<tr><td>"); 99 html("<tr><td>");
99 cgit_tag_link(name, NULL, NULL, ctx.qry.head, name); 100 cgit_tag_link(name, NULL, NULL, ctx.qry.head, name);
100 html("</td><td>"); 101 html("</td><td>");
101 cgit_object_link(tag->tagged); 102 cgit_object_link(tag->tagged);
102 html("</td><td>"); 103 html("</td><td>");
103 if (info->tagger) 104 if (info->tagger)
104 html(info->tagger); 105 html(info->tagger);
105 html("</td><td colspan='2'>"); 106 html("</td><td colspan='2'>");
106 if (info->tagger_date > 0) 107 if (info->tagger_date > 0)
107 cgit_print_age(info->tagger_date, -1, NULL); 108 cgit_print_age(info->tagger_date, -1, NULL);
108 html("</td></tr>\n"); 109 html("</td></tr>\n");
109 } else { 110 } else {
110 if (!header) 111 if (!header)
111 print_tag_header(); 112 print_tag_header();
112 html("<tr><td>"); 113 html("<tr><td>");
113 html_txt(name); 114 html_txt(name);
114 html("</td><td>"); 115 html("</td><td>");
115 cgit_object_link(ref->object); 116 cgit_object_link(ref->object);
116 html("</td></tr>\n"); 117 html("</td></tr>\n");
117 } 118 }
118 return 0; 119 return 0;
119} 120}
120 121
121static void print_refs_link(char *path) 122static void print_refs_link(char *path)
122{ 123{
123 html("<tr class='nohover'><td colspan='4'>"); 124 html("<tr class='nohover'><td colspan='4'>");
124 cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path); 125 cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path);
125 html("</td></tr>"); 126 html("</td></tr>");
126} 127}
127 128
128void cgit_print_branches(int maxcount) 129void cgit_print_branches(int maxcount)
129{ 130{
130 struct reflist list; 131 struct reflist list;
131 int i; 132 int i;
132 133
133 html("<tr class='nohover'><th class='left'>Branch</th>" 134 html("<tr class='nohover'><th class='left'>Branch</th>"
134 "<th class='left'>Commit message</th>" 135 "<th class='left'>Commit message</th>"
135 "<th class='left'>Author</th>" 136 "<th class='left'>Author</th>"
136 "<th class='left' colspan='2'>Age</th></tr>\n"); 137 "<th class='left' colspan='2'>Age</th></tr>\n");
137 138
138 list.refs = NULL; 139 list.refs = NULL;
139 list.alloc = list.count = 0; 140 list.alloc = list.count = 0;
140 for_each_branch_ref(cgit_refs_cb, &list); 141 for_each_branch_ref(cgit_refs_cb, &list);
141 142
142 if (maxcount == 0 || maxcount > list.count) 143 if (maxcount == 0 || maxcount > list.count)
143 maxcount = list.count; 144 maxcount = list.count;
144 145
145 if (maxcount < list.count) { 146 if (maxcount < list.count) {
146 qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age); 147 qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age);
147 qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name); 148 qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name);
148 } 149 }
149 150
150 for(i=0; i<maxcount; i++) 151 for(i=0; i<maxcount; i++)
151 print_branch(list.refs[i]); 152 print_branch(list.refs[i]);
152 153
153 if (maxcount < list.count) 154 if (maxcount < list.count)
154 print_refs_link("heads"); 155 print_refs_link("heads");
155} 156}
156 157
157void cgit_print_tags(int maxcount) 158void cgit_print_tags(int maxcount)