aboutsummaryrefslogtreecommitdiffstats
path: root/ui-shared.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui-shared.c')
-rw-r--r--ui-shared.c70
1 files changed, 52 insertions, 18 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 9d8f66b..739505a 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -10,6 +10,7 @@
#include "ui-shared.h"
#include "cmd.h"
#include "html.h"
+#include "version.h"
static const char cgit_doctype[] =
"<!DOCTYPE html>\n";
@@ -132,25 +133,38 @@ const char *cgit_repobasename(const char *reponame)
static char rvbuf[1024];
int p;
const char *rv;
- strncpy(rvbuf, reponame, sizeof(rvbuf));
- if (rvbuf[sizeof(rvbuf)-1])
+ size_t len;
+
+ len = strlcpy(rvbuf, reponame, sizeof(rvbuf));
+ if (len >= sizeof(rvbuf))
die("cgit_repobasename: truncated repository name '%s'", reponame);
- p = strlen(rvbuf)-1;
+ p = len - 1;
/* strip trailing slashes */
- while (p && rvbuf[p] == '/') rvbuf[p--] = 0;
+ while (p && rvbuf[p] == '/')
+ rvbuf[p--] = '\0';
/* strip trailing .git */
if (p >= 3 && starts_with(&rvbuf[p-3], ".git")) {
- p -= 3; rvbuf[p--] = 0;
+ p -= 3;
+ rvbuf[p--] = '\0';
}
/* strip more trailing slashes if any */
- while ( p && rvbuf[p] == '/') rvbuf[p--] = 0;
+ while (p && rvbuf[p] == '/')
+ rvbuf[p--] = '\0';
/* find last slash in the remaining string */
- rv = strrchr(rvbuf,'/');
+ rv = strrchr(rvbuf, '/');
if (rv)
return ++rv;
return rvbuf;
}
+const char *cgit_snapshot_prefix(const struct cgit_repo *repo)
+{
+ if (repo->snapshot_prefix)
+ return repo->snapshot_prefix;
+
+ return cgit_repobasename(repo->url);
+}
+
static void site_url(const char *page, const char *search, const char *sort, int ofs, int always_root)
{
char *delim = "?";
@@ -545,7 +559,7 @@ void cgit_object_link(struct object *obj)
page = "tag";
else
page = "blob";
- name = fmt("%s %s...", typename(obj->type), shortrev);
+ name = fmt("%s %s...", type_name(obj->type), shortrev);
reporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL);
}
@@ -766,6 +780,8 @@ void cgit_print_docstart(void)
cgit_add_clone_urls(print_rel_vcs_link);
if (ctx.cfg.head_include)
html_include(ctx.cfg.head_include);
+ if (ctx.repo && ctx.repo->extra_head_content)
+ html(ctx.repo->extra_head_content);
html("</head>\n");
html("<body>\n");
if (ctx.cfg.header)
@@ -785,8 +801,8 @@ void cgit_print_docend(void)
if (ctx.cfg.footer)
html_include(ctx.cfg.footer);
else {
- htmlf("<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit %s</a> at ",
- cgit_version);
+ htmlf("<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit %s</a> "
+ "(<a href='https://git-scm.com/'>git %s</a>) at ", cgit_version, git_version_string);
html_txt(show_date(time(NULL), 0, cgit_date_mode(DATE_ISO8601)));
html("</div>\n");
}
@@ -968,8 +984,6 @@ static void print_header(void)
} else {
if (ctx.cfg.root_desc)
html_txt(ctx.cfg.root_desc);
- else if (ctx.cfg.index_info)
- html_include(ctx.cfg.index_info);
}
html("</td></tr></table>\n");
}
@@ -1102,23 +1116,43 @@ void cgit_compose_snapshot_prefix(struct strbuf *filename, const char *base,
strbuf_addf(filename, "%s-%s", base, ref);
}
-void cgit_print_snapshot_links(const char *repo, const char *head,
- const char *hex, int snapshots)
+void cgit_print_snapshot_links(const struct cgit_repo *repo, const char *ref,
+ const char *separator)
{
- const struct cgit_snapshot_format* f;
+ const struct cgit_snapshot_format *f;
struct strbuf filename = STRBUF_INIT;
+ const char *basename;
size_t prefixlen;
- cgit_compose_snapshot_prefix(&filename, cgit_repobasename(repo), hex);
+ basename = cgit_snapshot_prefix(repo);
+ if (starts_with(ref, basename))
+ strbuf_addstr(&filename, ref);
+ else
+ cgit_compose_snapshot_prefix(&filename, basename, ref);
+
prefixlen = filename.len;
for (f = cgit_snapshot_formats; f->suffix; f++) {
- if (!(snapshots & f->bit))
+ if (!(repo->snapshots & cgit_snapshot_format_bit(f)))
continue;
strbuf_setlen(&filename, prefixlen);
strbuf_addstr(&filename, f->suffix);
cgit_snapshot_link(filename.buf, NULL, NULL, NULL, NULL,
filename.buf);
- html("<br/>");
+ if (cgit_snapshot_get_sig(ref, f)) {
+ strbuf_addstr(&filename, ".asc");
+ html(" (");
+ cgit_snapshot_link("sig", NULL, NULL, NULL, NULL,
+ filename.buf);
+ html(")");
+ } else if (starts_with(f->suffix, ".tar") && cgit_snapshot_get_sig(ref, &cgit_snapshot_formats[0])) {
+ strbuf_setlen(&filename, strlen(filename.buf) - strlen(f->suffix));
+ strbuf_addstr(&filename, ".tar.asc");
+ html(" (");
+ cgit_snapshot_link("sig", NULL, NULL, NULL, NULL,
+ filename.buf);
+ html(")");
+ }
+ html(separator);
}
strbuf_release(&filename);
}