merge: Add june's cgit patches to //third_party/cgit

june maintains some patches on https://git.causal.agency/cgit/log/
that seem sensible to include in this tree.
This commit is contained in:
Vincent Ambo 2020-02-21 21:05:02 +00:00
commit d657e878fa
3 changed files with 29 additions and 4 deletions

View file

@ -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); cgit_tree_link("tree", NULL, NULL, ctx.qry.head, rev, path);
html(")\n"); html(")\n");
if (buffer_is_binary(buf, size)) {
html("<div class='error'>blob is binary.</div>");
goto cleanup;
}
if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) { if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) {
htmlf("<div class='error'>blob size (%ldKB)" htmlf("<div class='error'>blob size (%ldKB)"
" exceeds display size limit (%dKB).</div>", " exceeds display size limit (%dKB).</div>",

View file

@ -43,6 +43,7 @@ void cgit_print_commit(char *hex, const char *prefix)
load_ref_decorations(NULL, DECORATE_FULL_REFS); load_ref_decorations(NULL, DECORATE_FULL_REFS);
ctx.page.title = fmtalloc("%s - %s", info->subject, ctx.page.title);
cgit_print_layout_start(); cgit_print_layout_start();
cgit_print_diff_ctrls(); cgit_print_diff_ctrls();
html("<table summary='commit info' class='commit-info'>\n"); html("<table summary='commit info' class='commit-info'>\n");

View file

@ -89,6 +89,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch
enum object_type type; enum object_type type;
char *buf; char *buf;
unsigned long size; unsigned long size;
int is_binary;
type = oid_object_info(the_repository, oid, &size); type = oid_object_info(the_repository, oid, &size);
if (type == OBJ_BAD) { 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)); "Error reading object %s", oid_to_hex(oid));
return; return;
} }
is_binary = buffer_is_binary(buf, size);
cgit_set_title_from_path(path); 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)); htmlf("blob: %s (", oid_to_hex(oid));
cgit_plain_link("plain", NULL, NULL, ctx.qry.head, cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
rev, path); rev, path);
if (ctx.repo->enable_blame) { if (ctx.repo->enable_blame && !is_binary) {
html(") ("); html(") (");
cgit_blame_link("blame", NULL, NULL, ctx.qry.head, cgit_blame_link("blame", NULL, NULL, ctx.qry.head,
rev, path); rev, path);
@ -123,7 +125,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch
return; return;
} }
if (buffer_is_binary(buf, size)) if (is_binary)
print_binary_buffer(buf, size); print_binary_buffer(buf, size);
else else
print_text_buffer(basename, buf, size); print_text_buffer(basename, buf, size);
@ -204,9 +206,11 @@ static int ls_item(const struct object_id *oid, struct strbuf *base,
struct walk_tree_context *walk_tree_ctx = cbdata; struct walk_tree_context *walk_tree_ctx = cbdata;
char *name; char *name;
struct strbuf fullpath = STRBUF_INIT; struct strbuf fullpath = STRBUF_INIT;
struct strbuf linkpath = STRBUF_INIT;
struct strbuf class = STRBUF_INIT; struct strbuf class = STRBUF_INIT;
enum object_type type; enum object_type type;
unsigned long size = 0; unsigned long size = 0;
char *buf;
name = xstrdup(pathname); name = xstrdup(pathname);
strbuf_addf(&fullpath, "%s%s%s", ctx.qry.path ? ctx.qry.path : "", strbuf_addf(&fullpath, "%s%s%s", ctx.qry.path ? ctx.qry.path : "",
@ -218,8 +222,7 @@ static int ls_item(const struct object_id *oid, struct strbuf *base,
htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>", htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>",
name, name,
oid_to_hex(oid)); oid_to_hex(oid));
free(name); goto cleanup;
return 0;
} }
} }
@ -239,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, cgit_tree_link(name, NULL, class.buf, ctx.qry.head,
walk_tree_ctx->curr_rev, fullpath.buf); 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("</td><td class='ls-size'>%li</td>", size); htmlf("</td><td class='ls-size'>%li</td>", size);
html("<td>"); html("<td>");
@ -255,6 +273,8 @@ static int ls_item(const struct object_id *oid, struct strbuf *base,
cgit_blame_link("blame", NULL, "button", ctx.qry.head, cgit_blame_link("blame", NULL, "button", ctx.qry.head,
walk_tree_ctx->curr_rev, fullpath.buf); walk_tree_ctx->curr_rev, fullpath.buf);
html("</td></tr>\n"); html("</td></tr>\n");
cleanup:
free(name); free(name);
strbuf_release(&fullpath); strbuf_release(&fullpath);
strbuf_release(&class); strbuf_release(&class);