X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/df8ab3406d67dd7d97fc45324ebb0e30c30dc9b0..a0de415ae0bdfef3aa12bc4201f72c6dedbe021d:/IkiWiki/Render.pm

diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index fb28b6e3b..246c2260d 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -210,6 +210,7 @@ sub render ($) {
 	if (defined $type) {
 		my $page=pagename($file);
 		delete $depends{$page};
+		delete $depends_simple{$page};
 		will_render($page, htmlpage($page), 1);
 		return if $type=~/^_/;
 		
@@ -224,6 +225,7 @@ sub render ($) {
 	}
 	else {
 		delete $depends{$file};
+		delete $depends_simple{$file};
 		will_render($file, $file, 1);
 		
 		if ($config{hardlink}) {
@@ -431,6 +433,7 @@ sub refresh () {
 		# internal pages are not rendered
 		my $page=pagename($file);
 		delete $depends{$page};
+		delete $depends_simple{$page};
 		foreach my $old (@{$renderedfiles{$page}}) {
 			delete $destsources{$old};
 		}
@@ -454,28 +457,47 @@ sub refresh () {
 	if (%rendered || @del || @internal) {
 		my @changed=(keys %rendered, @del);
 
+ 		my %lcchanged = map { lc(pagename($_)) => 1 } @changed;
+ 
 		# rebuild dependant pages
-		F: foreach my $f (@$files) {
+		foreach my $f (@$files) {
 			next if $rendered{$f};
 			my $p=pagename($f);
-			if (exists $depends{$p}) {
-				foreach my $d (keys %{$depends{$p}}) {
+			my $reason = undef;
+
+			if (exists $depends_simple{$p}) {
+				foreach my $d (keys %{$depends_simple{$p}}) {
+					if (exists $lcchanged{$d}) {
+						$reason = $d;
+						last;
+					}
+				}
+			}
+
+			if (exists $depends{$p} && ! defined $reason) {
+				D: 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)) {
+							$reason = $page;
+							last D;
+						}
 					}
 				}
 			}
+
+			if (defined $reason) {
+				debug(sprintf(gettext("building %s, which depends on %s"), $f, $reason));
+				render($f);
+				$rendered{$f}=1;
+			}
 		}
 		
 		# handle backlinks; if a page has added/removed links,