[PATCH 16/17] tree: move layout into page function

John Keeping john at keeping.me.uk
Sun Apr 5 17:55:02 CEST 2015


This also allows us to return proper HTTP error codes when the requested
tree is not found and display an error message in one case (invalid path
inside valid commit) where we previously just displayed an empty page.

Signed-off-by: John Keeping <john at keeping.me.uk>
---
 cmd.c     |  2 +-
 ui-tree.c | 13 ++++++++++---
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/cmd.c b/cmd.c
index 27408f2..6a964b1 100644
--- a/cmd.c
+++ b/cmd.c
@@ -161,7 +161,7 @@ struct cgit_cmd *cgit_get_cmd(void)
 		def_cmd(stats, 1, 0, 1, 0),
 		def_cmd(summary, 1, 0, 0, 0),
 		def_cmd(tag, 1, 0, 0, 0),
-		def_cmd(tree, 1, 1, 1, 0),
+		def_cmd(tree, 1, 0, 1, 0),
 	};
 	int i;
 
diff --git a/ui-tree.c b/ui-tree.c
index bbc468e..4c1f9cb 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -182,6 +182,7 @@ static int ls_item(const unsigned char *sha1, struct strbuf *base,
 
 static void ls_head(void)
 {
+	cgit_print_layout_start();
 	html("<table summary='tree listing' class='list'>\n");
 	html("<tr class='nohover'>");
 	html("<th class='left'>Mode</th>");
@@ -194,6 +195,7 @@ static void ls_head(void)
 static void ls_tail(void)
 {
 	html("</table>\n");
+	cgit_print_layout_end();
 }
 
 static void ls_tree(const unsigned char *sha1, char *path, struct walk_tree_context *walk_tree_ctx)
@@ -205,7 +207,8 @@ static void ls_tree(const unsigned char *sha1, char *path, struct walk_tree_cont
 
 	tree = parse_tree_indirect(sha1);
 	if (!tree) {
-		cgit_print_error("Not a tree object: %s", sha1_to_hex(sha1));
+		cgit_print_error_page(400, "Bad request",
+			"Not a tree object: %s", sha1_to_hex(sha1));
 		return;
 	}
 
@@ -266,12 +269,14 @@ void cgit_print_tree(const char *rev, char *path)
 		rev = ctx.qry.head;
 
 	if (get_sha1(rev, sha1)) {
-		cgit_print_error("Invalid revision name: %s", rev);
+		cgit_print_error_page(404, "Not found",
+			"Invalid revision name: %s", rev);
 		return;
 	}
 	commit = lookup_commit_reference(sha1);
 	if (!commit || parse_commit(commit)) {
-		cgit_print_error("Invalid commit reference: %s", rev);
+		cgit_print_error_page(404, "Not found",
+			"Invalid commit reference: %s", rev);
 		return;
 	}
 
@@ -285,6 +290,8 @@ void cgit_print_tree(const char *rev, char *path)
 	read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx);
 	if (walk_tree_ctx.state == 1)
 		ls_tail();
+	else
+		cgit_print_error_page(404, "Not found", "Path not found");
 
 cleanup:
 	free(walk_tree_ctx.curr_rev);
-- 
2.4.0.rc0.173.gb1cefcc



More information about the CGit mailing list