X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/e3d3fffdd447cdb4551549faae65bae5353a2cab..d7034806a4b1279f62d606501f831dcad31798e6:/ui-shared.c
diff --git a/ui-shared.c b/ui-shared.c
index 6d3cfa9..4f84b7c 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -11,7 +11,7 @@
#include "cmd.h"
#include "html.h"
-const char cgit_doctype[] =
+static const char cgit_doctype[] =
"\n";
@@ -69,7 +69,11 @@ const char *cgit_currenturl(void)
{
if (!ctx.qry.url)
return cgit_rooturl();
- return ctx.qry.url;
+ const char *root = cgit_rooturl();
+ size_t len = strlen(root);
+ if (len && root[len - 1] == '/')
+ return fmtalloc("%s%s", root, ctx.qry.url);
+ return fmtalloc("%s/%s", root, ctx.qry.url);
}
const char *cgit_rooturl(void)
@@ -82,7 +86,7 @@ const char *cgit_rooturl(void)
const char *cgit_loginurl(void)
{
- static const char *login_url = 0;
+ static const char *login_url;
if (!login_url)
login_url = fmtalloc("%s?p=login", cgit_rooturl());
return login_url;
@@ -119,7 +123,7 @@ char *cgit_fileurl(const char *reponame, const char *pagename,
char *cgit_pageurl(const char *reponame, const char *pagename,
const char *query)
{
- return cgit_fileurl(reponame, pagename, 0, query);
+ return cgit_fileurl(reponame, pagename, NULL, query);
}
const char *cgit_repobasename(const char *reponame)
@@ -555,25 +559,32 @@ void cgit_submodule_link(const char *class, char *path, const char *rev)
item = lookup_path(list, path);
}
}
- html("util, rev);
- } else if (ctx.repo->module_link) {
- dir = strrchr(path, '/');
- if (dir)
- dir++;
- else
- dir = path;
- html_attrf(ctx.repo->module_link, dir, rev);
+ if (item || ctx.repo->module_link) {
+ html("util, rev);
+ } else {
+ dir = strrchr(path, '/');
+ if (dir)
+ dir++;
+ else
+ dir = path;
+ html_attrf(ctx.repo->module_link, dir, rev);
+ }
+ html("'>");
+ html_txt(path);
+ html("");
} else {
- html("#");
+ html("");
+ html_txt(path);
+ html("");
}
- html("'>");
- html_txt(path);
- html("");
html_txtf(" @ %.7s", rev);
if (item && tail)
path[len - 1] = tail;
@@ -678,6 +689,14 @@ void cgit_print_http_headers(void)
exit(0);
}
+void cgit_redirect(const char *url, bool permanent)
+{
+ htmlf("Status: %d %s\n", permanent ? 301 : 302, permanent ? "Moved" : "Found");
+ htmlf("Location: %s\n", url);
+ htmlf("\n");
+ exit(0);
+}
+
static void print_rel_vcs_link(const char *url)
{
html("\n");
for_each_branch_ref(print_branch_option, ctx.qry.head);
+ if (ctx.repo->enable_remote_branches)
+ for_each_remote_ref(print_branch_option, ctx.qry.head);
html(" ");
html("");
html("");