From: Joey Hess Date: Mon, 29 Nov 2010 18:43:57 +0000 (-0400) Subject: Merge remote branch 'smcv/ready/localurl' X-Git-Tag: 3.20101231~106 X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/0ae1e4cc0e598eacfeb508d11db81c33169631fd?ds=sidebyside;hp=-c Merge remote branch 'smcv/ready/localurl' --- 0ae1e4cc0e598eacfeb508d11db81c33169631fd diff --combined IkiWiki.pm index c06751dd3,140f7f740..a893edb3b --- a/IkiWiki.pm +++ b/IkiWiki.pm @@@ -501,6 -501,12 +501,12 @@@ sub defaultconfig () return @ret; } + # URL to top of wiki as a path starting with /, valid from any wiki page or + # the CGI; if that's not possible, an absolute URL. Either way, it ends with / + my $local_url; + # URL to CGI script, similar to $local_url + my $local_cgiurl; + sub checkconfig () { # locale stuff; avoid LC_ALL since it overrides everything if (defined $ENV{LC_ALL}) { @@@ -537,7 -543,33 +543,33 @@@ if ($config{cgi} && ! length $config{url}) { error(gettext("Must specify url to wiki with --url when using --cgi")); } - + + if (length $config{url}) { + eval q{use URI}; + my $baseurl = URI->new($config{url}); + + $local_url = $baseurl->path . "/"; + $local_cgiurl = undef; + + if (length $config{cgiurl}) { + my $cgiurl = URI->new($config{cgiurl}); + + $local_cgiurl = $cgiurl->path; + + if ($cgiurl->scheme ne $baseurl->scheme or + $cgiurl->authority ne $baseurl->authority) { + # too far apart, fall back to absolute URLs + $local_url = "$config{url}/"; + $local_cgiurl = $config{cgiurl}; + } + } + + $local_url =~ s{//$}{/}; + } + else { + $local_cgiurl = $config{cgiurl}; + } + $config{wikistatedir}="$config{srcdir}/.ikiwiki" unless exists $config{wikistatedir} && defined $config{wikistatedir}; @@@ -1010,11 -1042,17 +1042,17 @@@ sub linkpage ($) sub cgiurl (@) { my %params=@_; - my $cgiurl=$config{cgiurl}; + my $cgiurl=$local_cgiurl; + if (exists $params{cgiurl}) { $cgiurl=$params{cgiurl}; delete $params{cgiurl}; } + + unless (%params) { + return $cgiurl; + } + return $cgiurl."?". join("&", map $_."=".uri_escape_utf8($params{$_}), keys %params); } @@@ -1022,7 -1060,7 +1060,7 @@@ sub baseurl (;$) { my $page=shift; - return "$config{url}/" if ! defined $page; + return $local_url if ! defined $page; $page=htmlpage($page); $page=~s/[^\/]+$//; @@@ -1113,6 -1151,12 +1151,12 @@@ sub urlto ($$;$) return $config{url}.beautify_urlpath("/".$to); } + if (! defined $from) { + my $u = $local_url; + $u =~ s{/$}{}; + return $u.beautify_urlpath("/".$to); + } + my $link = abs2rel($to, dirname(htmlpage($from))); return beautify_urlpath($link); @@@ -1201,7 -1245,7 +1245,7 @@@ sub userpage ($) sub openiduser ($) { my $user=shift; - if ($user =~ m!^https?://! && + if (defined $user && $user =~ m!^https?://! && eval q{use Net::OpenID::VerifiedIdentity; 1} && !$@) { my $display; diff --combined IkiWiki/Plugin/rename.pm index a05e85be0,614a4cf5c..57747d3c9 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@@ -126,7 -126,7 +126,7 @@@ sub rename_form ($$$) method => 'POST', javascript => 0, params => $q, - action => $config{cgiurl}, + action => IkiWiki::cgiurl(), stylesheet => 1, fields => [qw{do page new_name attachment}], ); @@@ -574,10 -574,11 +574,10 @@@ sub fixlinks ($$$) eval { writefile($file, $config{srcdir}, $content) }; next if $@; my $conflict=IkiWiki::rcs_commit( - $file, - sprintf(gettext("update for rename of %s to %s"), $rename->{srcfile}, $rename->{destfile}), - $token, - $session->param("name"), - $session->remote_addr(), + file => $file, + message => sprintf(gettext("update for rename of %s to %s"), $rename->{srcfile}, $rename->{destfile}), + token => $token, + session => $session, ); push @fixedlinks, $page if ! defined $conflict; }