aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Setup.pm72
-rw-r--r--IkiWiki/Setup/Standard.pm33
-rwxr-xr-xikiwiki.in49
3 files changed, 77 insertions, 77 deletions
diff --git a/IkiWiki/Setup.pm b/IkiWiki/Setup.pm
index 3b7a11253..b67d1a454 100644
--- a/IkiWiki/Setup.pm
+++ b/IkiWiki/Setup.pm
@@ -1,20 +1,18 @@
#!/usr/bin/perl
# Ikiwiki setup files are perl files that 'use IkiWiki::Setup::foo',
# passing it some sort of configuration data.
-#
-# There can be multiple modules, with different configuration styles.
-# The setup modules each convert the data into the hashes used by ikiwiki
-# internally (if it's not already in that format), and store it in
-# IkiWiki::Setup::$raw_setup, to pass it back to this module.
package IkiWiki::Setup;
use warnings;
use strict;
use IkiWiki;
-use IkiWiki::Wrapper;
use open qw{:utf8 :std};
+# There can be multiple modules, with different configuration styles.
+# The setup modules each convert the data into the hashes used by ikiwiki
+# internally (if it's not already in that format), and store it in
+# IkiWiki::Setup::$raw_setup, to pass it back to this module.
our $raw_setup;
sub load ($) { # {{{
@@ -34,17 +32,10 @@ sub load ($) { # {{{
eval $code;
error("$setup: ".$@) if $@;
- my $ret=$raw_setup;
+ my %setup=%{$raw_setup};
$raw_setup=undef;
- return %$ret;
-} #}}}
-
-package IkiWiki;
-
-sub setup () { #{{{
- my %setup=IkiWiki::Setup::load($config{setup});
-
+ # Merge setup into existing config and untaint.
$setup{plugin}=$config{plugin};
if (exists $setup{add_plugins}) {
push @{$setup{plugin}}, @{$setup{add_plugins}};
@@ -53,35 +44,17 @@ sub setup () { #{{{
if (exists $setup{exclude}) {
push @{$config{wiki_file_prune_regexps}}, $setup{exclude};
}
-
- if (! $config{render} && (! $config{refresh} || $config{wrappers})) {
- debug(gettext("generating wrappers.."));
- my @wrappers=@{$setup{wrappers}};
- delete $setup{wrappers};
- my %startconfig=(%config);
- foreach my $wrapper (@wrappers) {
- %config=(%startconfig, rebuild => 0, verbose => 0, %setup, %{$wrapper});
- checkconfig();
- if (! $config{cgi} && ! $config{post_commit}) {
- $config{post_commit}=1;
- }
- gen_wrapper();
- }
- %config=(%startconfig);
- }
-
foreach my $c (keys %setup) {
- next if $c eq 'syslog';
if (defined $setup{$c}) {
if (! ref $setup{$c}) {
- $config{$c}=possibly_foolish_untaint($setup{$c});
+ $config{$c}=IkiWiki::possibly_foolish_untaint($setup{$c});
}
elsif (ref $setup{$c} eq 'ARRAY') {
- $config{$c}=[map { possibly_foolish_untaint($_) } @{$setup{$c}}]
+ $config{$c}=[map { IkiWiki::possibly_foolish_untaint($_) } @{$setup{$c}}]
}
elsif (ref $setup{$c} eq 'HASH') {
foreach my $key (keys %{$setup{$c}}) {
- $config{$c}{$key}=possibly_foolish_untaint($setup{$c}{$key});
+ $config{$c}{$key}=IkiWiki::possibly_foolish_untaint($setup{$c}{$key});
}
}
}
@@ -89,33 +62,6 @@ sub setup () { #{{{
$config{$c}=undef;
}
}
-
- if (! $config{refresh}) {
- $config{rebuild}=1;
- }
-
- loadplugins();
- checkconfig();
-
- require IkiWiki::Render;
-
- if ($config{render}) {
- commandline_render();
- }
-
- if (! $config{refresh}) {
- debug(gettext("rebuilding wiki.."));
- }
- else {
- debug(gettext("refreshing wiki.."));
- }
-
- lockwiki();
- loadindex();
- refresh();
-
- debug(gettext("done"));
- saveindex();
} #}}}
1
diff --git a/IkiWiki/Setup/Standard.pm b/IkiWiki/Setup/Standard.pm
index 9832d174e..dcb278bf4 100644
--- a/IkiWiki/Setup/Standard.pm
+++ b/IkiWiki/Setup/Standard.pm
@@ -12,11 +12,21 @@ sub import { #{{{
$IkiWiki::Setup::raw_setup=$_[1];
} #}}}
+package IkiWiki::Setup;
+
sub dumpline ($$$) { #{{{
my $key=shift;
my $value=shift;
my $prefix=shift;
+ eval q{use Data::Dumper};
+ error($@) if $@;
+ local $Data::Dumper::Terse=1;
+ local $Data::Dumper::Indent=1;
+ local $Data::Dumper::Pad="\t";
+ local $Data::Dumper::Sortkeys=1;
+ local $Data::Dumper::Quotekeys=0;
+
my $dumpedvalue=Dumper($value);
chomp $dumpedvalue;
$dumpedvalue=~s/^\t//;
@@ -24,7 +34,7 @@ sub dumpline ($$$) { #{{{
return "\t$prefix$key=$dumpedvalue,";
} #}}}
-sub dumpsetup ($@) { #{{{
+sub dumpvalues ($@) { #{{{
my $setup=shift;
my @ret;
while (@_) {
@@ -47,24 +57,18 @@ sub dumpsetup ($@) { #{{{
return @ret;
} #}}}
-sub dump (@) { #{{{
- my %setup=@_;
-
- eval q{use Data::Dumper};
- error($@) if $@;
- local $Data::Dumper::Terse=1;
- local $Data::Dumper::Indent=1;
- local $Data::Dumper::Pad="\t";
- local $Data::Dumper::Sortkeys=1;
- local $Data::Dumper::Quotekeys=0;
+sub dump ($) { #{{{
+ my $file=shift;
+ my %setup=(%config);
my @ret;
+
foreach my $id (sort keys %{$IkiWiki::hooks{getsetup}}) {
# use an array rather than a hash, to preserve order
my @s=$IkiWiki::hooks{getsetup}{$id}{call}->();
return unless @s;
push @ret, "\t# $id plugin";
- push @ret, dumpsetup(\%setup, @s);
+ push @ret, dumpvalues(\%setup, @s);
push @ret, "";
}
@@ -84,7 +88,10 @@ sub dump (@) { #{{{
use IkiWiki::Setup::Standard {";
push @ret, "}";
- return @ret;
+
+ open (OUT, ">", $file) || die "$file: $!";
+ print OUT "$_\n" foreach @ret;
+ close OUT;
} #}}}
1
diff --git a/ikiwiki.in b/ikiwiki.in
index f48f2cfeb..0f82f77ac 100755
--- a/ikiwiki.in
+++ b/ikiwiki.in
@@ -20,6 +20,7 @@ sub getconfig () { #{{{
Getopt::Long::Configure('pass_through');
GetOptions(
"setup|s=s" => \$config{setup},
+ "dumpsetup|s=s" => \$config{dumpsetup},
"wikiname=s" => \$config{wikiname},
"verbose|v!" => \$config{verbose},
"syslog!" => \$config{syslog},
@@ -111,7 +112,46 @@ sub main () { #{{{
if ($config{setup}) {
require IkiWiki::Setup;
- setup();
+ IkiWiki::Setup::load($config{setup});
+ if (! $config{render} && ! $config{dumpsetup} &&
+ (! $config{refresh} || $config{wrappers})) {
+ debug(gettext("generating wrappers.."));
+ require IkiWiki::Wrapper;
+ my %origconfig=(%config);
+ my @wrappers=@{$config{wrappers}};
+ delete $config{wrappers};
+ foreach my $wrapper (@wrappers) {
+ %config=(%origconfig,
+ rebuild => 0,
+ verbose => 0,
+ %{$wrapper},
+ );
+ checkconfig();
+ if (! $config{cgi} && ! $config{post_commit}) {
+ $config{post_commit}=1;
+ }
+ gen_wrapper();
+ }
+ %config=(%origconfig);
+ }
+
+ # setup implies a wiki rebuild by default
+ if (! $config{refresh}) {
+ $config{rebuild}=1;
+ }
+
+ # ignore syslog setting from setup file
+ # while doing initial setup
+ $config{syslog}=0;
+
+ loadplugins();
+ checkconfig();
+ }
+
+ if ($config{dumpsetup}) {
+ loadplugins();
+ checkconfig();
+ IkiWiki::Setup::dump($config{dumpsetup});
}
elsif ($config{wrapper}) {
lockwiki();
@@ -133,12 +173,19 @@ sub main () { #{{{
# do nothing
}
else {
+ if (! $config{refresh}) {
+ debug(gettext("rebuilding wiki.."));
+ }
+ else {
+ debug(gettext("refreshing wiki.."));
+ }
lockwiki();
loadindex();
require IkiWiki::Render;
rcs_update();
refresh();
saveindex();
+ debug(gettext("done"));
}
} #}}}