X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=IkiWiki.pm;h=6a6e93e7ec699e250ae72b408dee21b21e39b4d9;hb=e12627e0a4c73d4d47ac2f10750defe22b41580e;hp=76f1292fcde39abc85a1fca3a3a5af7c0b56d3c5;hpb=90b310b93c3dc3c9e7142fc8d1e0c8c7562659b2;p=ikiwiki.git diff --git a/IkiWiki.pm b/IkiWiki.pm index 76f1292fc..6a6e93e7e 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -82,11 +82,26 @@ sub getsetup () { #{{{ cgiurl => { type => "string", default => '', - examples => "http://example.com/wiki/ikiwiki.cgi", + example => "http://example.com/wiki/ikiwiki.cgi", description => "url to the ikiwiki.cgi", safe => 1, rebuild => 1, }, + cgi_wrapper => { + type => "string", + default => '', + example => "/var/www/wiki/ikiwiki.cgi", + description => "cgi executable to generate", + safe => 0, # file + rebuild => 0, + }, + cgi_wrappermode => { + type => "string", + default => '06755', + description => "mode for cgi_wrapper (can safely be made suid)", + safe => 0, + rebuild => 0, + }, rcs => { type => "string", default => '', @@ -94,67 +109,29 @@ sub getsetup () { #{{{ safe => 0, # don't allow overriding rebuild => 0, }, - historyurl => { - type => "string", - # TODO should be set per-rcs to allow different - # examples and descriptions - default => '', - example => "XXX", - description => "XXX", - safe => 1, + default_plugins => { + type => "internal", + default => [qw{mdwn link inline htmlscrubber passwordauth + openid signinedit lockedit conditional + recentchanges parentlinks}], + description => "plugins to enable by default", + safe => 0, rebuild => 1, }, - diffurl => { + add_plugins => { type => "string", - # TODO ditto above - default => '', - example => "XXX", - description => "XXX", + default => [], + description => "plugins to add to the default configuration", safe => 1, rebuild => 1, }, - discussion => { - type => "boolean", - default => 1, - description => "enable Discussion pages?", + disable_plugins => { + type => "string", + default => [], + description => "plugins to disable", safe => 1, rebuild => 1, }, - gitorigin_branch => { - type => "string", - default => "origin", - description => "the git origin to pull from", - safe => 0, # paranoia - rebuild => 0, - }, - gitmaster_branch => { - type => "string", - default => "master", - description => "the git master branch", - safe => 0, # paranoia - rebuild => 0, - }, - wrappers => { - type => "string", - default => undef, - description => "definitions of wrappers to generate", - safe => 0, - rebuild => 0, - }, - wrapper => { - type => "internal", - default => undef, - description => "wrapper filename", - safe => 0, - rebuild => 0, - }, - wrappermode => { - type => "internal", - default => undef, - description => "mode of wrapper file", - safe => 0, - rebuild => 0, - }, templatedir => { type => "string", default => "$installdir/share/ikiwiki/templates", @@ -169,6 +146,13 @@ sub getsetup () { #{{{ safe => 0, # path rebuild => 0, }, + wrappers => { + type => "internal", + default => [], + description => "wrappers to generate", + safe => 0, + rebuild => 0, + }, underlaydirs => { type => "internal", default => [], @@ -204,6 +188,13 @@ sub getsetup () { #{{{ safe => 0, # changing requires manual transition rebuild => 1, }, + discussion => { + type => "boolean", + default => 1, + description => "enable Discussion pages?", + safe => 1, + rebuild => 1, + }, default_pageext => { type => "string", default => "mdwn", @@ -262,7 +253,29 @@ sub getsetup () { #{{{ safe => 0, # paranoia rebuild => 0, }, - + umask => { + type => "integer", + description => "", + example => "022", + description => "force ikiwiki to use a particular umask", + safe => 0, # paranoia + rebuild => 0, + }, + libdir => { + type => "string", + default => "", + example => "$ENV{HOME}/.ikiwiki/", + description => "extra library and plugin directory", + safe => 0, # directory + rebuild => 0, + }, + ENV => { + type => "string", + default => {}, + description => "environment variables", + safe => 0, # paranoia + rebuild => 0, + }, exclude => { type => "string", default => undef, @@ -352,37 +365,6 @@ sub getsetup () { #{{{ safe => 0, rebuild => 0, }, - default_plugins => { - type => "internal", - default => [qw{mdwn link inline htmlscrubber passwordauth - openid signinedit lockedit conditional - recentchanges parentlinks}], - description => "plugins to enable by default", - safe => 1, - rebuild => 1, - }, - add_plugins => { - type => "string", - default => [], - description => "plugins to add to the default configuration", - safe => 1, - rebuild => 1, - }, - disable_plugins => { - type => "string", - default => [], - description => "plugins to disable", - safe => 1, - rebuild => 1, - }, - libdir => { - type => "internal", - default => undef, - example => "$ENV{HOME}/.ikiwiki/", - description => "extra library and plugin directory", - safe => 0, - rebuild => 0, - }, } #}}} sub defaultconfig () { #{{{ @@ -432,16 +414,13 @@ sub checkconfig () { #{{{ unless exists $config{wikistatedir}; if ($config{rcs}) { - eval qq{use IkiWiki::Rcs::$config{rcs}}; - if ($@) { - error("Failed to load RCS module IkiWiki::Rcs::$config{rcs}: $@"); - } + loadplugin($config{rcs}); } else { - require IkiWiki::Rcs::Stub; + loadplugin("norcs"); } - if (exists $config{umask}) { + if (defined $config{umask}) { umask(possibly_foolish_untaint($config{umask})); } @@ -450,8 +429,28 @@ sub checkconfig () { #{{{ return 1; } #}}} +sub listplugins () { #{{{ + my %ret; + + foreach my $dir (@INC, $config{libdir}) { + next unless defined $dir && length $dir; + foreach my $file (glob("$dir/IkiWiki/Plugin/*.pm")) { + my ($plugin)=$file=~/.*\/(.*)\.pm$/; + $ret{$plugin}=1; + } + } + foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") { + next unless defined $dir && length $dir; + foreach my $file (glob("$dir/plugins/*")) { + $ret{basename($file)}=1 if -x $file; + } + } + + return keys %ret; +} #}}} + sub loadplugins () { #{{{ - if (defined $config{libdir}) { + if (defined $config{libdir} && length $config{libdir}) { unshift @INC, possibly_foolish_untaint($config{libdir}); } @@ -1066,13 +1065,10 @@ sub preprocess ($$$;$$) { #{{{ if ($preprocessing{$page}++ > 3) { # Avoid loops of preprocessed pages preprocessing # other pages that preprocess them, etc. - #translators: The first parameter is a - #translators: preprocessor directive name, - #translators: the second a page name, the - #translators: third a number. - return "[[".sprintf(gettext("%s preprocessing loop detected on %s at depth %i"), - $command, $page, $preprocessing{$page}). - "]]"; + return "[[!$command ". + sprintf(gettext("preprocessing loop detected on %s at depth %i"), + $page, $preprocessing{$page}). + "]]"; } my $ret; if (! $scan) { @@ -1429,6 +1425,46 @@ sub run_hooks ($$) { # {{{ return 1; } #}}} +sub rcs_update () { #{{{ + $hooks{rcs}{rcs_update}{call}->(@_); +} #}}} + +sub rcs_prepedit ($) { #{{{ + $hooks{rcs}{rcs_prepedit}{call}->(@_); +} #}}} + +sub rcs_commit ($$$;$$) { #{{{ + $hooks{rcs}{rcs_commit}{call}->(@_); +} #}}} + +sub rcs_commit_staged ($$$) { #{{{ + $hooks{rcs}{rcs_commit_staged}{call}->(@_); +} #}}} + +sub rcs_add ($) { #{{{ + $hooks{rcs}{rcs_add}{call}->(@_); +} #}}} + +sub rcs_remove ($) { #{{{ + $hooks{rcs}{rcs_remove}{call}->(@_); +} #}}} + +sub rcs_rename ($$) { #{{{ + $hooks{rcs}{rcs_rename}{call}->(@_); +} #}}} + +sub rcs_recentchanges ($) { #{{{ + $hooks{rcs}{rcs_recentchanges}{call}->(@_); +} #}}} + +sub rcs_diff ($) { #{{{ + $hooks{rcs}{rcs_diff}{call}->(@_); +} #}}} + +sub rcs_getctime ($) { #{{{ + $hooks{rcs}{rcs_getctime}{call}->(@_); +} #}}} + sub globlist_to_pagespec ($) { #{{{ my @globlist=split(' ', shift);