add info for all common setup file options, and most internal ones

master
Joey Hess 2008-07-26 14:39:12 -04:00
parent 1ba84c3a6b
commit abab46f983
2 changed files with 360 additions and 73 deletions

View File

@ -32,65 +32,346 @@ memoize("abs2rel");
memoize("pagespec_translate"); memoize("pagespec_translate");
memoize("file_pruned"); memoize("file_pruned");
sub defaultconfig () { #{{{ sub getsetup () { #{{{
return wikiname => {
wiki_file_prune_regexps => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./, type => "string",
default => "wiki",
description => "name of the wiki",
safe => 1,
rebuild => 1,
},
srcdir => {
type => "string",
default => undef,
example => "$ENV{HOME}/wiki",
description => "where the source of the wiki is located",
safe => 0, # path
rebuild => 1,
},
destdir => {
type => "string",
default => undef,
example => "/var/www/wiki",
description => "where to build the wiki",
safe => 0, # path
rebuild => 1,
},
adminuser => {
type => "string",
default => [],
description => "user names of wiki admins",
safe => 1,
rebuild => 0,
},
adminemail => {
type => "string",
default => undef,
example => 'me@example.com',
description => "contact email for wiki",
safe => 1,
rebuild => 0,
},
url => {
type => "string",
default => '',
example => "http://example.com/wiki",
description => "base url to the wiki",
safe => 1,
rebuild => 1,
},
cgiurl => {
type => "string",
default => '',
examples => "http://example.com/wiki/ikiwiki.cgi",
description => "url to the ikiwiki.cgi",
safe => 1,
rebuild => 1,
},
rcs => {
type => "string",
default => '',
description => "rcs backend to use",
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,
rebuild => 1,
},
diffurl => {
type => "string",
# TODO ditto above
default => '',
example => "XXX",
description => "XXX",
safe => 1,
rebuild => 1,
},
discussion => {
type => "boolean",
default => 1,
description => "enable Discussion pages",
safe => 1,
rebuild => 1,
},
svnpath => {
# TODO move
type => "string",
default => "trunk",
description => "path inside svn repo where wiki is located",
safe => 0, # could expose/overwrite data
rebuild => 0,
},
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,
},
templatedir => {
type => "string",
default => "$installdir/share/ikiwiki/templates",
description => "location of template files",
safe => 0, # path
rebuild => 1,
},
underlaydir => {
type => "string",
default => "$installdir/share/ikiwiki/basewiki",
description => "base wiki source location",
safe => 0, # path
rebuild => 0,
},
underlaydirs => {
type => "internal",
default => [],
description => "additional underlays to use",
safe => 0,
rebuild => 0,
},
verbose => {
type => "boolean",
default => 0,
description => "display verbose messages when building",
safe => 1,
rebuild => 0,
},
syslog => {
type => "boolean",
default => 0,
description => "log to syslog",
safe => 1,
rebuild => 0,
},
usedirs => {
type => "boolean",
default => 1,
description => "create output files named page/index.html?",
safe => 0, # changing requires manual transition
rebuild => 1,
},
prefix_directives => {
type => "boolean",
default => 0,
description => "use '!'-prefixed preprocessor directives?",
safe => 0, # changing requires manual transition
rebuild => 1,
},
default_pageext => {
type => "string",
default => "mdwn",
description => "extension to use for new pages",
safe => 0, # not sanitized
rebuild => 0,
},
htmlext => {
type => "string",
default => "html",
description => "extension to use for html files",
safe => 0, # not sanitized
rebuild => 1,
},
timeformat => {
type => "string",
default => '%c',
description => "strftime format string to display date",
safe => 1,
rebuild => 1,
},
locale => {
type => "string",
default => undef,
example => "en_US.UTF-8",
description => "UTF-8 locale to use",
safe => 0,
rebuild => 1,
},
sslcookie => {
type => "boolean",
default => 0,
description => "only send cookies over SSL connections?",
safe => 1,
rebuild => 0,
},
userdir => {
type => "string",
default => "",
example => "users",
description => "put user pages below specified page",
safe => 1,
rebuild => 1,
},
numbacklinks => {
type => "integer",
default => 10,
description => "how many backlinks to show before hiding excess (0 to show all)",
safe => 1,
rebuild => 1,
},
hardlink => {
type => "boolean",
default => 0,
description => "attempt to hardlink source files (optimisation for large files)",
safe => 0, # paranoia
rebuild => 0,
},
wiki_file_prune_regexps => {
type => "internal",
default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
qr/\.x?html?$/, qr/\.ikiwiki-new$/, qr/\.x?html?$/, qr/\.ikiwiki-new$/,
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//, qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//, qr/(^|\/)_MTN\//,
qr/\.dpkg-tmp$/], qr/\.dpkg-tmp$/],
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/, description => "regexps of source files to ignore",
web_commit_regexp => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/, safe => 0,
verbose => 0, rebuild => 1,
syslog => 0, },
wikiname => "wiki", wiki_file_regexp => {
default_pageext => "mdwn", type => "internal",
htmlext => "html", default => qr/(^[-[:alnum:]_.:\/+]+$)/,
cgi => 0, description => "regexp of legal source files",
post_commit => 0, safe => 0,
rcs => '', rebuild => 1,
url => '', },
cgiurl => '', web_commit_regexp => {
historyurl => '', type => "internal",
diffurl => '', default => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/,
rss => 0, description => "regexp to parse web commits from logs",
atom => 0, safe => 0,
allowrss => 0,
allowatom => 0,
discussion => 1,
rebuild => 0, rebuild => 0,
refresh => 0, },
getctime => 0, cgi => {
w3mmode => 0, type => "internal",
wrapper => undef, default => 0,
wrappermode => undef, description => "run as a cgi",
svnpath => "trunk", safe => 0,
gitorigin_branch => "origin", rebuild => 0,
gitmaster_branch => "master", },
srcdir => undef, cgi_disable_uploads => {
destdir => undef, type => "internal",
pingurl => [], default => 1,
templatedir => "$installdir/share/ikiwiki/templates", description => "whether CGI should accept file uploads",
underlaydir => "$installdir/share/ikiwiki/basewiki", safe => 0,
underlaydirs => [], rebuild => 0,
setup => undef, },
adminuser => undef, post_commit => {
adminemail => undef, type => "internal",
plugin => [qw{mdwn link inline htmlscrubber passwordauth openid default => 0,
signinedit lockedit conditional recentchanges description => "run as a post-commit hook",
parentlinks}], safe => 0,
libdir => undef, rebuild => 0,
timeformat => '%c', },
locale => undef, rebuild => {
sslcookie => 0, type => "internal",
httpauth => 0, default => 0,
userdir => "", description => "running in rebuild mode",
usedirs => 1, safe => 0,
numbacklinks => 10, rebuild => 0,
account_creation_password => "", },
prefix_directives => 0, refresh => {
hardlink => 0, type => "internal",
cgi_disable_uploads => 1, default => 0,
description => "running in refresh mode",
safe => 0,
rebuild => 0,
},
getctime => {
type => "internal",
default => 0,
description => "running in getctime mode",
safe => 0,
rebuild => 0,
},
w3mmode => {
type => "internal",
default => 0,
description => "running in w3mmode",
safe => 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 => {
type => "internal",
default => undef,
description => "setup file to read",
safe => 0,
rebuild => 0,
},
plugin => {
type => "internal",
default => [qw{mdwn link inline htmlscrubber passwordauth
openid signinedit lockedit conditional
recentchanges parentlinks}],
description => "enabled plugins",
safe => 0,
rebuild => 1,
},
libdir => {
type => "internal",
default => undef,
example => "$ENV{HOME}/.ikiwiki/",
description => "extra library and plugin directory",
safe => 0,
rebuild => 0,
},
} #}}}
sub defaultconfig () { #{{{
my %s=getsetup();
my @ret;
foreach my $key (keys %s) {
push @ret, $key, $s{$key}->{default};
}
use Data::Dumper;
return @ret;
} #}}} } #}}}
sub checkconfig () { #{{{ sub checkconfig () { #{{{

View File

@ -13,9 +13,10 @@ sub import { #{{{
$IkiWiki::Setup::raw_setup=$_[1]; $IkiWiki::Setup::raw_setup=$_[1];
} #}}} } #}}}
sub dumpline ($$$) { #{{{ sub dumpline ($$$$) { #{{{
my $key=shift; my $key=shift;
my $value=shift; my $value=shift;
my $type=shift;
my $prefix=shift; my $prefix=shift;
eval q{use Data::Dumper}; eval q{use Data::Dumper};
@ -26,9 +27,15 @@ sub dumpline ($$$) { #{{{
local $Data::Dumper::Sortkeys=1; local $Data::Dumper::Sortkeys=1;
local $Data::Dumper::Quotekeys=0; local $Data::Dumper::Quotekeys=0;
my $dumpedvalue=Dumper($value); my $dumpedvalue;
if ($type eq 'boolean' || $type eq 'integer') {
$dumpedvalue=$value;
}
else {
$dumpedvalue=Dumper($value);
chomp $dumpedvalue; chomp $dumpedvalue;
$dumpedvalue=~s/^\t//; $dumpedvalue=~s/^\t//;
}
return "\t$prefix$key=$dumpedvalue,"; return "\t$prefix$key=$dumpedvalue,";
} #}}} } #}}}
@ -40,17 +47,19 @@ sub dumpvalues ($@) { #{{{
my $key=shift; my $key=shift;
my %info=%{shift()}; my %info=%{shift()};
next if $info{type} eq "internal";
push @ret, "\t# ".$info{description} if exists $info{description}; push @ret, "\t# ".$info{description} if exists $info{description};
if (exists $setup->{$key} && defined $setup->{$key}) { if (exists $setup->{$key} && defined $setup->{$key}) {
push @ret, dumpline($key, $setup->{$key}, ""); push @ret, dumpline($key, $setup->{$key}, $info{type}, "");
delete $setup->{$key}; delete $setup->{$key};
} }
elsif (exists $info{default}) { elsif (exists $info{default} && defined $info{default}) {
push @ret, dumpline($key, $info{default}, "#"); push @ret, dumpline($key, $info{default}, $info{type}, "#");
} }
elsif (exists $info{example}) { elsif (exists $info{example}) {
push @ret, dumpline($key, $info{example}, "#"); push @ret, dumpline($key, $info{example}, $info{type}, "#");
} }
} }
return @ret; return @ret;
@ -62,6 +71,10 @@ sub dump ($) { #{{{
my %setup=(%config); my %setup=(%config);
my @ret; my @ret;
push @ret, "\t# basic setup";
push @ret, dumpvalues(\%setup, IkiWiki::getsetup());
push @ret, "";
foreach my $id (sort keys %{$IkiWiki::hooks{getsetup}}) { foreach my $id (sort keys %{$IkiWiki::hooks{getsetup}}) {
# use an array rather than a hash, to preserve order # use an array rather than a hash, to preserve order
my @s=$IkiWiki::hooks{getsetup}{$id}{call}->(); my @s=$IkiWiki::hooks{getsetup}{$id}{call}->();
@ -71,13 +84,6 @@ sub dump ($) { #{{{
push @ret, ""; push @ret, "";
} }
if (%setup) {
push @ret, "\t# other";
foreach my $key (sort keys %setup) {
push @ret, dumpline($key, $setup{$key}, "");
}
}
unshift @ret, "#!/usr/bin/perl unshift @ret, "#!/usr/bin/perl
# Setup file for ikiwiki. # Setup file for ikiwiki.
# Passing this to ikiwiki --setup will make ikiwiki generate wrappers and # Passing this to ikiwiki --setup will make ikiwiki generate wrappers and