X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/94b7c76e531315b245f79a9e2dfd0655e6e45fee..fdfb6a6d802d6b91061296eda9848d5819760d01:/ui-shared.c diff --git a/ui-shared.c b/ui-shared.c index 3e9282f..43166af 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -294,7 +294,7 @@ void cgit_log_link(const char *name, const char *title, const char *class, char *delim; delim = repolink(title, class, "log", head, path); - if (rev && strcmp(rev, ctx.qry.head)) { + if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); @@ -338,7 +338,7 @@ void cgit_commit_link(char *name, const char *title, const char *class, char *delim; delim = repolink(title, class, "commit", head, path); - if (rev && strcmp(rev, ctx.qry.head)) { + if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); @@ -509,6 +509,62 @@ void cgit_object_link(struct object *obj) reporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL); } +struct string_list_item *lookup_path(struct string_list *list, + const char *path) +{ + struct string_list_item *item; + + while (path && path[0]) { + if ((item = string_list_lookup(list, path))) + return item; + if (!(path = strchr(path, '/'))) + break; + path++; + } + return NULL; +} + +void cgit_submodule_link(const char *class, char *path, const char *rev) +{ + struct string_list *list; + struct string_list_item *item; + char tail, *dir; + size_t len; + + tail = 0; + list = &ctx.repo->submodules; + item = lookup_path(list, path); + if (!item) { + len = strlen(path); + tail = path[len - 1]; + if (tail == '/') { + path[len - 1] = 0; + item = lookup_path(list, path); + } + } + html("module_link, dir, rev)); + } else { + html("#"); + } + html("'>"); + html_txt(path); + html(""); + if (item && tail) + path[len - 1] = tail; +} + void cgit_print_date(time_t secs, const char *format, int local_time) { char buf[64];