From 5b494e1b636f4c26c14c9cf8f964bef0a70c784a Mon Sep 17 00:00:00 2001
From: intrigeri <intrigeri@boum.org>
Date: Mon, 20 Dec 2010 15:21:49 +0100
Subject: [PATCH] mirrorlist: new mirrorlist_use_cgi boolean setting.

When set to true, let each mirror's ikiwiki CGI find out the correct target page
url themselves.

This resolves the usecase described on
[[todo/mirrorlist_with_per-mirror_usedirs_settings]].

Signed-off-by: intrigeri <intrigeri@boum.org>
---
 IkiWiki/Plugin/mirrorlist.pm | 17 ++++++++++++++++-
 doc/plugins/mirrorlist.mdwn  | 15 +++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/IkiWiki/Plugin/mirrorlist.pm b/IkiWiki/Plugin/mirrorlist.pm
index f54d94ad5..b7e532485 100644
--- a/IkiWiki/Plugin/mirrorlist.pm
+++ b/IkiWiki/Plugin/mirrorlist.pm
@@ -24,6 +24,19 @@ sub getsetup () {
 			safe => 1,
 			rebuild => 1,
 		},
+		mirrorlist_use_cgi => {
+			type => 'boolean',
+			example => 1,
+			description => "generate links that point to the mirrors' ikiwiki CGI",
+			safe => 1,
+			rebuild => 1,
+		},
+}
+
+sub checkconfig () {
+	if (! defined $config{mirrorlist_use_cgi}) {
+		$config{mirrorlist_use_cgi}=0;
+	}
 }
 
 sub pagetemplate (@) {
@@ -46,7 +59,9 @@ sub mirrorlist ($) {
 		join(", ",
 			map { 
 				qq{<a href="}.
-				$config{mirrorlist}->{$_}."/".urlto($page, "").
+				( $config{mirrorlist_use_cgi} ?
+				  $config{mirrorlist}->{$_}."?do=goto&page=$page" :
+				  $config{mirrorlist}->{$_}."/".urlto($page, "") ).
 				qq{">$_</a>}
 			} keys %{$config{mirrorlist}}
 		).
diff --git a/doc/plugins/mirrorlist.mdwn b/doc/plugins/mirrorlist.mdwn
index aedc1f4a0..b63685813 100644
--- a/doc/plugins/mirrorlist.mdwn
+++ b/doc/plugins/mirrorlist.mdwn
@@ -5,3 +5,18 @@ This plugin allows adding links a list of mirrors to each page in the
 wiki. For each mirror, a name and an url should be specified. Pages are
 assumed to exist in the same location under the specified url on each
 mirror.
+
+In case the `usedirs` setting is not the same on all your mirrors, or
+if it is not the same on your local wiki as on the mirror a
+possibility is to let each mirror's ikiwiki CGI find out the correct
+target page url themselves; in that case the mirrors urls must be set
+to their ikiwiki CGI url instead of their base url. Example:
+
+	mirrorlist_use_cgi => 1,
+	mirrorlist => {
+		'mirror1' => 'https://mirror.example.org/ikiwiki.cgi',
+		'mirror2' => 'https://mirror2.example.org/ikiwiki.cgi',
+	},
+
+The mirrors must have the ikiwiki CGI and the [[goto]] plugin enabled
+for this to work.
-- 
2.26.2