X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/52d9f8e9f38f03efd0b1662f3f2d20ce115ed099..5e52e05fd20d9185a740e45f34eec68d7678d383:/IkiWiki.pm?ds=sidebyside diff --git a/IkiWiki.pm b/IkiWiki.pm index 668de7e93..221d1e589 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1106,6 +1106,8 @@ sub add_depends ($$) { #{{{ my $page=shift; my $pagespec=shift; + return unless pagespec_valid($pagespec); + if (! exists $depends{$page}) { $depends{$page}=$pagespec; } @@ -1167,8 +1169,6 @@ sub pagespec_merge ($$) { #{{{ } #}}} sub pagespec_translate ($) { #{{{ - # This assumes that $page is in scope in the function - # that evalulates the translated pagespec code. my $spec=shift; # Support for old-style GlobLists. @@ -1205,18 +1205,18 @@ sub pagespec_translate ($) { #{{{ } elsif ($word =~ /^(\w+)\((.*)\)$/) { if (exists $IkiWiki::PageSpec::{"match_$1"}) { - $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@params)"; + $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)"; } else { $code.=' 0'; } } else { - $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@params)"; + $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@_)"; } } - return $code; + return eval 'sub { my $page=shift; '.$code.' }'; } #}}} sub pagespec_match ($$;@) { #{{{ @@ -1229,9 +1229,16 @@ sub pagespec_match ($$;@) { #{{{ unshift @params, 'location'; } - my $ret=eval pagespec_translate($spec); + my $sub=pagespec_translate($spec); return IkiWiki::FailReason->new('syntax error') if $@; - return $ret; + return $sub->($page, @params); +} #}}} + +sub pagespec_valid ($) { #{{{ + my $spec=shift; + + my $sub=pagespec_translate($spec); + return ! $@; } #}}} package IkiWiki::FailReason;