From mboxrd@z Thu Jan 1 00:00:00 1970 From: john at keeping.me.uk (John Keeping) Date: Sun, 5 Apr 2015 16:55:02 +0100 Subject: [PATCH 16/17] tree: move layout into page function In-Reply-To: References: Message-ID: <4a6b6be5e33d5d8a0d8ec8d6e8776a895a960b26.1428248621.git.john@keeping.me.uk> 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 --- 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("\n"); html(""); html(""); @@ -194,6 +195,7 @@ static void ls_head(void) static void ls_tail(void) { html("
Mode
\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