X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/d68d25526816d40048ca47ad360304bce162b659..c849a9f409e8b3cd5091dd8b674670850d7bd3b9:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 98aab8204..a90d202ee 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -262,12 +262,13 @@ sub render ($$) { } } -sub prune ($) { +sub prune ($;$) { my $file=shift; + my $up_to=shift; unlink($file); my $dir=dirname($file); - while (rmdir($dir)) { + while ((! defined $up_to || $dir =~ m{^\Q$up_to\E\/}) && rmdir($dir)) { $dir=dirname($dir); } } @@ -447,7 +448,7 @@ sub remove_del (@) { } foreach my $old (@{$oldrenderedfiles{$page}}) { - prune($config{destdir}."/".$old); + prune($config{destdir}."/".$old, $config{destdir}); } foreach my $source (keys %destsources) { @@ -537,7 +538,7 @@ sub remove_unrendered () { foreach my $file (@{$oldrenderedfiles{$page}}) { if (! grep { $_ eq $file } @{$renderedfiles{$page}}) { debug(sprintf(gettext("removing %s, no longer built by %s"), $file, $page)); - prune($config{destdir}."/".$file); + prune($config{destdir}."/".$file, $config{destdir}); } } } @@ -832,10 +833,10 @@ sub refresh () { run_hooks(rendered => sub { shift->(keys %rendered) }); run_hooks(change => sub { shift->(keys %rendered) }); # back-compat } - run_hooks(difference => sub { - shift->(@$new, @$changed, @$del, - @$internal_new, @$internal_changed, @$internal_del); - }); + my %all_changed = map { $_ => 1 } + @$new, @$changed, @$del, + @$internal_new, @$internal_changed, @$internal_del; + run_hooks(changes => sub { shift->(keys %all_changed) }); } sub clean_rendered { @@ -844,7 +845,7 @@ sub clean_rendered { remove_unrendered(); foreach my $page (keys %oldrenderedfiles) { foreach my $file (@{$oldrenderedfiles{$page}}) { - prune($config{destdir}."/".$file); + prune($config{destdir}."/".$file, $config{destdir}); } } }