improved fix for depends_simple_mixup
authorJoey Hess <joey@kitenet.net>
Thu, 22 Apr 2010 04:12:15 +0000 (00:12 -0400)
committerJoey Hess <joey@kitenet.net>
Thu, 22 Apr 2010 04:18:20 +0000 (00:18 -0400)
Avoid adding the page matched against as an influence for
currently failing pagespec matches, while still adding
any other influences.

This avoids bloating depends_simple with lots of bogus influences when
matching eg, "!link(done)". It's only necessary for the page being tested
to be an influence of that if the page matches.

IkiWiki.pm
doc/bugs/depends_simple_mixup.mdwn

index 0791e1e755911ef4659bd2b509abde467e99a426..509f9ba2e721be581f65c9b5fbf5b0960b4f42c1 100644 (file)
@@ -1818,10 +1818,12 @@ sub add_depends ($$;$) {
        foreach my $p (keys %pagesources) {
                my $r=$sub->($p, location => $page);
                my $i=$r->influences;
+               my $static=$r->influences_static;
                foreach my $k (keys %$i) {
+                       next unless $r || $static || $k eq $page;
                        $depends_simple{$page}{lc $k} |= $i->{$k};
                }
-               last if $r->influences_static;
+               last if $static;
        }
 
        $depends{$page}{$pagespec} |= $deptype;
@@ -2136,6 +2138,9 @@ sub pagespec_match_list ($$;@) {
                my $r=$sub->($p, %params, location => $page);
                error(sprintf(gettext("cannot match pages: %s"), $r))
                        if $r->isa("IkiWiki::ErrorReason");
+               unless ($r) {
+                       $r->remove_influence($p);
+               }
                $accum |= $r;
                if ($r) {
                        push @matches, $p;
@@ -2232,6 +2237,13 @@ sub merge_influences {
        }
 }
 
+sub remove_influence {
+       my $this=shift;
+       my $torm=shift;
+
+       delete $this->[1]{$torm};
+}
+
 package IkiWiki::ErrorReason;
 
 our @ISA = 'IkiWiki::FailReason';
index 79bfa8bdc9a1f538b961894c67004fc7de2b7346..a5910d02e83151092f98f177594f4017dc3fc2d9 100644 (file)
@@ -81,4 +81,8 @@ non-$page influences.
 Hmm, commit f2b3d1341447cbf29189ab490daae418fbe5d02d seems
 thuroughly wrong. So, what about influence info for other matches
 like `!author(foo)` etc? Currently, none is returned, but it should
-be a content influence. (Backlink influence data is ok.)
+be a content influence. (Backlink influence data seems ok.)
+
+----
+
+[[done]] again!