aboutsummaryrefslogtreecommitdiffstats
path: root/ui-tree.c
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xinu.at>2018-03-22 11:32:53 +0100
committerFlorian Pritz <bluewind@xinu.at>2018-03-22 11:32:53 +0100
commit343a8b8ee33f9a181e662fc0e3a3979dd9b52dd4 (patch)
tree2be5d6faa22089f8d1b0c1d7e14f283550130370 /ui-tree.c
parente4803632f41cc3f09af6a88511b1d6359be3d325 (diff)
parent33414d7869aa55aaccd45cdb82268d454cb79863 (diff)
downloadcgit-343a8b8ee33f9a181e662fc0e3a3979dd9b52dd4.tar.gz
cgit-343a8b8ee33f9a181e662fc0e3a3979dd9b52dd4.tar.xz
Merge branch 'master' of https://git.zx2c4.com/cgit into local
Diffstat (limited to 'ui-tree.c')
-rw-r--r--ui-tree.c63
1 files changed, 20 insertions, 43 deletions
diff --git a/ui-tree.c b/ui-tree.c
index b310242..67fd1bc 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -1,6 +1,6 @@
/* ui-tree.c: functions for tree output
*
- * Copyright (C) 2006-2014 cgit Development Team <cgit@lists.zx2c4.com>
+ * Copyright (C) 2006-2017 cgit Development Team <cgit@lists.zx2c4.com>
*
* Licensed under GNU General Public License v2
* (see COPYING for full license text)
@@ -84,37 +84,6 @@ static void print_binary_buffer(char *buf, unsigned long size)
html("</table>\n");
}
-static void set_title_from_path(const char *path)
-{
- size_t path_len, path_index, path_last_end;
- char *new_title;
-
- if (!path)
- return;
-
- path_len = strlen(path);
- new_title = xmalloc(path_len + 3 + strlen(ctx.page.title) + 1);
- new_title[0] = '\0';
-
- for (path_index = path_len, path_last_end = path_len; path_index-- > 0;) {
- if (path[path_index] == '/') {
- if (path_index == path_len - 1) {
- path_last_end = path_index - 1;
- continue;
- }
- strncat(new_title, &path[path_index + 1], path_last_end - path_index - 1);
- strcat(new_title, "\\");
- path_last_end = path_index;
- }
- }
- if (path_last_end)
- strncat(new_title, path, path_last_end);
-
- strcat(new_title, " - ");
- strcat(new_title, ctx.page.title);
- ctx.page.title = new_title;
-}
-
static void print_object(const unsigned char *sha1, char *path, const char *basename, const char *rev)
{
enum object_type type;
@@ -135,12 +104,17 @@ static void print_object(const unsigned char *sha1, char *path, const char *base
return;
}
- set_title_from_path(path);
+ cgit_set_title_from_path(path);
cgit_print_layout_start();
htmlf("blob: %s (", sha1_to_hex(sha1));
cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
rev, path);
+ if (ctx.cfg.enable_blame) {
+ html(") (");
+ cgit_blame_link("blame", NULL, NULL, ctx.qry.head,
+ rev, path);
+ }
html(")\n");
if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) {
@@ -157,7 +131,7 @@ static void print_object(const unsigned char *sha1, char *path, const char *base
struct single_tree_ctx {
struct strbuf *path;
- unsigned char sha1[GIT_SHA1_RAWSZ];
+ struct object_id oid;
char *name;
size_t count;
};
@@ -177,7 +151,7 @@ static int single_tree_cb(const unsigned char *sha1, struct strbuf *base,
}
ctx->name = xstrdup(pathname);
- hashcpy(ctx->sha1, sha1);
+ hashcpy(ctx->oid.hash, sha1);
strbuf_addf(ctx->path, "/%s", pathname);
return 0;
}
@@ -195,13 +169,13 @@ static void write_tree_link(const unsigned char *sha1, char *name,
.nr = 0
};
- hashcpy(tree_ctx.sha1, sha1);
+ hashcpy(tree_ctx.oid.hash, sha1);
while (tree_ctx.count == 1) {
cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, rev,
fullpath->buf);
- tree = lookup_tree(tree_ctx.sha1);
+ tree = lookup_tree(&tree_ctx.oid);
if (!tree)
return;
@@ -275,6 +249,9 @@ static int ls_item(const unsigned char *sha1, struct strbuf *base,
if (!S_ISGITLINK(mode))
cgit_plain_link("plain", NULL, "button", ctx.qry.head,
walk_tree_ctx->curr_rev, fullpath.buf);
+ if (!S_ISDIR(mode) && ctx.cfg.enable_blame)
+ cgit_blame_link("blame", NULL, "button", ctx.qry.head,
+ walk_tree_ctx->curr_rev, fullpath.buf);
html("</td></tr>\n");
free(name);
strbuf_release(&fullpath);
@@ -300,17 +277,17 @@ static void ls_tail(void)
cgit_print_layout_end();
}
-static void ls_tree(const unsigned char *sha1, char *path, struct walk_tree_context *walk_tree_ctx)
+static void ls_tree(const struct object_id *oid, char *path, struct walk_tree_context *walk_tree_ctx)
{
struct tree *tree;
struct pathspec paths = {
.nr = 0
};
- tree = parse_tree_indirect(sha1);
+ tree = parse_tree_indirect(oid);
if (!tree) {
cgit_print_error_page(404, "Not found",
- "Not a tree object: %s", sha1_to_hex(sha1));
+ "Not a tree object: %s", sha1_to_hex(oid->hash));
return;
}
@@ -335,7 +312,7 @@ static int walk_tree(const unsigned char *sha1, struct strbuf *base,
if (S_ISDIR(mode)) {
walk_tree_ctx->state = 1;
- set_title_from_path(buffer.buf);
+ cgit_set_title_from_path(buffer.buf);
strbuf_release(&buffer);
ls_head();
return READ_TREE_RECURSIVE;
@@ -380,7 +357,7 @@ void cgit_print_tree(const char *rev, char *path)
"Invalid revision name: %s", rev);
return;
}
- commit = lookup_commit_reference(oid.hash);
+ commit = lookup_commit_reference(&oid);
if (!commit || parse_commit(commit)) {
cgit_print_error_page(404, "Not found",
"Invalid commit reference: %s", rev);
@@ -390,7 +367,7 @@ void cgit_print_tree(const char *rev, char *path)
walk_tree_ctx.curr_rev = xstrdup(rev);
if (path == NULL) {
- ls_tree(commit->tree->object.oid.hash, NULL, &walk_tree_ctx);
+ ls_tree(&commit->tree->object.oid, NULL, &walk_tree_ctx);
goto cleanup;
}