X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/590ba455d694deaf2ec206510cf7f047ac365a96..9337c7ee83221d48d02c3c7b5c9dcbaca23ad92f:/ui-shared.c
diff --git a/ui-shared.c b/ui-shared.c
index e39d004..2547e43 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -66,10 +66,11 @@ char *cgit_hosturl(void)
char *cgit_currenturl(void)
{
- if (!ctx.qry.url)
- return xstrdup(cgit_rooturl());
const char *root = cgit_rooturl();
size_t len = strlen(root);
+
+ if (!ctx.qry.url)
+ return xstrdup(root);
if (len && root[len - 1] == '/')
return fmtalloc("%s%s", root, ctx.qry.url);
return fmtalloc("%s/%s", root, ctx.qry.url);
@@ -349,6 +350,8 @@ void cgit_log_link(const char *name, const char *title, const char *class,
void cgit_commit_link(char *name, const char *title, const char *class,
const char *head, const char *rev, const char *path)
{
+ char *delim;
+
if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) {
name[ctx.cfg.max_msg_len] = '\0';
name[ctx.cfg.max_msg_len - 1] = '.';
@@ -356,8 +359,6 @@ void cgit_commit_link(char *name, const char *title, const char *class,
name[ctx.cfg.max_msg_len - 3] = '.';
}
- char *delim;
-
delim = repolink(title, class, "commit", head, path);
if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) {
html(delim);
@@ -714,13 +715,14 @@ static void print_rel_vcs_link(const char *url)
void cgit_print_docstart(void)
{
+ char *host = cgit_hosturl();
+
if (ctx.cfg.embedded) {
if (ctx.cfg.header)
html_include(ctx.cfg.header);
return;
}
- char *host = cgit_hosturl();
html(cgit_doctype);
html("\n");
html("
\n");
@@ -1037,7 +1039,7 @@ void cgit_print_pageheader(void)
free(currenturl);
}
html("\n");
- if (ctx.env.authenticated && ctx.qry.vpath) {
+ if (ctx.env.authenticated && ctx.repo && ctx.qry.vpath) {
html("");
html("path: ");
cgit_print_path_crumbs(ctx.qry.vpath);
@@ -1072,18 +1074,18 @@ void cgit_print_filemode(unsigned short mode)
void cgit_compose_snapshot_prefix(struct strbuf *filename, const char *base,
const char *ref)
{
- unsigned char sha1[20];
+ struct object_id oid;
/*
* Prettify snapshot names by stripping leading "v" or "V" if the tag
* name starts with {v,V}[0-9] and the prettify mapping is injective,
* i.e. each stripped tag can be inverted without ambiguities.
*/
- if (get_sha1(fmt("refs/tags/%s", ref), sha1) == 0 &&
+ if (get_oid(fmt("refs/tags/%s", ref), &oid) == 0 &&
(ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1]) &&
- ((get_sha1(fmt("refs/tags/%s", ref + 1), sha1) == 0) +
- (get_sha1(fmt("refs/tags/v%s", ref + 1), sha1) == 0) +
- (get_sha1(fmt("refs/tags/V%s", ref + 1), sha1) == 0) == 1))
+ ((get_oid(fmt("refs/tags/%s", ref + 1), &oid) == 0) +
+ (get_oid(fmt("refs/tags/v%s", ref + 1), &oid) == 0) +
+ (get_oid(fmt("refs/tags/V%s", ref + 1), &oid) == 0) == 1))
ref++;
strbuf_addf(filename, "%s-%s", base, ref);
@@ -1109,3 +1111,34 @@ void cgit_print_snapshot_links(const char *repo, const char *head,
}
strbuf_release(&filename);
}
+
+void cgit_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;
+}