summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-08-25 17:46:15 -0400
committerJoey Hess <joey@gnu.kitenet.net>2009-08-25 17:54:36 -0400
commit7dd9b65db4dae3aca473f15ea7dcdbf88c8acb1b (patch)
tree558dc151b29f82b3459bdb7d91fbb255cf556c33
parent2ef6b15973290619fdcbda2e323dbb50224622cb (diff)
don't use pagespec_match_list
This should be more efficient than pagespec_match_list since it short-circuits after the first match is found. The other problem with using pagespec_match_list here is it may throw an error if a bad or failing pagespec somehow got into the dependencies.
-rw-r--r--IkiWiki/Render.pm26
1 files changed, 14 insertions, 12 deletions
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index fb28b6e3b..da2d7b4cc 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -460,19 +460,21 @@ sub refresh () {
my $p=pagename($f);
if (exists $depends{$p}) {
foreach my $d (keys %{$depends{$p}}) {
+ my $sub=pagespec_translate($d);
+ next if $@ || ! defined $sub;
+
# only consider internal files
- # if the page explicitly depends on such files
- my @pages = map {
- pagename($_)
- } grep {
- $_ ne $f
- } (@changed, $d =~ /internal\(/ ? @internal : ());
- @pages = pagespec_match_list(\@pages, $d, location => $p);
- if (@pages) {
- debug(sprintf(gettext("building %s, which depends on %s"), $f, $pages[0]));
- render($f);
- $rendered{$f}=1;
- next F;
+ # if the page explicitly depends
+ # on such files
+ foreach my $file (@changed, $d =~ /internal\(/ ? @internal : ()) {
+ next if $file eq $f;
+ my $page=pagename($file);
+ if ($sub->($page, location => $p)) {
+ debug(sprintf(gettext("building %s, which depends on %s"), $f, $page));
+ render($f);
+ $rendered{$f}=1;
+ next F;
+ }
}
}
}