about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Keeping <john@keeping.me.uk>2015-08-14 12:47:20 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2015-08-14 15:46:51 +0200
commit9c70c0bfdb71b39f6bae6e0c77bbe40b22d64ff5 (patch)
tree58bdde199abc58de3adde3d24ea47acd93bd577a
parenttag: move layout into page function (diff)
downloadcgit-pink-9c70c0bfdb71b39f6bae6e0c77bbe40b22d64ff5.tar.gz
cgit-pink-9c70c0bfdb71b39f6bae6e0c77bbe40b22d64ff5.zip
tree: move layout into page function
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@keeping.me.uk>
-rw-r--r--cmd.c2
-rw-r--r--ui-tree.c23
2 files changed, 19 insertions, 6 deletions
diff --git a/cmd.c b/cmd.c
index 54961d9..3c90d0b 100644
--- a/cmd.c
+++ b/cmd.c
@@ -172,7 +172,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 2dbe89e..1b310d5 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -92,16 +92,19 @@ static void print_object(const unsigned char *sha1, char *path, const char *base
 
 	type = sha1_object_info(sha1, &size);
 	if (type == OBJ_BAD) {
-		cgit_print_error("Bad object name: %s", sha1_to_hex(sha1));
+		cgit_print_error_page(404, "Not found",
+			"Bad object name: %s", sha1_to_hex(sha1));
 		return;
 	}
 
 	buf = read_sha1_file(sha1, &type, &size);
 	if (!buf) {
-		cgit_print_error("Error reading object %s", sha1_to_hex(sha1));
+		cgit_print_error_page(500, "Internal server error",
+			"Error reading object %s", sha1_to_hex(sha1));
 		return;
 	}
 
+	cgit_print_layout_start();
 	htmlf("blob: %s (", sha1_to_hex(sha1));
 	cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
 		        rev, path);
@@ -181,6 +184,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>");
@@ -193,6 +197,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)
@@ -204,7 +209,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(404, "Not found",
+			"Not a tree object: %s", sha1_to_hex(sha1));
 		return;
 	}
 
@@ -231,6 +237,7 @@ static int walk_tree(const unsigned char *sha1, struct strbuf *base,
 			ls_head();
 			return READ_TREE_RECURSIVE;
 		} else {
+			walk_tree_ctx->state = 2;
 			print_object(sha1, buffer, pathname, walk_tree_ctx->curr_rev);
 			return 0;
 		}
@@ -265,12 +272,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;
 	}
 
@@ -284,6 +293,10 @@ 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 if (walk_tree_ctx.state == 2)
+		cgit_print_layout_end();
+	else
+		cgit_print_error_page(404, "Not found", "Path not found");
 
 cleanup:
 	free(walk_tree_ctx.curr_rev);
>Remove NetBSD from install scriptJune McEnroe I never use it. 2020-09-11Use MacPorts rather than pkgsrcJune McEnroe My system is probably such a mess now... 2020-09-11Add debian VM name to sshJune McEnroe 2020-09-11Add influencer tweetJune McEnroe 2020-09-10Add The Kingdom of GodsJune McEnroe Reading has really slowed down :( 2020-09-07Add SunglassesJune McEnroe An IRC find. 2020-09-06Add Between the BreathsJune McEnroe One of those good songs from a soundtrack of a film that probably isn't? The summary sounds a lot more interesting than the title implies, at least. 2020-09-04Open /dev/tty in nudgeJune McEnroe This makes it work even when it's run connected to a pipe, i.e. as the notify command of catgirl... 2020-09-04Add nudgeJune McEnroe 2020-09-03Build fbclock with -lzJune McEnroe I guess this got lost somewhere, long ago... 2020-08-29Add tweets from retweetsJune McEnroe