]> git.cameronkatri.com Git - cgit.git/blobdiff - ui-shared.c
ui-shared: don't print path crumbs without a repo
[cgit.git] / ui-shared.c
index b1a6c46be57f18576d3c1a57008029382f2417cb..e5c9a02f9f08773eda336ba603ecd74edcf38953 100644 (file)
@@ -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);
@@ -253,7 +254,7 @@ static char *repolink(const char *title, const char *class, const char *page,
                }
                delim = "&";
        }
-       if (head && strcmp(head, ctx.repo->defbranch)) {
+       if (head && ctx.repo->defbranch && strcmp(head, ctx.repo->defbranch)) {
                html(delim);
                html("h=");
                html_url_arg(head);
@@ -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("<html lang='en'>\n");
        html("<head>\n");
@@ -1037,7 +1039,7 @@ void cgit_print_pageheader(void)
                free(currenturl);
        }
        html("</td></tr></table>\n");
-       if (ctx.env.authenticated && ctx.qry.vpath) {
+       if (ctx.env.authenticated && ctx.repo && ctx.qry.vpath) {
                html("<div class='path'>");
                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);