summaryrefslogtreecommitdiffabout
authorStefan Bühler <lighttpd@stbuehler.de>2009-08-16 17:35:18 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-08-16 18:53:20 (UTC)
commit1bbe04c2c09d5dfbb2c66c4f8f490008b6e5fb25 (patch) (unidiff)
tree2f5eff9d46e490de0c6baddbd3c232935f47f534
parentff0ff807a3e03ade0fe04557e33593a3b32d9ab9 (diff)
downloadcgit-1bbe04c2c09d5dfbb2c66c4f8f490008b6e5fb25.zip
cgit-1bbe04c2c09d5dfbb2c66c4f8f490008b6e5fb25.tar.gz
cgit-1bbe04c2c09d5dfbb2c66c4f8f490008b6e5fb25.tar.bz2
ui-refs.c: improve handling of lightweight tags
When a lightweight tag is referencing a commit object, cgit now uses the commit date when comparing tag age. Also, the commitdate and author info is printed in the refs view, making lightweight tags appear similar to annotated tags. Signed-off-by: Stefan Bühler <lighttpd@stbuehler.de> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-refs.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/ui-refs.c b/ui-refs.c
index 25da00a..d3b4f6e 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -33,34 +33,45 @@ static int cmp_ref_name(const void *a, const void *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 int r1date, r2date;
49 50
50 return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date); 51 if (r1->object->type != OBJ_COMMIT)
52 r1date = r1->tag->tagger_date;
53 else
54 r1date = r1->commit->committer_date;
55
56 if (r2->object->type != OBJ_COMMIT)
57 r2date = r2->tag->tagger_date;
58 else
59 r2date = r2->commit->committer_date;
60
61 return cmp_age(r1date, r2date);
51} 62}
52 63
53static int print_branch(struct refinfo *ref) 64static int print_branch(struct refinfo *ref)
54{ 65{
55 struct commitinfo *info = ref->commit; 66 struct commitinfo *info = ref->commit;
56 char *name = (char *)ref->refname; 67 char *name = (char *)ref->refname;
57 68
58 if (!info) 69 if (!info)
59 return 1; 70 return 1;
60 html("<tr><td>"); 71 html("<tr><td>");
61 cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL, 72 cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL,
62 ctx.qry.showmsg); 73 ctx.qry.showmsg);
63 html("</td><td>"); 74 html("</td><td>");
64 75
65 if (ref->object->type == OBJ_COMMIT) { 76 if (ref->object->type == OBJ_COMMIT) {
66 cgit_commit_link(info->subject, NULL, NULL, name, NULL); 77 cgit_commit_link(info->subject, NULL, NULL, name, NULL);
@@ -132,32 +143,38 @@ static int print_tag(struct refinfo *ref)
132 if (info->tagger) 143 if (info->tagger)
133 html(info->tagger); 144 html(info->tagger);
134 html("</td><td colspan='2'>"); 145 html("</td><td colspan='2'>");
135 if (info->tagger_date > 0) 146 if (info->tagger_date > 0)
136 cgit_print_age(info->tagger_date, -1, NULL); 147 cgit_print_age(info->tagger_date, -1, NULL);
137 html("</td></tr>\n"); 148 html("</td></tr>\n");
138 } else { 149 } else {
139 if (!header) 150 if (!header)
140 print_tag_header(); 151 print_tag_header();
141 html("<tr><td>"); 152 html("<tr><td>");
142 cgit_tag_link(name, NULL, NULL, ctx.qry.head, name); 153 cgit_tag_link(name, NULL, NULL, ctx.qry.head, name);
143 html("</td><td>"); 154 html("</td><td>");
144 if (ctx.repo->snapshots && (ref->object->type == OBJ_COMMIT)) 155 if (ctx.repo->snapshots && (ref->object->type == OBJ_COMMIT))
145 print_tag_downloads(ctx.repo, name); 156 print_tag_downloads(ctx.repo, name);
146 else 157 else
147 cgit_object_link(ref->object); 158 cgit_object_link(ref->object);
159 html("</td><td>");
160 if (ref->object->type == OBJ_COMMIT)
161 html(ref->commit->author);
162 html("</td><td colspan='2'>");
163 if (ref->object->type == OBJ_COMMIT)
164 cgit_print_age(ref->commit->commit->date, -1, NULL);
148 html("</td></tr>\n"); 165 html("</td></tr>\n");
149 } 166 }
150 return 0; 167 return 0;
151} 168}
152 169
153static void print_refs_link(char *path) 170static void print_refs_link(char *path)
154{ 171{
155 html("<tr class='nohover'><td colspan='4'>"); 172 html("<tr class='nohover'><td colspan='4'>");
156 cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path); 173 cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path);
157 html("</td></tr>"); 174 html("</td></tr>");
158} 175}
159 176
160void cgit_print_branches(int maxcount) 177void cgit_print_branches(int maxcount)
161{ 178{
162 struct reflist list; 179 struct reflist list;
163 int i; 180 int i;