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("file_pruned");
sub getsetup () { #{{{
wikiname => {
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/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//,
qr/\.dpkg-tmp$/],
description => "regexps of source files to ignore",
safe => 0,
rebuild => 1,
},
wiki_file_regexp => {
type => "internal",
default => qr/(^[-[:alnum:]_.:\/+]+$)/,
description => "regexp of legal source files",
safe => 0,
rebuild => 1,
},
web_commit_regexp => {
type => "internal",
default => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/,
description => "regexp to parse web commits from logs",
safe => 0,
rebuild => 0,
},
cgi => {
type => "internal",
default => 0,
description => "run as a cgi",
safe => 0,
rebuild => 0,
},
cgi_disable_uploads => {
type => "internal",
default => 1,
description => "whether CGI should accept file uploads",
safe => 0,
rebuild => 0,
},
post_commit => {
type => "internal",
default => 0,
description => "run as a post-commit hook",
safe => 0,
rebuild => 0,
},
rebuild => {
type => "internal",
default => 0,
description => "running in rebuild mode",
safe => 0,
rebuild => 0,
},
refresh => {
type => "internal",
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 () { #{{{
return
wiki_file_prune_regexps => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
qr/\.x?html?$/, qr/\.ikiwiki-new$/,
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//,
qr/\.dpkg-tmp$/],
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
web_commit_regexp => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/,
verbose => 0,
syslog => 0,
wikiname => "wiki",
default_pageext => "mdwn",
htmlext => "html",
cgi => 0,
post_commit => 0,
rcs => '',
url => '',
cgiurl => '',
historyurl => '',
diffurl => '',
rss => 0,
atom => 0,
allowrss => 0,
allowatom => 0,
discussion => 1,
rebuild => 0,
refresh => 0,
getctime => 0,
w3mmode => 0,
wrapper => undef,
wrappermode => undef,
svnpath => "trunk",
gitorigin_branch => "origin",
gitmaster_branch => "master",
srcdir => undef,
destdir => undef,
pingurl => [],
templatedir => "$installdir/share/ikiwiki/templates",
underlaydir => "$installdir/share/ikiwiki/basewiki",
underlaydirs => [],
setup => undef,
adminuser => undef,
adminemail => undef,
plugin => [qw{mdwn link inline htmlscrubber passwordauth openid
signinedit lockedit conditional recentchanges
parentlinks}],
libdir => undef,
timeformat => '%c',
locale => undef,
sslcookie => 0,
httpauth => 0,
userdir => "",
usedirs => 1,
numbacklinks => 10,
account_creation_password => "",
prefix_directives => 0,
hardlink => 0,
cgi_disable_uploads => 1,
my %s=getsetup();
my @ret;
foreach my $key (keys %s) {
push @ret, $key, $s{$key}->{default};
}
use Data::Dumper;
return @ret;
} #}}}
sub checkconfig () { #{{{

View File

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