[PATCH] add new option atom-root

Daniel Reichelt hacking at nachtgeist.net
Thu Aug 13 06:49:20 CEST 2015


In reverse-proxy setups cgit's auto-determination of the hostname doesn't
work. When set, this option will be used as prefix to all atom-related
URLs. While the rest of cgit's URLs are not absolute, this option, if set,
should be absolute and include a scheme. Default value: none.

Signed-off-by: Daniel Reichelt <hacking at nachtgeist.net>
---
 cgit.c       |  2 ++
 cgit.h       |  1 +
 cgitrc.5.txt |  6 ++++++
 ui-atom.c    | 16 ++++++++++++----
 ui-shared.c  |  8 ++++++--
 5 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/cgit.c b/cgit.c
index d84b4be..351f9bd 100644
--- a/cgit.c
+++ b/cgit.c
@@ -142,6 +142,8 @@ static void config_cb(const char *name, const char *value)
 		ctx.cfg.strict_export = xstrdup(value);
 	else if (!strcmp(name, "virtual-root")) {
 		ctx.cfg.virtual_root = ensure_end(value, '/');
+	} else if (!strcmp(name, "atom-root")) {
+		ctx.cfg.atom_root = xstrdup(value);
 	} else if (!strcmp(name, "nocache"))
 		ctx.cfg.nocache = atoi(value);
 	else if (!strcmp(name, "noplainemail"))
diff --git a/cgit.h b/cgit.h
index 3120562..a3bb3aa 100644
--- a/cgit.h
+++ b/cgit.h
@@ -209,6 +209,7 @@ struct cgit_config {
 	char *section;
 	char *repository_sort;
 	char *virtual_root;	/* Always ends with '/'. */
+	char *atom_root;
 	char *strict_export;
 	int cache_size;
 	int cache_dynamic_ttl;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 759f353..4cb5be9 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -42,6 +42,12 @@ agefile::
 	hh:mm:ss". You may want to generate this file from a post-receive
 	hook. Default value: "info/web/last-modified".
 
+atom-root::
+	In reverse-proxy setups cgit's auto-determination of the hostname doesn't
+	work. When set, this option will be used as prefix to all atom-related
+	URLs. While the rest of cgit's URLs are not absolute, this option, if set,
+	should be absolute and include a scheme. Default value: none.
+
 auth-filter::
 	Specifies a command that will be invoked for authenticating repository
 	access. Receives quite a few arguments, and data on both stdin and
diff --git a/ui-atom.c b/ui-atom.c
index e2b39ee..038a168 100644
--- a/ui-atom.c
+++ b/ui-atom.c
@@ -54,8 +54,12 @@ static void add_entry(struct commit *commit, const char *host)
 	html("</published>\n");
 	if (host) {
 		html("<link rel='alternate' type='text/html' href='");
-		html(cgit_httpscheme());
-		html_attr(host);
+		if (ctx.cfg.atom_root) {
+			html(ctx.cfg.atom_root);
+		} else {
+			html(cgit_httpscheme());
+			html_attr(host);
+		}
 		html_attr(cgit_pageurl(ctx.repo->url, "commit", NULL));
 		if (ctx.cfg.virtual_root)
 			delim = '?';
@@ -126,8 +130,12 @@ void cgit_print_atom(char *tip, char *path, int max_count)
 	html("</subtitle>\n");
 	if (host) {
 		html("<link rel='alternate' type='text/html' href='");
-		html(cgit_httpscheme());
-		html_attr(host);
+		if (ctx.cfg.atom_root) {
+			html(ctx.cfg.atom_root);
+		} else {
+			html(cgit_httpscheme());
+			html_attr(host);
+		}
 		html_attr(cgit_repourl(ctx.repo->url));
 		html("'/>\n");
 	}
diff --git a/ui-shared.c b/ui-shared.c
index 6be0c2e..a051cd8 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -751,8 +751,12 @@ void cgit_print_docstart(void)
 		strbuf_addf(&sb, "h=%s", ctx.qry.head);
 
 		html("<link rel='alternate' title='Atom feed' href='");
-		html(cgit_httpscheme());
-		html_attr(cgit_hosturl());
+		if (ctx.cfg.atom_root) {
+			html(ctx.cfg.atom_root);
+		} else {
+			html(cgit_httpscheme());
+			html_attr(host);
+		}
 		html_attr(cgit_fileurl(ctx.repo->url, "atom", ctx.qry.vpath,
 				       sb.buf));
 		html("' type='application/atom+xml'/>\n");
-- 
2.1.4




More information about the CGit mailing list