Merge remote branch 'davrieb/autotag' into autotag
[ikiwiki.git] / IkiWiki.pm
index 1730e476ae039ee2ff26241b810393184d648654..2f26a16ce5b361480d3e1b56e425f27020dd6f6c 100644 (file)
@@ -14,7 +14,8 @@ 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 %typedlinks %oldtypedlinks};
+           %forcerebuild %loaded_plugins %typedlinks %oldtypedlinks
+           %autofiles %del_hash};
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage deptype
@@ -22,7 +23,7 @@ our @EXPORT = qw(hook debug error template htmlpage deptype
                 htmllink readfile writefile pagetype srcfile pagename
                 displaytime will_render gettext ngettext urlto targetpage
                 add_underlay pagetitle titlepage linkpage newpagefile
-                inject add_link
+                inject add_link add_autofile
                  %config %links %pagestate %wikistate %renderedfiles
                  %pagesources %destsources %typedlinks);
 our $VERSION = 3.00; # plugin interface version, next is ikiwiki version
@@ -440,10 +441,9 @@ sub getsetup () {
                safe => 0,
                rebuild => 0,
        },
-       getctime => {
+       gettime => {
                type => "internal",
-               default => 0,
-               description => "running in getctime mode",
+               description => "running in gettime mode",
                safe => 0,
                rebuild => 0,
        },
@@ -1512,6 +1512,7 @@ sub loadindex () {
                        open ($in, "<", "$config{wikistatedir}/indexdb") || return;
                }
                else {
+                       $config{gettime}=1; # first build
                        return;
                }
        }
@@ -1790,6 +1791,10 @@ sub rcs_getctime ($) {
        $hooks{rcs}{rcs_getctime}{call}->(@_);
 }
 
+sub rcs_getmtime ($) {
+       $hooks{rcs}{rcs_getmtime}{call}->(@_);
+}
+
 sub rcs_receive () {
        $hooks{rcs}{rcs_receive}{call}->();
 }
@@ -2016,6 +2021,30 @@ sub sortspec_translate ($$) {
        return eval 'sub { '.$code.' }';
 }
 
+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 ($) {
        my $spec=shift;