rework influence calculation
Thought of a cleaner way to accumulate all influences in pagespec_match_list, using the pagespec_match result object as an accumulator. (This also accumulates all influences from failed matches, rather than just one failed match. I'm not sure if the old method was correct.)master
parent
9eb229bfc7
commit
4ef0b2d77b
32
IkiWiki.pm
32
IkiWiki.pm
|
@ -2032,41 +2032,25 @@ sub pagespec_match_list ($$;@) {
|
|||
my @matches;
|
||||
my $firstfail;
|
||||
my $count=0;
|
||||
my $accum=IkiWiki::SuccessReason->new();
|
||||
foreach my $p (@candidates) {
|
||||
my $r=$sub->($p, %params, location => $page);
|
||||
error(sprintf(gettext("cannot match pages: %s"), $r))
|
||||
if $r->isa("IkiWiki::ErrorReason");
|
||||
$accum |= $r;
|
||||
if ($r) {
|
||||
push @matches, [$p, $r];
|
||||
push @matches, $p;
|
||||
last if defined $num && ++$count == $num;
|
||||
}
|
||||
elsif (! defined $firstfail) {
|
||||
$firstfail=$r;
|
||||
}
|
||||
}
|
||||
|
||||
my @ret;
|
||||
if (@matches) {
|
||||
# Add all influences from successful matches.
|
||||
foreach my $m (@matches) {
|
||||
push @ret, $m->[0];
|
||||
my %i=$m->[1]->influences;
|
||||
foreach my $i (keys %i) {
|
||||
$depends_simple{$page}{lc $i} |= $i{$i};
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif (defined $firstfail) {
|
||||
# Add influences from one failure. (Which one should not
|
||||
# matter; all should have the same influences.)
|
||||
my %i=$firstfail->influences;
|
||||
# Add simple dependencies for accumulated influences.
|
||||
my %i=$accum->influences;
|
||||
foreach my $i (keys %i) {
|
||||
$depends_simple{$page}{lc $i} |= $i{$i};
|
||||
}
|
||||
|
||||
error(sprintf(gettext("cannot match pages: %s"), $firstfail))
|
||||
if $firstfail->isa("IkiWiki::ErrorReason");
|
||||
}
|
||||
|
||||
return @ret;
|
||||
return @matches;
|
||||
}
|
||||
|
||||
sub pagespec_valid ($) {
|
||||
|
|
Loading…
Reference in New Issue