diff options
Diffstat (limited to 'ui-summary.c')
-rw-r--r-- | ui-summary.c | 74 |
1 files changed, 65 insertions, 9 deletions
diff --git a/ui-summary.c b/ui-summary.c index 0a7869b..9388f5f 100644 --- a/ui-summary.c +++ b/ui-summary.c | |||
@@ -8,6 +8,8 @@ | |||
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | 10 | ||
11 | int items = 0; | ||
12 | |||
11 | static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, | 13 | static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, |
12 | int flags, void *cb_data) | 14 | int flags, void *cb_data) |
13 | { | 15 | { |
@@ -83,6 +85,13 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, | |||
83 | tag = lookup_tag(sha1); | 85 | tag = lookup_tag(sha1); |
84 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) | 86 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) |
85 | return 2; | 87 | return 2; |
88 | if (!items) { | ||
89 | html("<tr class='nohover'><th class='left'>Tag</th>" | ||
90 | "<th class='left'>Created</th>" | ||
91 | "<th class='left'>Author</th>" | ||
92 | "<th class='left'>Reference</th></tr>\n"); | ||
93 | } | ||
94 | items++; | ||
86 | html("<tr><td>"); | 95 | html("<tr><td>"); |
87 | url = cgit_pageurl(cgit_query_repo, "view", | 96 | url = cgit_pageurl(cgit_query_repo, "view", |
88 | fmt("id=%s", sha1_to_hex(sha1))); | 97 | fmt("id=%s", sha1_to_hex(sha1))); |
@@ -108,6 +117,44 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, | |||
108 | return 0; | 117 | return 0; |
109 | } | 118 | } |
110 | 119 | ||
120 | static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1, | ||
121 | int flags, void *cb_data) | ||
122 | { | ||
123 | struct tag *tag; | ||
124 | struct taginfo *info; | ||
125 | struct object *obj; | ||
126 | char buf[256], *url; | ||
127 | |||
128 | if (prefixcmp(refname, "refs/archives")) | ||
129 | return 0; | ||
130 | strncpy(buf, refname+14, sizeof(buf)); | ||
131 | obj = parse_object(sha1); | ||
132 | if (!obj) | ||
133 | return 1; | ||
134 | if (obj->type == OBJ_TAG) { | ||
135 | tag = lookup_tag(sha1); | ||
136 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) | ||
137 | return 0; | ||
138 | hashcpy(sha1, tag->tagged->sha1); | ||
139 | } else if (obj->type != OBJ_BLOB) { | ||
140 | return 0; | ||
141 | } | ||
142 | if (!items) { | ||
143 | html("<table>"); | ||
144 | html("<tr><th>Downloads</th></tr>"); | ||
145 | } | ||
146 | items++; | ||
147 | html("<tr><td>"); | ||
148 | url = cgit_pageurl(cgit_query_repo, "blob", | ||
149 | fmt("id=%s&path=%s", sha1_to_hex(sha1), | ||
150 | buf)); | ||
151 | html_link_open(url, NULL, NULL); | ||
152 | html_txt(buf); | ||
153 | html_link_close(); | ||
154 | html("</td><tr>"); | ||
155 | return 0; | ||
156 | } | ||
157 | |||
111 | static void cgit_print_branches() | 158 | static void cgit_print_branches() |
112 | { | 159 | { |
113 | html("<tr class='nohover'><th class='left'>Branch</th>" | 160 | html("<tr class='nohover'><th class='left'>Branch</th>" |
@@ -119,21 +166,30 @@ static void cgit_print_branches() | |||
119 | 166 | ||
120 | static void cgit_print_tags() | 167 | static void cgit_print_tags() |
121 | { | 168 | { |
122 | html("<tr class='nohover'><th class='left'>Tag</th>" | 169 | items = 0; |
123 | "<th class='left'>Created</th>" | ||
124 | "<th class='left'>Author</th>" | ||
125 | "<th class='left'>Reference</th></tr>\n"); | ||
126 | for_each_tag_ref(cgit_print_tag_cb, NULL); | 170 | for_each_tag_ref(cgit_print_tag_cb, NULL); |
127 | } | 171 | } |
128 | 172 | ||
173 | static void cgit_print_archives() | ||
174 | { | ||
175 | items = 0; | ||
176 | for_each_ref(cgit_print_archive_cb, NULL); | ||
177 | if (items) | ||
178 | html("</table>"); | ||
179 | } | ||
180 | |||
129 | void cgit_print_summary() | 181 | void cgit_print_summary() |
130 | { | 182 | { |
131 | html("<h2>"); | ||
132 | html(cgit_repo->name); | ||
133 | html("</h2><h3>"); | ||
134 | html(cgit_repo->desc); | ||
135 | html("</h3>"); | ||
136 | html("<table class='list nowrap'>"); | 183 | html("<table class='list nowrap'>"); |
184 | html("<tr class='nohover'><td id='summary' colspan='3'>"); | ||
185 | html("<h2>"); | ||
186 | html_txt(cgit_repo->name); | ||
187 | html(" - "); | ||
188 | html_txt(cgit_repo->desc); | ||
189 | html("</h2>"); | ||
190 | html("</td><td id='archivelist'>"); | ||
191 | cgit_print_archives(); | ||
192 | html("</td></tr>"); | ||
137 | cgit_print_branches(); | 193 | cgit_print_branches(); |
138 | html("<tr class='nohover'><td colspan='4'> </td></tr>"); | 194 | html("<tr class='nohover'><td colspan='4'> </td></tr>"); |
139 | cgit_print_tags(); | 195 | cgit_print_tags(); |