can now dump fully functional setup files

master
Joey Hess 2008-07-26 15:34:38 -04:00
parent cd029da493
commit 1c00717cb2
4 changed files with 62 additions and 27 deletions

View File

@ -142,6 +142,27 @@ sub getsetup () { #{{{
safe => 0, # paranoia safe => 0, # paranoia
rebuild => 0, 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 => { templatedir => {
type => "string", type => "string",
default => "$installdir/share/ikiwiki/templates", default => "$installdir/share/ikiwiki/templates",
@ -250,6 +271,14 @@ sub getsetup () { #{{{
rebuild => 0, rebuild => 0,
}, },
exclude => {
type => "string",
default => undef,
example => '\.wav$',
description => "regexp of source files to ignore",
safe => 0, # regexp
rebuild => 1,
},
wiki_file_prune_regexps => { wiki_file_prune_regexps => {
type => "internal", type => "internal",
default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./, default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
@ -324,20 +353,6 @@ sub getsetup () { #{{{
safe => 0, safe => 0,
rebuild => 0, rebuild => 0,
}, },
wrapper => {
type => "internal",
default => undef,
description => "wrapper file to generate",
safe => 0,
rebuild => 0,
},
wrappermode => {
type => "internal",
default => undef,
description => "mode of wrapper file",
safe => 0,
rebuild => 0,
},
setup => { setup => {
type => "internal", type => "internal",
default => undef, default => undef,
@ -345,13 +360,27 @@ sub getsetup () { #{{{
safe => 0, safe => 0,
rebuild => 0, rebuild => 0,
}, },
plugin => { default_plugins => {
type => "internal", type => "internal",
default => [qw{mdwn link inline htmlscrubber passwordauth default => [qw{mdwn link inline htmlscrubber passwordauth
openid signinedit lockedit conditional openid signinedit lockedit conditional
recentchanges parentlinks}], recentchanges parentlinks}],
description => "enabled plugins", description => "plugins to enable by default",
safe => 0, 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, rebuild => 1,
}, },
libdir => { libdir => {
@ -434,7 +463,7 @@ sub loadplugins () { #{{{
unshift @INC, possibly_foolish_untaint($config{libdir}); unshift @INC, possibly_foolish_untaint($config{libdir});
} }
loadplugin($_) foreach @{$config{plugin}}; loadplugin($_) foreach @{$config{default_plugins}}, @{$config{add_plugins}};
run_hooks(getopt => sub { shift->() }); run_hooks(getopt => sub { shift->() });
if (grep /^-/, @ARGV) { if (grep /^-/, @ARGV) {

View File

@ -36,17 +36,15 @@ sub load ($) { # {{{
$raw_setup=undef; $raw_setup=undef;
# Merge setup into existing config and untaint. # Merge setup into existing config and untaint.
$setup{plugin}=$config{plugin};
if (exists $setup{add_plugins}) { if (exists $setup{add_plugins}) {
push @{$setup{plugin}}, @{$setup{add_plugins}}; push @{$setup{add_plugins}}, @{$config{add_plugins}};
delete $setup{add_plugins};
} }
if (exists $setup{exclude}) { if (exists $setup{exclude}) {
push @{$config{wiki_file_prune_regexps}}, $setup{exclude}; push @{$config{wiki_file_prune_regexps}}, $setup{exclude};
} }
foreach my $c (keys %setup) { foreach my $c (keys %setup) {
if (defined $setup{$c}) { if (defined $setup{$c}) {
if (! ref $setup{$c}) { if (! ref $setup{$c} || ref $setup{$c} eq 'Regexp') {
$config{$c}=IkiWiki::possibly_foolish_untaint($setup{$c}); $config{$c}=IkiWiki::possibly_foolish_untaint($setup{$c});
} }
elsif (ref $setup{$c} eq 'ARRAY') { elsif (ref $setup{$c} eq 'ARRAY') {

View File

@ -29,15 +29,21 @@ sub dumpline ($$$$) { #{{{
my $dumpedvalue; my $dumpedvalue;
if ($type eq 'boolean' || $type eq 'integer') { if ($type eq 'boolean' || $type eq 'integer') {
# avoid quotes
$dumpedvalue=$value; $dumpedvalue=$value;
} }
elsif ($type eq 'string' && ref $value eq 'ARRAY' && @$value &&
! grep { /[^-A-Za-z0-9_]/ } @$value) {
# dump simple array as qw{}
$dumpedvalue="[qw{ ".join(" ", @$value)." }]";
}
else { else {
$dumpedvalue=Dumper($value); $dumpedvalue=Dumper($value);
chomp $dumpedvalue; chomp $dumpedvalue;
$dumpedvalue=~s/^\t//; $dumpedvalue=~s/^\t//;
} }
return "\t$prefix$key=$dumpedvalue,"; return "\t$prefix$key => $dumpedvalue,";
} #}}} } #}}}
sub dumpvalues ($@) { #{{{ sub dumpvalues ($@) { #{{{

View File

@ -28,7 +28,7 @@ sub getconfig () { #{{{
"refresh!" => \$config{refresh}, "refresh!" => \$config{refresh},
"post-commit" => \$config{post_commit}, "post-commit" => \$config{post_commit},
"render=s" => \$config{render}, "render=s" => \$config{render},
"wrappers!" => \$config{wrappers}, "wrappers!" => \$config{genwrappers},
"usedirs!" => \$config{usedirs}, "usedirs!" => \$config{usedirs},
"prefix-directives!" => \$config{prefix_directives}, "prefix-directives!" => \$config{prefix_directives},
"getctime" => \$config{getctime}, "getctime" => \$config{getctime},
@ -68,7 +68,7 @@ sub getconfig () { #{{{
$config{wrappermode}=possibly_foolish_untaint($_[1]) $config{wrappermode}=possibly_foolish_untaint($_[1])
}, },
"plugin=s@" => sub { "plugin=s@" => sub {
push @{$config{plugin}}, $_[1]; push @{$config{add_plugins}}, $_[1];
}, },
"disable-plugin=s@" => sub { "disable-plugin=s@" => sub {
push @{$config{disable_plugins}}, $_[1]; push @{$config{disable_plugins}}, $_[1];
@ -112,13 +112,15 @@ sub main () { #{{{
if ($config{setup}) { if ($config{setup}) {
require IkiWiki::Setup; require IkiWiki::Setup;
IkiWiki::Setup::load($config{setup}); IkiWiki::Setup::load($config{setup});
if (! $config{render} && ! $config{dumpsetup} && if (@{$config{wrappers}} &&
(! $config{refresh} || $config{wrappers})) { ! $config{render} && ! $config{dumpsetup} &&
(! $config{refresh} || $config{genwrappers})) {
debug(gettext("generating wrappers..")); debug(gettext("generating wrappers.."));
require IkiWiki::Wrapper; require IkiWiki::Wrapper;
my %origconfig=(%config); my %origconfig=(%config);
my @wrappers=@{$config{wrappers}}; my @wrappers=@{$config{wrappers}};
delete $config{wrappers}; delete $config{wrappers};
delete $config{genwrappers};
foreach my $wrapper (@wrappers) { foreach my $wrapper (@wrappers) {
%config=(%origconfig, %config=(%origconfig,
rebuild => 0, rebuild => 0,