X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/ac69a979059198a3716d1e177d177e978e1f1785..a1a7019f276902c53aad2b2cb71e74f6e974fa05:/ikiwiki?ds=sidebyside diff --git a/ikiwiki b/ikiwiki index 111ef54fc..dd4177800 100755 --- a/ikiwiki +++ b/ikiwiki @@ -10,7 +10,8 @@ use Getopt::Long; my (%links, %oldlinks, %oldpagemtime, %renderedfiles, %pagesources); -my %config=( #{{{ +# Holds global config settings, also used by some modules. +our %config=( #{{{ wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$)}, wiki_link_regexp => qr/\[\[([^\s]+)\]\]/, wiki_file_regexp => qr/(^[-A-Za-z0-9_.:\/+]+$)/, @@ -69,11 +70,8 @@ sub error { #{{{ if ($config{cgi}) { print "Content-type: text/html\n\n"; print misctemplate("Error", "

Error: @_

"); - exit 1; - } - else { - die @_; } + die @_; } #}}} sub debug ($) { #{{{ @@ -168,14 +166,17 @@ sub writefile ($$) { #{{{ close OUT; } #}}} -sub findlinks ($) { #{{{ +sub findlinks ($$) { #{{{ my $content=shift; + my $page=shift; my @links; while ($content =~ /(??$link" - } - else { - return "?$link" - } + return "?$link" } $bestlink=File::Spec->abs2rel($bestlink, dirname($page)); @@ -307,14 +309,14 @@ sub parentlinks ($) { #{{{ my $skip=1; foreach my $dir (reverse split("/", $page)) { if (! $skip) { + $path.="../"; unshift @ret, { url => "$path$dir.html", page => $dir }; } else { $skip=0; } - $path.="../"; } - unshift @ret, { url => $path , page => $config{wikiname} }; + unshift @ret, { url => length $path ? $path : ".", page => $config{wikiname} }; return @ret; } #}}} @@ -364,10 +366,10 @@ sub check_overwrite ($$) { #{{{ my $src=shift; if (! exists $renderedfiles{$src} && -e $dest && ! $config{rebuild}) { - error("$dest exists and was rendered from ". + error("$dest already exists and was rendered from ". join(" ",(grep { $renderedfiles{$_} eq $dest } keys %renderedfiles)). - ", not from $src before not overwriting"); + ", before, so not rendering from $src"); } } #}}} @@ -379,7 +381,7 @@ sub render ($) { #{{{ if ($type ne 'unknown') { my $page=pagename($file); - $links{$page}=[findlinks($content)]; + $links{$page}=[findlinks($content, $page)]; $content=linkify($content, $file); $content=htmlize($type, $content); @@ -638,8 +640,7 @@ FILE: foreach my $file (@files) { foreach my $file (keys %rendered, @del) { my $page=pagename($file); if (exists $links{$page}) { - foreach my $link (@{$links{$page}}) { - $link=bestlink($page, $link); + foreach my $link (map { bestlink($page, $_) } @{$links{$page}}) { if (length $link && ! exists $oldlinks{$page} || ! grep { $_ eq $link } @{$oldlinks{$page}}) { @@ -648,8 +649,7 @@ FILE: foreach my $file (@files) { } } if (exists $oldlinks{$page}) { - foreach my $link (@{$oldlinks{$page}}) { - $link=bestlink($page, $link); + foreach my $link (map { bestlink($page, $_) } @{$oldlinks{$page}}) { if (length $link && ! exists $links{$page} || ! grep { $_ eq $link } @{$links{$page}}) { @@ -692,7 +692,7 @@ sub gen_wrapper (@) { #{{{ push @params, "--cgiurl=$config{cgiurl}" if length $config{cgiurl}; push @params, "--historyurl=$config{historyurl}" if length $config{historyurl}; push @params, "--anonok" if $config{anonok}; - my $params=join(" ", map { "\'$_\'" } @params); + my $params=join(" ", @params); my $call=''; foreach my $p ($this, $this, @params) { $call.=qq{"$p", }; @@ -1022,26 +1022,31 @@ sub cgi_editpage ($$) { #{{{ } my @page_locs; + my $best_loc; my ($from)=$form->param('from')=~/$config{wiki_file_regexp}/; if (! defined $from || ! length $from || $from ne $form->param('from') || $from=~/$config{wiki_file_prune_regexp}/ || $from=~/^\//) { - @page_locs=$page; + @page_locs=$best_loc=$page; } else { my $dir=$from."/"; $dir=~s![^/]+/$!!; push @page_locs, $dir.$page; push @page_locs, "$from/$page"; + $best_loc="$from/$page"; while (length $dir) { $dir=~s![^/]+/$!!; push @page_locs, $dir.$page; } + + @page_locs = grep { ! exists + $pagesources{lc($_)} } @page_locs; } $form->tmpl_param("page_select", 1); $form->field(name => "page", type => 'select', - options => \@page_locs); + options => \@page_locs, value => $best_loc); $form->title("creating $page"); } elsif ($form->field("do") eq "edit") { @@ -1096,7 +1101,9 @@ sub cgi_editpage ($$) { #{{{ rcs_commit($message); } else { + loadindex(); refresh(); + saveindex(); } # The trailing question mark tries to avoid broken @@ -1152,14 +1159,15 @@ sub cgi () { #{{{ sub setup () { # {{{ my $setup=possibly_foolish_untaint($config{setup}); + delete $config{setup}; open (IN, $setup) || error("read $setup: $!\n"); local $/=undef; my $code=; ($code)=$code=~/(.*)/s; close IN; + eval $code; error($@) if $@; - print "ikiwiki setup complete\n"; exit; } #}}}