Make sure deleted tag pages don't get recreated.
[ikiwiki.git] / IkiWiki.pm
index ad9fb7c7907bc68d8162340378a891396dd7416b..966a3bbc627a85f35d9c1953b2653121cf5919c2 100644 (file)
@@ -14,8 +14,7 @@ use open qw{:utf8 :std};
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
            %pagestate %wikistate %renderedfiles %oldrenderedfiles
            %pagesources %destsources %depends %depends_simple %hooks
-           %forcerebuild %loaded_plugins @autofiles %dellinks
-           %delrenderedfiles};
+           %forcerebuild %loaded_plugins %autofiles %del_hash};
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage deptype
@@ -23,7 +22,7 @@ our @EXPORT = qw(hook debug error template htmlpage deptype
                 htmllink readfile writefile pagetype srcfile pagename
                 displaytime will_render gettext urlto targetpage
                 add_underlay pagetitle titlepage linkpage newpagefile
-                inject add_link
+                inject add_link add_autofile
                  %config %links %pagestate %wikistate %renderedfiles
                  %pagesources %destsources);
 our $VERSION = 3.00; # plugin interface version, next is ikiwiki version
@@ -744,10 +743,7 @@ sub srcfile_stat {
 }
 
 sub srcfile ($;$) {
-       if (my @stat=srcfile_stat(@_)) {
-               return $stat[0];
-       }
-       return undef
+       return (srcfile_stat(@_))[0];
 }
 
 sub add_underlay ($) {
@@ -1899,12 +1895,28 @@ sub add_link ($$) {
                unless grep { $_ eq $link } @{$links{$page}};
 }
 
-sub add_autofile ($) {
-       my $addfile=shift;
-       my ($file,$page) = verify_src_file($addfile,$config{srcdir});
-       if ($page) {
-               push @autofiles, $file;
+sub add_autofile ($$) {
+       my $autofile=shift;
+       my $plugin=shift;
+
+       if (srcfile($autofile, 1)) {
+               return 0;
        }
+
+       my ($file, $page) = verify_src_file("$config{srcdir}/$autofile", $config{srcdir});
+
+       if ((!defined $file) ||
+       (exists $pagestate{$page}{$plugin}{autofile_deleted})) {
+               return 0;
+       }
+
+       if (exists $del_hash{$file}) {
+               $pagestate{$page}{$plugin}{autofile_deleted}=1;
+               return 0;
+       }
+
+       $autofiles{$file}=$plugin;
+       return 1;
 }
 
 sub pagespec_translate ($) {