]> sipb.mit.edu Git - ikiwiki.git/blobdiff - ikiwiki
fix oops in %config handling
[ikiwiki.git] / ikiwiki
diff --git a/ikiwiki b/ikiwiki
index aec52ca8601951f5dbe547d43d66ed249fdfcb75..51f324d13abd56ed573ac3861683af89dbe9f19a 100755 (executable)
--- a/ikiwiki
+++ b/ikiwiki
@@ -33,7 +33,7 @@ our %config=( #{{{
        wrappermode => undef,
        srcdir => undef,
        destdir => undef,
        wrappermode => undef,
        srcdir => undef,
        destdir => undef,
-       templatedir => undef,
+       templatedir => "/usr/share/ikiwiki/templates",
        setup => undef,
        adminuser => undef,
 ); #}}}
        setup => undef,
        adminuser => undef,
 ); #}}}
@@ -56,21 +56,27 @@ GetOptions( #{{{
                $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/;
        },
        "adminuser=s@" => sub { push @{$config{adminuser}}, $_[1] },
                $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/;
        },
        "adminuser=s@" => sub { push @{$config{adminuser}}, $_[1] },
+       "templatedir=s" => sub { $config{templatedir}=possibly_foolish_untaint($_[1]) },
 ) || usage();
 
 if (! $config{setup}) {
 ) || usage();
 
 if (! $config{setup}) {
-       usage() unless @ARGV == 3;
+       usage() unless @ARGV == 2;
        $config{srcdir} = possibly_foolish_untaint(shift);
        $config{srcdir} = possibly_foolish_untaint(shift);
-       $config{templatedir} = possibly_foolish_untaint(shift);
        $config{destdir} = possibly_foolish_untaint(shift);
        $config{destdir} = possibly_foolish_untaint(shift);
+       checkoptions();
+}
+#}}}
+
+sub checkoptions { #{{{
        if ($config{cgi} && ! length $config{url}) {
                error("Must specify url to wiki with --url when using --cgi");
        }
        if ($config{cgi} && ! length $config{url}) {
                error("Must specify url to wiki with --url when using --cgi");
        }
-}
-#}}}
+       $config{wikistatedir}="$config{srcdir}/.ikiwiki"
+               unless exists $config{wikistatedir};
+} #}}}
 
 sub usage { #{{{
 
 sub usage { #{{{
-       die "usage: ikiwiki [options] source templates dest\n";
+       die "usage: ikiwiki [options] source dest\n";
 } #}}}
 
 sub error { #{{{
 } #}}}
 
 sub error { #{{{
@@ -415,10 +421,11 @@ sub render ($) { #{{{
 sub lockwiki () { #{{{
        # Take an exclusive lock on the wiki to prevent multiple concurrent
        # run issues. The lock will be dropped on program exit.
 sub lockwiki () { #{{{
        # Take an exclusive lock on the wiki to prevent multiple concurrent
        # run issues. The lock will be dropped on program exit.
-       if (! -d "$config{srcdir}/.ikiwiki") {
-               mkdir("$config{srcdir}/.ikiwiki");
+       if (! -d $config{wikistatedir}) {
+               mkdir($config{wikistatedir});
        }
        }
-       open(WIKILOCK, ">$config{srcdir}/.ikiwiki/lockfile") || error ("cannot write to lockfile: $!");
+       open(WIKILOCK, ">$config{wikistatedir}/lockfile") ||
+               error ("cannot write to $config{wikistatedir}/lockfile: $!");
        if (! flock(WIKILOCK, 2 | 4)) {
                debug("wiki seems to be locked, waiting for lock");
                my $wait=600; # arbitrary, but don't hang forever to 
        if (! flock(WIKILOCK, 2 | 4)) {
                debug("wiki seems to be locked, waiting for lock");
                my $wait=600; # arbitrary, but don't hang forever to 
@@ -436,7 +443,7 @@ sub unlockwiki () { #{{{
 } #}}}
 
 sub loadindex () { #{{{
 } #}}}
 
 sub loadindex () { #{{{
-       open (IN, "$config{srcdir}/.ikiwiki/index") || return;
+       open (IN, "$config{wikistatedir}/index") || return;
        while (<IN>) {
                $_=possibly_foolish_untaint($_);
                chomp;
        while (<IN>) {
                $_=possibly_foolish_untaint($_);
                chomp;
@@ -452,10 +459,11 @@ sub loadindex () { #{{{
 } #}}}
 
 sub saveindex () { #{{{
 } #}}}
 
 sub saveindex () { #{{{
-       if (! -d "$config{srcdir}/.ikiwiki") {
-               mkdir("$config{srcdir}/.ikiwiki");
+       if (! -d $config{wikistatedir}) {
+               mkdir($config{wikistatedir});
        }
        }
-       open (OUT, ">$config{srcdir}/.ikiwiki/index") || error("cannot write to index: $!");
+       open (OUT, ">$config{wikistatedir}/index") || 
+               error("cannot write to $config{wikistatedir}/index: $!");
        foreach my $page (keys %oldpagemtime) {
                print OUT "$oldpagemtime{$page} $pagesources{$page} $renderedfiles{$page} ".
                        join(" ", @{$links{$page}})."\n"
        foreach my $page (keys %oldpagemtime) {
                print OUT "$oldpagemtime{$page} $pagesources{$page} $renderedfiles{$page} ".
                        join(" ", @{$links{$page}})."\n"
@@ -758,8 +766,7 @@ FILE:               foreach my $file (@files) {
        }
 } #}}}
 
        }
 } #}}}
 
-sub gen_wrapper (@) { #{{{
-       my %config=(@_);
+sub gen_wrapper () { #{{{
        eval q{use Cwd 'abs_path'};
        $config{srcdir}=abs_path($config{srcdir});
        $config{destdir}=abs_path($config{destdir});
        eval q{use Cwd 'abs_path'};
        $config{srcdir}=abs_path($config{srcdir});
        $config{destdir}=abs_path($config{destdir});
@@ -772,8 +779,9 @@ sub gen_wrapper (@) { #{{{
                error("cannot create a wrapper that uses a setup file");
        }
        
                error("cannot create a wrapper that uses a setup file");
        }
        
-       my @params=($config{srcdir}, $config{templatedir}, $config{destdir},
-               "--wikiname=$config{wikiname}");
+       my @params=($config{srcdir}, $config{destdir},
+               "--wikiname=$config{wikiname}",
+               "--templatedir=$config{templatedir}");
        push @params, "--verbose" if $config{verbose};
        push @params, "--rebuild" if $config{rebuild};
        push @params, "--nosvn" if !$config{svn};
        push @params, "--verbose" if $config{verbose};
        push @params, "--rebuild" if $config{rebuild};
        push @params, "--nosvn" if !$config{svn};
@@ -882,7 +890,7 @@ sub userinfo_get ($$) { #{{{
        my $field=shift;
 
        eval q{use Storable};
        my $field=shift;
 
        eval q{use Storable};
-       my $userdata=eval{ Storable::lock_retrieve("$config{srcdir}/.ikiwiki/userdb") };
+       my $userdata=eval{ Storable::lock_retrieve("$config{wikistatedir}/userdb") };
        if (! defined $userdata || ! ref $userdata || 
            ! exists $userdata->{$user} || ! ref $userdata->{$user} ||
             ! exists $userdata->{$user}->{$field}) {
        if (! defined $userdata || ! ref $userdata || 
            ! exists $userdata->{$user} || ! ref $userdata->{$user} ||
             ! exists $userdata->{$user}->{$field}) {
@@ -897,7 +905,7 @@ sub userinfo_set ($$$) { #{{{
        my $value=shift;
        
        eval q{use Storable};
        my $value=shift;
        
        eval q{use Storable};
-       my $userdata=eval{ Storable::lock_retrieve("$config{srcdir}/.ikiwiki/userdb") };
+       my $userdata=eval{ Storable::lock_retrieve("$config{wikistatedir}/userdb") };
        if (! defined $userdata || ! ref $userdata || 
            ! exists $userdata->{$user} || ! ref $userdata->{$user}) {
                return "";
        if (! defined $userdata || ! ref $userdata || 
            ! exists $userdata->{$user} || ! ref $userdata->{$user}) {
                return "";
@@ -905,7 +913,7 @@ sub userinfo_set ($$$) { #{{{
        
        $userdata->{$user}->{$field}=$value;
        my $oldmask=umask(077);
        
        $userdata->{$user}->{$field}=$value;
        my $oldmask=umask(077);
-       my $ret=Storable::lock_store($userdata, "$config{srcdir}/.ikiwiki/userdb");
+       my $ret=Storable::lock_store($userdata, "$config{wikistatedir}/userdb");
        umask($oldmask);
        return $ret;
 } #}}}
        umask($oldmask);
        return $ret;
 } #}}}
@@ -915,13 +923,13 @@ sub userinfo_setall ($$) { #{{{
        my $info=shift;
        
        eval q{use Storable};
        my $info=shift;
        
        eval q{use Storable};
-       my $userdata=eval{ Storable::lock_retrieve("$config{srcdir}/.ikiwiki/userdb") };
+       my $userdata=eval{ Storable::lock_retrieve("$config{wikistatedir}/userdb") };
        if (! defined $userdata || ! ref $userdata) {
                $userdata={};
        }
        $userdata->{$user}=$info;
        my $oldmask=umask(077);
        if (! defined $userdata || ! ref $userdata) {
                $userdata={};
        }
        $userdata->{$user}=$info;
        my $oldmask=umask(077);
-       my $ret=Storable::lock_store($userdata, "$config{srcdir}/.ikiwiki/userdb");
+       my $ret=Storable::lock_store($userdata, "$config{wikistatedir}/userdb");
        umask($oldmask);
        return $ret;
 } #}}}
        umask($oldmask);
        return $ret;
 } #}}}
@@ -1137,6 +1145,8 @@ sub page_locked ($$;$) { #{{{
                              htmllink("", $admin, 1)." and cannot be edited.");
                }
        }
                              htmllink("", $admin, 1)." and cannot be edited.");
                }
        }
+
+       return 0;
 } #}}}
 
 sub cgi_prefs ($$) { #{{{
 } #}}}
 
 sub cgi_prefs ($$) { #{{{
@@ -1415,7 +1425,7 @@ sub cgi () { #{{{
 
        my $oldmask=umask(077);
        my $session = CGI::Session->new("driver:db_file", $q,
 
        my $oldmask=umask(077);
        my $session = CGI::Session->new("driver:db_file", $q,
-               { FileName => "$config{srcdir}/.ikiwiki/sessions.db" });
+               { FileName => "$config{wikistatedir}/sessions.db" });
        umask($oldmask);
        
        # Everything below this point needs the user to be signed in.
        umask($oldmask);
        
        # Everything below this point needs the user to be signed in.
@@ -1461,7 +1471,7 @@ sub setup () { # {{{
 setup() if $config{setup};
 lockwiki();
 if ($config{wrapper}) {
 setup() if $config{setup};
 lockwiki();
 if ($config{wrapper}) {
-       gen_wrapper(%config);
+       gen_wrapper();
        exit;
 }
 memoize('pagename');
        exit;
 }
 memoize('pagename');