summaryrefslogtreecommitdiffabout
path: root/ui-summary.c
Unidiff
Diffstat (limited to 'ui-summary.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-summary.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/ui-summary.c b/ui-summary.c
index 1e895a6..c684628 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -41,64 +41,56 @@ static void cgit_print_branch(struct refinfo *ref)
41 } 41 }
42} 42}
43 43
44static void print_tag_header() 44static void print_tag_header()
45{ 45{
46 html("<tr class='nohover'><th class='left'>Tag</th>" 46 html("<tr class='nohover'><th class='left'>Tag</th>"
47 "<th class='left'>Age</th>" 47 "<th class='left'>Age</th>"
48 "<th class='left'>Author</th>" 48 "<th class='left'>Author</th>"
49 "<th class='left'>Reference</th></tr>\n"); 49 "<th class='left'>Reference</th></tr>\n");
50 header = 1; 50 header = 1;
51} 51}
52 52
53static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, 53static int print_tag(struct refinfo *ref)
54 int flags, void *cb_data)
55{ 54{
56 struct tag *tag; 55 struct tag *tag;
57 struct taginfo *info; 56 struct taginfo *info;
58 struct object *obj; 57 char *url, *name = (char *)ref->refname;
59 char buf[256], *url;
60 58
61 strncpy(buf, refname, sizeof(buf)); 59 if (ref->object->type == OBJ_TAG) {
62 obj = parse_object(sha1); 60 tag = lookup_tag(ref->object->sha1);
63 if (!obj)
64 return 1;
65 if (obj->type == OBJ_TAG) {
66 tag = lookup_tag(sha1);
67 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) 61 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))
68 return 2; 62 return 2;
69 if (!header)
70 print_tag_header();
71 html("<tr><td>"); 63 html("<tr><td>");
72 url = cgit_pageurl(cgit_query_repo, "tag", 64 url = cgit_pageurl(cgit_query_repo, "tag",
73 fmt("id=%s", refname)); 65 fmt("id=%s", name));
74 html_link_open(url, NULL, NULL); 66 html_link_open(url, NULL, NULL);
75 html_txt(buf); 67 html_txt(name);
76 html_link_close(); 68 html_link_close();
77 html("</td><td>"); 69 html("</td><td>");
78 if (info->tagger_date > 0) 70 if (info->tagger_date > 0)
79 cgit_print_age(info->tagger_date, -1, NULL); 71 cgit_print_age(info->tagger_date, -1, NULL);
80 html("</td><td>"); 72 html("</td><td>");
81 if (info->tagger) 73 if (info->tagger)
82 html(info->tagger); 74 html(info->tagger);
83 html("</td><td>"); 75 html("</td><td>");
84 cgit_object_link(tag->tagged); 76 cgit_object_link(tag->tagged);
85 html("</td></tr>\n"); 77 html("</td></tr>\n");
86 } else { 78 } else {
87 if (!header) 79 if (!header)
88 print_tag_header(); 80 print_tag_header();
89 html("<tr><td>"); 81 html("<tr><td>");
90 html_txt(buf); 82 html_txt(name);
91 html("</td><td colspan='2'/><td>"); 83 html("</td><td colspan='2'/><td>");
92 cgit_object_link(obj); 84 cgit_object_link(ref->object);
93 html("</td></tr>\n"); 85 html("</td></tr>\n");
94 } 86 }
95 return 0; 87 return 0;
96} 88}
97 89
98static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1, 90static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1,
99 int flags, void *cb_data) 91 int flags, void *cb_data)
100{ 92{
101 struct tag *tag; 93 struct tag *tag;
102 struct taginfo *info; 94 struct taginfo *info;
103 struct object *obj; 95 struct object *obj;
104 char buf[256], *url; 96 char buf[256], *url;
@@ -146,26 +138,36 @@ static void cgit_print_branches()
146 "<th class='left'>Author</th>" 138 "<th class='left'>Author</th>"
147 "<th class='left'>Head commit</th></tr>\n"); 139 "<th class='left'>Head commit</th></tr>\n");
148 140
149 list.refs = NULL; 141 list.refs = NULL;
150 list.alloc = list.count = 0; 142 list.alloc = list.count = 0;
151 for_each_branch_ref(cgit_refs_cb, &list); 143 for_each_branch_ref(cgit_refs_cb, &list);
152 for(i=0; i<list.count; i++) 144 for(i=0; i<list.count; i++)
153 cgit_print_branch(list.refs[i]); 145 cgit_print_branch(list.refs[i]);
154} 146}
155 147
156static void cgit_print_tags() 148static void cgit_print_tags()
157{ 149{
150 struct reflist list;
151 int i;
152
158 header = 0; 153 header = 0;
159 for_each_tag_ref(cgit_print_tag_cb, NULL); 154 list.refs = NULL;
155 list.alloc = list.count = 0;
156 for_each_tag_ref(cgit_refs_cb, &list);
157 if (list.count == 0)
158 return;
159 print_tag_header();
160 for(i=0; i<list.count; i++)
161 print_tag(list.refs[i]);
160} 162}
161 163
162static void cgit_print_archives() 164static void cgit_print_archives()
163{ 165{
164 header = 0; 166 header = 0;
165 for_each_ref(cgit_print_archive_cb, NULL); 167 for_each_ref(cgit_print_archive_cb, NULL);
166 if (header) 168 if (header)
167 html("</table>"); 169 html("</table>");
168} 170}
169 171
170void cgit_print_summary() 172void cgit_print_summary()
171{ 173{