add info for all common setup file options, and most internal ones
parent
1ba84c3a6b
commit
abab46f983
397
IkiWiki.pm
397
IkiWiki.pm
|
@ -32,65 +32,346 @@ memoize("abs2rel");
|
||||||
memoize("pagespec_translate");
|
memoize("pagespec_translate");
|
||||||
memoize("file_pruned");
|
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 () { #{{{
|
sub defaultconfig () { #{{{
|
||||||
return
|
my %s=getsetup();
|
||||||
wiki_file_prune_regexps => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
|
my @ret;
|
||||||
qr/\.x?html?$/, qr/\.ikiwiki-new$/,
|
foreach my $key (keys %s) {
|
||||||
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
|
push @ret, $key, $s{$key}->{default};
|
||||||
qr/(^|\/)_MTN\//,
|
}
|
||||||
qr/\.dpkg-tmp$/],
|
use Data::Dumper;
|
||||||
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
|
return @ret;
|
||||||
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,
|
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
sub checkconfig () { #{{{
|
sub checkconfig () { #{{{
|
||||||
|
|
|
@ -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;
|
||||||
chomp $dumpedvalue;
|
if ($type eq 'boolean' || $type eq 'integer') {
|
||||||
$dumpedvalue=~s/^\t//;
|
$dumpedvalue=$value;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$dumpedvalue=Dumper($value);
|
||||||
|
chomp $dumpedvalue;
|
||||||
|
$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
|
||||||
|
|
Loading…
Reference in New Issue