X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/1eee32c5b553f0fb170650a68f67d9a01f6d2af8..40ede54675bf39c4d7ba7c5aab80a2ee0e36ef24:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 10a316e03..a5dc66516 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -69,15 +69,16 @@ sub defaultconfig () { #{{{ setup => undef, adminuser => undef, adminemail => undef, - plugin => [qw{mdwn inline htmlscrubber passwordauth signinedit + plugin => [qw{mdwn inline htmlscrubber passwordauth openid signinedit lockedit conditional}], timeformat => '%c', locale => undef, sslcookie => 0, httpauth => 0, userdir => "", - usedirs => 0, + usedirs => 1, numbacklinks => 10, + account_creation_password => "", } #}}} sub checkconfig () { #{{{ @@ -650,12 +651,14 @@ sub preprocess ($$$;$$) { #{{{ return $content; } #}}} -sub filter ($$) { #{{{ +sub filter ($$$) { #{{{ my $page=shift; + my $destpage=shift; my $content=shift; run_hooks(filter => sub { - $content=shift->(page => $page, content => $content); + $content=shift->(page => $page, destpage => $destpage, + content => $content); }); return $content; @@ -665,7 +668,8 @@ sub indexlink () { #{{{ return "$config{wikiname}"; } #}}} -sub lockwiki () { #{{{ +sub lockwiki (;$) { #{{{ + my $wait=@_ ? shift : 1; # Take an exclusive lock on the wiki to prevent multiple concurrent # run issues. The lock will be dropped on program exit. if (! -d $config{wikistatedir}) { @@ -674,15 +678,21 @@ sub lockwiki () { #{{{ open(WIKILOCK, ">$config{wikistatedir}/lockfile") || error ("cannot write to $config{wikistatedir}/lockfile: $!"); if (! flock(WIKILOCK, 2 | 4)) { # LOCK_EX | LOCK_NB - debug("wiki seems to be locked, waiting for lock"); - my $wait=600; # arbitrary, but don't hang forever to - # prevent process pileup - for (1..$wait) { - return if flock(WIKILOCK, 2 | 4); - sleep 1; + if ($wait) { + debug("wiki seems to be locked, waiting for lock"); + my $wait=600; # arbitrary, but don't hang forever to + # prevent process pileup + for (1..$wait) { + return if flock(WIKILOCK, 2 | 4); + sleep 1; + } + error("wiki is locked; waited $wait seconds without lock being freed (possible stuck process or stale lock?)"); + } + else { + return 0; } - error("wiki is locked; waited $wait seconds without lock being freed (possible stuck process or stale lock?)"); } + return 1; } #}}} sub unlockwiki () { #{{{ @@ -736,9 +746,9 @@ sub loadindex () { #{{{ $depends{$page}=$items{depends}[0] if exists $items{depends}; $destsources{$_}=$page foreach @{$items{dest}}; $renderedfiles{$page}=[@{$items{dest}}]; - $oldrenderedfiles{$page}=[@{$items{dest}}]; $pagecase{lc $page}=$page; } + $oldrenderedfiles{$page}=[@{$items{dest}}]; $pagectime{$page}=$items{ctime}[0]; } close IN; @@ -1011,29 +1021,29 @@ sub pagespec_match ($$;@) { #{{{ package IkiWiki::FailReason; -use overload ( +use overload ( #{{{ '""' => sub { ${$_[0]} }, '0+' => sub { 0 }, '!' => sub { bless $_[0], 'IkiWiki::SuccessReason'}, fallback => 1, -); +); #}}} -sub new { +sub new { #{{{ bless \$_[1], $_[0]; -} +} #}}} package IkiWiki::SuccessReason; -use overload ( +use overload ( #{{{ '""' => sub { ${$_[0]} }, '0+' => sub { 1 }, '!' => sub { bless $_[0], 'IkiWiki::FailReason'}, fallback => 1, -); +); #}}} -sub new { +sub new { #{{{ bless \$_[1], $_[0]; -} +}; #}}} package IkiWiki::PageSpec;