cgit

commit 495e39677326284ea13b2f6d76195d6800c2a450

Author: Lars Hjemli <hjemli@gmail.com>

Show tag heading even if first tag is of the lightweight kind

The tag printing code waited for valid tags before printing the
table heading, but forgot to count unannotated tags. This fixes it.

Noticed by Kristian Høgsberg <krh@bitplanet.net>

Signed-off-by: Lars Hjemli <hjemli@gmail.com>

 ui-summary.c | 32 +++++++++++++++++++-------------


diff --git a/ui-summary.c b/ui-summary.c
index f6120f92c365dec331629075e4ec36f074c1f737..3410e1acff9ed4b155865ce3ea7fbc9221af00c1 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -8,7 +8,7 @@  */
 
 #include "cgit.h"
 
-static int items;
+static int header;
 
 static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
 				int flags, void *cb_data)
@@ -69,6 +69,15 @@ 	      sha1_to_hex(obj->sha1));
 	html_link_close();
 }
 
+static void print_tag_header()
+{
+	html("<tr class='nohover'><th class='left'>Tag</th>"
+	     "<th class='left'>Created</th>"
+	     "<th class='left'>Author</th>"
+	     "<th class='left'>Reference</th></tr>\n");
+	header = 1;
+}
+
 static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,
 				int flags, void *cb_data)
 {
@@ -85,13 +94,8 @@ 	if (obj->type == OBJ_TAG) {
 		tag = lookup_tag(sha1);
 		if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))
 			return 2;
-		if (!items) {
-			html("<tr class='nohover'><th class='left'>Tag</th>"
-			     "<th class='left'>Created</th>"
-			     "<th class='left'>Author</th>"
-			     "<th class='left'>Reference</th></tr>\n");
-		}
-		items++;
+		if (!header)
+			print_tag_header();
 		html("<tr><td>");
 		url = cgit_pageurl(cgit_query_repo, "view",
 				   fmt("id=%s", sha1_to_hex(sha1)));
@@ -108,6 +112,8 @@ 		html("");
 		cgit_print_object_ref(tag->tagged);
 		html("</td></tr>\n");
 	} else {
+		if (!header)
+			print_tag_header();
 		html("<tr><td>");
 		html_txt(buf);
 		html("</td><td colspan='2'/><td>");
@@ -139,11 +145,11 @@ 		hashcpy(sha1, tag->tagged->sha1);
 	} else if (obj->type != OBJ_BLOB) {
 		return 0;
 	}
-	if (!items) {
+	if (!header) {
 		html("<table>");
 		html("<tr><th>Downloads</th></tr>");
+		header = 1;
 	}
-	items++;
 	html("<tr><td>");
 	url = cgit_pageurl(cgit_query_repo, "blob",
 			   fmt("id=%s&path=%s", sha1_to_hex(sha1),
@@ -166,15 +172,15 @@ }
 
 static void cgit_print_tags()
 {
-	items = 0;
+	header = 0;
 	for_each_tag_ref(cgit_print_tag_cb, NULL);
 }
 
 static void cgit_print_archives()
 {
-	items = 0;
+	header = 0;
 	for_each_ref(cgit_print_archive_cb, NULL);
-	if (items)
+	if (header)
 		html("</table>");
 }