From 37b0b37771f066775120e8f3932bd68c34d57e8a Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Wed, 18 Dec 2019 21:30:12 +0000 Subject: feat(cgit/ui-blame): bail if blob is binary This avoids piping binary blobs through the source-filter. --- third_party/cgit/ui-blame.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'third_party/cgit') diff --git a/third_party/cgit/ui-blame.c b/third_party/cgit/ui-blame.c index 45fe191344f3..886c4c19fd1d 100644 --- a/third_party/cgit/ui-blame.c +++ b/third_party/cgit/ui-blame.c @@ -151,6 +151,10 @@ static void print_object(const struct object_id *oid, const char *path, cgit_tree_link("tree", NULL, NULL, ctx.qry.head, rev, path); html(")\n"); + if (buffer_is_binary(buf, size)) { + html("
blob is binary.
"); + goto cleanup; + } if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) { htmlf("
blob size (%ldKB)" " exceeds display size limit (%dKB).
", -- cgit 1.4.1 From 6932c431bb4374ae357d08577f52ede0929502ef Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Wed, 18 Dec 2019 21:32:58 +0000 Subject: feat(cgit/ui-tree): don't link to blame for binary blobs --- third_party/cgit/ui-tree.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'third_party/cgit') diff --git a/third_party/cgit/ui-tree.c b/third_party/cgit/ui-tree.c index 84eb17d6470d..c4f2dac466aa 100644 --- a/third_party/cgit/ui-tree.c +++ b/third_party/cgit/ui-tree.c @@ -89,6 +89,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch enum object_type type; char *buf; unsigned long size; + int is_binary; type = oid_object_info(the_repository, oid, &size); if (type == OBJ_BAD) { @@ -103,6 +104,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch "Error reading object %s", oid_to_hex(oid)); return; } + is_binary = buffer_is_binary(buf, size); cgit_set_title_from_path(path); @@ -110,7 +112,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch htmlf("blob: %s (", oid_to_hex(oid)); cgit_plain_link("plain", NULL, NULL, ctx.qry.head, rev, path); - if (ctx.repo->enable_blame) { + if (ctx.repo->enable_blame && !is_binary) { html(") ("); cgit_blame_link("blame", NULL, NULL, ctx.qry.head, rev, path); @@ -123,7 +125,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch return; } - if (buffer_is_binary(buf, size)) + if (is_binary) print_binary_buffer(buf, size); else print_text_buffer(basename, buf, size); -- cgit 1.4.1 From b503c2afcf166ea002a15fa84f42a998caafa152 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Thu, 19 Dec 2019 21:55:05 +0000 Subject: feat(cgit/ui-tree): show symlink targets in tree listing Add links to symbolic link targets in tree listings, formatted like "ls -l". Path normalization collapses any ".." components of the link. --- third_party/cgit/ui-tree.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'third_party/cgit') diff --git a/third_party/cgit/ui-tree.c b/third_party/cgit/ui-tree.c index c4f2dac466aa..2c6d23ec519a 100644 --- a/third_party/cgit/ui-tree.c +++ b/third_party/cgit/ui-tree.c @@ -206,9 +206,11 @@ static int ls_item(const struct object_id *oid, struct strbuf *base, struct walk_tree_context *walk_tree_ctx = cbdata; char *name; struct strbuf fullpath = STRBUF_INIT; + struct strbuf linkpath = STRBUF_INIT; struct strbuf class = STRBUF_INIT; enum object_type type; unsigned long size = 0; + char *buf; name = xstrdup(pathname); strbuf_addf(&fullpath, "%s%s%s", ctx.qry.path ? ctx.qry.path : "", @@ -220,8 +222,7 @@ static int ls_item(const struct object_id *oid, struct strbuf *base, htmlf("Bad object: %s %s", name, oid_to_hex(oid)); - free(name); - return 0; + goto cleanup; } } @@ -241,6 +242,21 @@ static int ls_item(const struct object_id *oid, struct strbuf *base, cgit_tree_link(name, NULL, class.buf, ctx.qry.head, walk_tree_ctx->curr_rev, fullpath.buf); } + if (S_ISLNK(mode)) { + html(" -> "); + buf = read_object_file(oid, &type, &size); + if (!buf) { + htmlf("Error reading object: %s", oid_to_hex(oid)); + goto cleanup; + } + strbuf_addbuf(&linkpath, &fullpath); + strbuf_addf(&linkpath, "/../%s", buf); + strbuf_normalize_path(&linkpath); + cgit_tree_link(buf, NULL, class.buf, ctx.qry.head, + walk_tree_ctx->curr_rev, linkpath.buf); + free(buf); + strbuf_release(&linkpath); + } htmlf("%li", size); html(""); @@ -257,6 +273,8 @@ static int ls_item(const struct object_id *oid, struct strbuf *base, cgit_blame_link("blame", NULL, "button", ctx.qry.head, walk_tree_ctx->curr_rev, fullpath.buf); html("\n"); + +cleanup: free(name); strbuf_release(&fullpath); strbuf_release(&class); -- cgit 1.4.1 From cd8a9f7b27ec43ce7a809e86a2d26236ccf1bb41 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 21 Feb 2020 08:07:50 +0000 Subject: feat(cgit/ui-commit): show subject in page title --- third_party/cgit/ui-commit.c | 1 + 1 file changed, 1 insertion(+) (limited to 'third_party/cgit') diff --git a/third_party/cgit/ui-commit.c b/third_party/cgit/ui-commit.c index b98c77f6a8ce..f7942e10fa01 100644 --- a/third_party/cgit/ui-commit.c +++ b/third_party/cgit/ui-commit.c @@ -43,6 +43,7 @@ void cgit_print_commit(char *hex, const char *prefix) load_ref_decorations(NULL, DECORATE_FULL_REFS); + ctx.page.title = fmtalloc("%s - %s", info->subject, ctx.page.title); cgit_print_layout_start(); cgit_print_diff_ctrls(); html("\n"); -- cgit 1.4.1