]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Merge remote-tracking branch 'spalax/paternal/libdirs'
authorSimon McVittie <smcv@debian.org>
Tue, 9 Dec 2014 19:58:36 +0000 (19:58 +0000)
committerSimon McVittie <smcv@debian.org>
Tue, 9 Dec 2014 19:58:36 +0000 (19:58 +0000)
1  2 
IkiWiki.pm

diff --combined IkiWiki.pm
index 83679243fe3706a1ec42669df74ceb8ff4733eed,9e2eb0b1a98130bbfc2d7cbb7fd548eda46ad75c..7c55764befa0f5d325e01f302ca4a8a036c82256
@@@ -5,7 -5,6 +5,7 @@@ package IkiWiki
  use warnings;
  use strict;
  use Encode;
 +use Fcntl q{:flock};
  use URI::Escape q{uri_escape_utf8};
  use POSIX ();
  use Storable;
@@@ -275,7 -274,7 +275,7 @@@ sub getsetup () 
        html5 => {
                type => "boolean",
                default => 0,
 -              description => "generate HTML5?",
 +              description => "use elements new in HTML5 like <section>?",
                advanced => 0,
                safe => 1,
                rebuild => 1,
                type => "string",
                default => "",
                example => "$ENV{HOME}/.ikiwiki/",
-               description => "extra library and plugin directory",
+               description => "extra library and plugin directorys. Can be either a string (for backward compatibility) or a list of strings.",
                advanced => 1,
                safe => 0, # directory
                rebuild => 0,
                safe => 0,
                rebuild => 0,
        },
 +      responsive_layout => {
 +              type => "boolean",
 +              default => 1,
 +              description => "theme has a responsive layout? (mobile-optimized)",
 +              safe => 1,
 +              rebuild => 1,
 +      },
  }
  
+ sub getlibdirs () {
+       my $libdirs;
+       if (! ref $config{libdir}) {
+               if (length $config{libdir}) {
+                       $libdirs = [$config{libdir}];
+               } else {
+                       $libdirs = [];
+               }
+       } else {
+               $libdirs = $config{libdir};
+       }
+       return @{$libdirs};
+ }
  sub defaultconfig () {
        my %s=getsetup();
        my @ret;
@@@ -701,14 -707,14 +715,14 @@@ sub checkconfig () 
  sub listplugins () {
        my %ret;
  
-       foreach my $dir (@INC, $config{libdir}) {
+       foreach my $dir (@INC, getlibdirs()) {
                next unless defined $dir && length $dir;
                foreach my $file (glob("$dir/IkiWiki/Plugin/*.pm")) {
                        my ($plugin)=$file=~/.*\/(.*)\.pm$/;
                        $ret{$plugin}=1;
                }
        }
-       foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") {
+       foreach my $dir (getlibdirs(), "$installdir/lib/ikiwiki") {
                next unless defined $dir && length $dir;
                foreach my $file (glob("$dir/plugins/*")) {
                        $ret{basename($file)}=1 if -x $file;
  
  sub loadplugins () {
        if (defined $config{libdir} && length $config{libdir}) {
-               unshift @INC, possibly_foolish_untaint($config{libdir});
+               foreach my $dir (getlibdirs()) {
+                       unshift @INC, possibly_foolish_untaint($dir);
+               }
        }
  
        foreach my $plugin (@{$config{default_plugins}}, @{$config{add_plugins}}) {
@@@ -753,8 -761,8 +769,8 @@@ sub loadplugin ($;$) 
  
        return if ! $force && grep { $_ eq $plugin} @{$config{disable_plugins}};
  
-       foreach my $dir (defined $config{libdir} ? possibly_foolish_untaint($config{libdir}) : undef,
-                        "$installdir/lib/ikiwiki") {
+       foreach my $possiblytainteddir (getlibdirs(), "$installdir/lib/ikiwiki") {
+               my $dir = defined $possiblytainteddir ? possibly_foolish_untaint($possiblytainteddir) : undef;
                if (defined $dir && -x "$dir/plugins/$plugin") {
                        eval { require IkiWiki::Plugin::external };
                        if ($@) {
@@@ -1814,11 -1822,8 +1830,11 @@@ sub lockwiki () 
        }
        open($wikilock, '>', "$config{wikistatedir}/lockfile") ||
                error ("cannot write to $config{wikistatedir}/lockfile: $!");
 -      if (! flock($wikilock, 2)) { # LOCK_EX
 -              error("failed to get lock");
 +      if (! flock($wikilock, LOCK_EX | LOCK_NB)) {
 +              debug("failed to get lock; waiting...");
 +              if (! flock($wikilock, LOCK_EX)) {
 +                      error("failed to get lock");
 +              }
        }
        return 1;
  }