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

diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index da2d7b4cc..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,12 +457,25 @@ 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;
 
@@ -470,14 +486,18 @@ sub refresh () {
 						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;
+							$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,