# Copyright © 2010 Thomas Schwinge # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2, or (at your option) any later # version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package IkiWiki::Plugin::reset_mtimes; use warnings; use strict; use IkiWiki 3.00; # This plugin resets pages' / files' mtimes according to the RCS information # when using --refresh mode. # # Note that the files' mtimes are *always* set, even if the file has # un-committed changes. # # sub import { hook (type => "needsbuild", id => "reset_mtimes", call => \&needsbuild); } sub needsbuild (@) { # Only proceed if --gettime is in effect, as we're clearly not intersted in # this functionality otherwise. return unless $config{gettime}; my $files = shift; foreach my $file (@$files) { # [TODO. Perhaps not necessary. Can this hook ever be called for # removed pages -- that need to be ``rebuilt'' in the sense that # they're to be removed?] Don't bother for pages that don't exist # anymore. next unless -e "$config{srcdir}/$file"; my $page = pagename ($file); debug ("needsbuild: <$file> <$page>"); # Only ever update -- otherwise ikiwiki shall do its own thing. if (defined $IkiWiki::pagemtime{$page}) { debug ("pagemtime: " . $IkiWiki::pagemtime{$page}); my $mtime = 0; eval { $mtime = IkiWiki::rcs_getmtime ($file); }; if ($@) { print STDERR $@; } elsif ($mtime > 0) { $IkiWiki::pagemtime{$page} = $mtime; # We have to set the actual file's mtime too, as otherwise # ikiwiki will update it again and again. utime($mtime, $mtime, "$config{srcdir}/$file"); } debug ("pagemtime: " . $IkiWiki::pagemtime{$page}); } } } 1