add info for all common setup file options, and most internal ones
authorJoey Hess <joey@kodama.kitenet.net>
Sat, 26 Jul 2008 18:39:12 +0000 (14:39 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sat, 26 Jul 2008 18:39:12 +0000 (14:39 -0400)
IkiWiki.pm
IkiWiki/Setup/Standard.pm

index 01e7cc1e4c1febee4d84209c281e84a78deb7198..6a72a0144e9da40c7cd00a6f2ec09fe8835fd085 100644 (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 () { #{{{
index 912b64ba683e1d90861baf2cc61649f09493af1e..d88dc9e1c266aada900195c0e9c33d0db5fd5fd5 100644 (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