X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/6d22987b4e82a978bb37229db210fc9ba14f44bd..ca9e45c3ba2ad852123aeb8783eed07ed73ce00c:/doc/todo/tracking_bugs_with_dependencies.mdwn?ds=sidebyside diff --git a/doc/todo/tracking_bugs_with_dependencies.mdwn b/doc/todo/tracking_bugs_with_dependencies.mdwn index 8435e9f58..2832e37aa 100644 --- a/doc/todo/tracking_bugs_with_dependencies.mdwn +++ b/doc/todo/tracking_bugs_with_dependencies.mdwn @@ -191,12 +191,12 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W ---- diff --git a/IkiWiki.pm b/IkiWiki.pm - index 4e4da11..2cc5f09 100644 + index 4e4da11..8b3cdfe 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -1550,7 +1550,16 @@ sub globlist_to_pagespec ($) { #{{{ + @@ -1550,7 +1550,16 @@ sub globlist_to_pagespec ($) { - sub is_globlist ($) { #{{{ + sub is_globlist ($) { my $s=shift; - return ( $s =~ /[^\s]+\s+([^\s]+)/ && $1 ne "and" && $1 ne "or" ); + return ! ($s =~ / @@ -208,20 +208,20 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W + \))?\s*$ + ) | + (\s and \s) | (\s or \s) # or we find 'and' or 'or' somewhere - + /x); - } #}}} + + /xs); + } - sub safequote ($) { #{{{ - @@ -1631,7 +1640,7 @@ sub pagespec_merge ($$) { #{{{ + sub safequote ($) { + @@ -1631,7 +1640,7 @@ sub pagespec_merge ($$) { return "($a) or ($b)"; - } #}}} + } - -sub pagespec_translate ($) { #{{{ - +sub pagespec_makeperl ($) { #{{{ + -sub pagespec_translate ($) { + +sub pagespec_makeperl ($) { my $spec=shift; # Support for old-style GlobLists. - @@ -1650,7 +1659,9 @@ sub pagespec_translate ($) { #{{{ + @@ -1650,12 +1659,14 @@ sub pagespec_translate ($) { | \) # ) | @@ -232,18 +232,25 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W | [^\s()]+ # any other text ) - @@ -1666,16 +1677,23 @@ sub pagespec_translate ($) { #{{{ + \s* # ignore whitespace + - }igx) { + + }igxs) { + my $word=$1; + if (lc $word eq 'and') { + $code.=' &&'; + @@ -1666,16 +1677,23 @@ sub pagespec_translate ($) { elsif ($word eq "(" || $word eq ")" || $word eq "!") { $code.=' '.$word; } - + elsif ($word =~ /^define\(\s*~(\w+)\s*,(.*)\)$/) { + - elsif ($word =~ /^(\w+)\((.*)\)$/) { + + elsif ($word =~ /^define\(\s*~(\w+)\s*,(.*)\)$/s) { + $code .= " (\$params{specFuncs}->{$1}="; # (exists \$params{specFuncs}) && + $code .= "memoize("; + $code .= &pagespec_makeperl($2); + $code .= ")"; + $code .= ") "; + } - elsif ($word =~ /^(\w+)\((.*)\)$/) { + + elsif ($word =~ /^(\w+)\((.*)\)$/s) { if (exists $IkiWiki::PageSpec::{"match_$1"}) { - $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)"; + $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \%params)"; @@ -258,14 +265,14 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W } } - @@ -1683,23 +1701,36 @@ sub pagespec_translate ($) { #{{{ + @@ -1683,8 +1701,18 @@ sub pagespec_translate ($) { $code=0; } + return 'sub { my $page=shift; my %params = @_; '.$code.' }'; - +} #}}} + +} + - +sub pagespec_translate ($) { #{{{ + +sub pagespec_translate ($) { + my $spec=shift; + + my $code = pagespec_makeperl($spec); @@ -275,30 +282,19 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W no warnings; - return eval 'sub { my $page=shift; '.$code.' }'; + return eval $code; - } #}}} + } - sub pagespec_match ($$;@) { #{{{ - my $page=shift; - my $spec=shift; - my @params=@_; - + my %params=@_; + sub pagespec_match ($$;@) { + @@ -1699,7 +1727,7 @@ sub pagespec_match ($$;@) { - # Backwards compatability with old calling convention. - if (@params == 1) { - - unshift @params, 'location'; - + %params = { location => $params[1] }; - } - - + $params{specFuncs} = {} unless defined $params{specFuncs}; - + my $sub=pagespec_translate($spec); return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"") if $@; - return $sub->($page, @params); - + return $sub->($page, %params); - } #}}} + + return $sub->($page, @params, specFuncs => {}); + } - sub pagespec_valid ($) { #{{{ - @@ -1748,11 +1779,78 @@ sub new { #{{{ + sub pagespec_valid ($) { + @@ -1748,11 +1776,78 @@ sub new { package IkiWiki::PageSpec; @@ -365,7 +361,7 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W + } +} + - sub match_glob ($$;@) { #{{{ + sub match_glob ($$;@) { my $page=shift; my $glob=shift; my %params=@_; @@ -377,29 +373,33 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W my $from=exists $params{location} ? $params{location} : ''; # relative matching - @@ -1782,11 +1880,16 @@ sub match_internal ($$;@) { #{{{ + @@ -1782,11 +1877,12 @@ sub match_internal ($$;@) { - sub match_link ($$;@) { #{{{ + sub match_link ($$;@) { my $page=shift; - my $link=lc(shift); + my $fulllink=shift; my %params=@_; + my $link=lc($fulllink); - - my $from=exists $params{location} ? $params{location} : ''; - + if (substr($fulllink, 0, 1) eq '~') { - + return check_named_spec_existential($page, $fulllink, \&match_link, %params); - + } - - + my $from=exists $params{location} ? $params{location} : ''; + my $from=exists $params{location} ? $params{location} : ''; + - + # relative matching if ($link =~ m!^\.! && defined $from) { $from=~s#/?[^/]+$##; - @@ -1811,12 +1914,25 @@ sub match_link ($$;@) { #{{{ - } #}}} + @@ -1804,19 +1900,32 @@ sub match_link ($$;@) { + } + else { + return IkiWiki::SuccessReason->new("$page links to page $p matching $link") + - if match_glob($p, $link, %params); + + if match_glob($p, $fulllink, %params); + } + } + return IkiWiki::FailReason->new("$page does not link to $link"); + } - sub match_backlink ($$;@) { #{{{ + sub match_backlink ($$;@) { - return match_link($_[1], $_[0], @_); + my $page=shift; + my $backlink=shift; @@ -410,9 +410,9 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W + } + + return match_link($backlink, $page, @params); - } #}}} + } - sub match_created_before ($$;@) { #{{{ + sub match_created_before ($$;@) { my $page=shift; my $testpage=shift; + my @params=@_; @@ -423,8 +423,8 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W if (exists $IkiWiki::pagectime{$testpage}) { if ($IkiWiki::pagectime{$page} < $IkiWiki::pagectime{$testpage}) { - @@ -1834,6 +1950,11 @@ sub match_created_before ($$;@) { #{{{ - sub match_created_after ($$;@) { #{{{ + @@ -1834,6 +1943,11 @@ sub match_created_before ($$;@) { + sub match_created_after ($$;@) { my $page=shift; my $testpage=shift; + my @params=@_;