X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/6c8cf5dd571662f981227489f7c4652a1a1f10cd..5230f4e50b5a21f1fca2edd89c981e944cdf05a0:/ikiwiki diff --git a/ikiwiki b/ikiwiki index cdc5c8ca4..6f66c5ea4 100755 --- a/ikiwiki +++ b/ikiwiki @@ -7,10 +7,8 @@ use lib '.'; # For use without installation, removed by Makefile. package IkiWiki; use warnings; use strict; -use Memoize; use File::Spec; use HTML::Template; -use Getopt::Long; use vars qw{%config %links %oldlinks %oldpagemtime %renderedfiles %pagesources}; @@ -39,31 +37,41 @@ our %config=( #{{{ adminuser => undef, ); #}}} -GetOptions( #{{{ - "setup|s=s" => \$config{setup}, - "wikiname=s" => \$config{wikiname}, - "verbose|v!" => \$config{verbose}, - "rebuild!" => \$config{rebuild}, - "wrapper:s" => sub { $config{wrapper}=$_[1] ? $_[1] : "ikiwiki-wrap" }, - "wrappermode=i" => \$config{wrappermode}, - "svn!" => \$config{svn}, - "anonok!" => \$config{anonok}, - "cgi!" => \$config{cgi}, - "url=s" => \$config{url}, - "cgiurl=s" => \$config{cgiurl}, - "historyurl=s" => \$config{historyurl}, - "diffurl=s" => \$config{diffurl}, - "exclude=s@" => sub { - $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/; - }, - "adminuser=s@" => sub { push @{$config{adminuser}}, $_[1] }, - "templatedir=s" => sub { $config{templatedir}=possibly_foolish_untaint($_[1]) }, -) || usage(); - -if (! $config{setup}) { - usage() unless @ARGV == 2; - $config{srcdir} = possibly_foolish_untaint(shift); - $config{destdir} = possibly_foolish_untaint(shift); +# option parsing #{{{ +if (! exists $ENV{WRAPPED_OPTIONS}) { + eval q{use Getopt::Long}; + GetOptions( + "setup|s=s" => \$config{setup}, + "wikiname=s" => \$config{wikiname}, + "verbose|v!" => \$config{verbose}, + "rebuild!" => \$config{rebuild}, + "wrapper:s" => sub { $config{wrapper}=$_[1] ? $_[1] : "ikiwiki-wrap" }, + "wrappermode=i" => \$config{wrappermode}, + "svn!" => \$config{svn}, + "anonok!" => \$config{anonok}, + "cgi!" => \$config{cgi}, + "url=s" => \$config{url}, + "cgiurl=s" => \$config{cgiurl}, + "historyurl=s" => \$config{historyurl}, + "diffurl=s" => \$config{diffurl}, + "exclude=s@" => sub { + $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/; + }, + "adminuser=s@" => sub { push @{$config{adminuser}}, $_[1] }, + "templatedir=s" => sub { $config{templatedir}=possibly_foolish_untaint($_[1]) }, + ) || usage(); + + if (! $config{setup}) { + usage() unless @ARGV == 2; + $config{srcdir} = possibly_foolish_untaint(shift); + $config{destdir} = possibly_foolish_untaint(shift); + checkoptions(); + } +} +else { + # wrapper passes a full config structure in the environment + # variable + eval possibly_foolish_untaint($ENV{WRAPPED_OPTIONS}); checkoptions(); } #}}} @@ -416,28 +424,29 @@ sub globlist_match ($$) { #{{{ return 0; } #}}} -# main {{{ -memoize('pagename'); -memoize('bestlink'); -if ($config{setup}) { - require IkiWiki::Setup; - setup(); -} -lockwiki(); -if ($config{wrapper}) { - require IkiWiki::Wrapper; - gen_wrapper(); - exit; -} -loadindex() unless $config{rebuild}; -if ($config{cgi}) { - require IkiWiki::CGI; - cgi(); -} -else { - require IkiWiki::Render; - rcs_update(); - refresh(); - saveindex(); -} -#}}} +sub main () { #{{{ + if ($config{setup}) { + require IkiWiki::Setup; + setup(); + } + elsif ($config{wrapper}) { + lockwiki(); + require IkiWiki::Wrapper; + gen_wrapper(); + } + elsif ($config{cgi}) { + lockwiki(); + require IkiWiki::CGI; + cgi(); + } + else { + lockwiki(); + loadindex() unless $config{rebuild}; + require IkiWiki::Render; + rcs_update(); + refresh(); + saveindex(); + } +} #}}} + +main;