finish with rcs plugin conversion
authorJoey Hess <joey@kodama.kitenet.net>
Sun, 27 Jul 2008 02:27:58 +0000 (22:27 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sun, 27 Jul 2008 02:28:18 +0000 (22:28 -0400)
12 files changed:
IkiWiki.pm
IkiWiki/Plugin/bzr.pm
IkiWiki/Plugin/git.pm
IkiWiki/Plugin/mercurial.pm
IkiWiki/Plugin/monotone.pm
IkiWiki/Plugin/norcs.pm
IkiWiki/Plugin/svn.pm
IkiWiki/Plugin/tla.pm
debian/changelog
doc/plugins/write.mdwn
po/ikiwiki.pot
t/syntax.t

index 4ad19a49931bc9ea0a9018c82c1a3aad792377f3..0746ef24ba36c00b6b7d3b340440f611609f622e 100644 (file)
@@ -414,13 +414,10 @@ sub checkconfig () { #{{{
                unless exists $config{wikistatedir};
        
        if ($config{rcs}) {
-               eval qq{use IkiWiki::Rcs::$config{rcs}};
-               if ($@) {
-                       error("Failed to load RCS module IkiWiki::Rcs::$config{rcs}: $@");
-               }
+               loadplugin($config{rcs});
        }
        else {
-               require IkiWiki::Rcs::Stub;
+               loadplugin("norcs");
        }
 
        if (defined $config{umask}) {
@@ -1428,6 +1425,46 @@ sub run_hooks ($$) { # {{{
        return 1;
 } #}}}
 
+sub rcs_update () { #{{{
+       $hooks{rcs}{rcs_update}{call}->(@_);
+} #}}}
+
+sub rcs_prepedit ($) { #{{{
+       $hooks{rcs}{rcs_prepedit}{call}->(@_);
+} #}}}
+
+sub rcs_commit ($$$;$$) { #{{{
+       $hooks{rcs}{rcs_commit}{call}->(@_);
+} #}}}
+
+sub rcs_commit_staged ($$$) { #{{{
+       $hooks{rcs}{rcs_commit_staged}{call}->(@_);
+} #}}}
+
+sub rcs_add ($) { #{{{
+       $hooks{rcs}{rcs_add}{call}->(@_);
+} #}}}
+
+sub rcs_remove ($) { #{{{
+       $hooks{rcs}{rcs_remove}{call}->(@_);
+} #}}}
+
+sub rcs_rename ($$) { #{{{
+       $hooks{rcs}{rcs_rename}{call}->(@_);
+} #}}}
+
+sub rcs_recentchanges ($) { #{{{
+       $hooks{rcs}{rcs_recentchanges}{call}->(@_);
+} #}}}
+
+sub rcs_diff ($) { #{{{
+       $hooks{rcs}{rcs_diff}{call}->(@_);
+} #}}}
+
+sub rcs_getctime ($) { #{{{
+       $hooks{rcs}{rcs_getctime}{call}->(@_);
+} #}}}
+
 sub globlist_to_pagespec ($) { #{{{
        my @globlist=split(' ', shift);
 
index 5df522f6ee69b4cd6bdec394fbd495957a8424d2..39227cbae4f07f773ce8461fffe0d4b8a3b63442 100644 (file)
@@ -1,6 +1,5 @@
 #!/usr/bin/perl
-
-package IkiWiki;
+package IkiWiki::Plugin::bzr;
 
 use warnings;
 use strict;
@@ -8,19 +7,34 @@ use IkiWiki;
 use Encode;
 use open qw{:utf8 :std};
 
-hook(type => "checkconfig", id => "bzr", call => sub { #{{{
+sub import { #{{{
+       hook(type => "checkconfig", id => "bzr", call => \&checkconfig);
+       hook(type => "getsetup", id => "bzr", call => \&getsetup);
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
+       hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
+       hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged);
+       hook(type => "rcs", id => "rcs_add", call => \&rcs_add);
+       hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove);
+       hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename);
+       hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges);
+       hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
+       hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
+} #}}}
+
+sub checkconfig () { #{{{
        if (! defined $config{diffurl}) {
                $config{diffurl}="";
        }
-       if (length $config{bzr_wrapper}) {
+       if (defined $config{bzr_wrapper} && length $config{bzr_wrapper}) {
                push @{$config{wrappers}}, {
                        wrapper => $config{bzr_wrapper},
                        wrappermode => (defined $config{bzr_wrappermode} ? $config{bzr_wrappermode} : "06755"),
                };
        }
-}); #}}}
+} #}}}
 
-hook(type => "getsetup", id => "bzr", call => sub { #{{{
+sub getsetup () { #{{{
        return
                bzr_wrapper => {
                        type => "string",
@@ -50,7 +64,7 @@ hook(type => "getsetup", id => "bzr", call => sub { #{{{
                        safe => 1,
                        rebuild => 1,
                },
-}); #}}}
+} #}}}
 
 sub bzr_log ($) { #{{{
        my $out = shift;
@@ -101,10 +115,10 @@ sub bzr_author ($$) { #{{{
        my ($user, $ipaddr) = @_;
 
        if (defined $user) {
-               return possibly_foolish_untaint($user);
+               return IkiWiki::possibly_foolish_untaint($user);
        }
        elsif (defined $ipaddr) {
-               return "Anonymous from ".possibly_foolish_untaint($ipaddr);
+               return "Anonymous from ".IkiWiki::possibly_foolish_untaint($ipaddr);
        }
        else {
                return "Anonymous";
@@ -116,7 +130,7 @@ sub rcs_commit ($$$;$$) { #{{{
 
        $user = bzr_author($user, $ipaddr);
 
-       $message = possibly_foolish_untaint($message);
+       $message = IkiWiki::possibly_foolish_untaint($message);
        if (! length $message) {
                $message = "no message given";
        }
@@ -137,7 +151,7 @@ sub rcs_commit_staged ($$$) {
 
        $user = bzr_author($user, $ipaddr);
 
-       $message = possibly_foolish_untaint($message);
+       $message = IkiWiki::possibly_foolish_untaint($message);
        if (! length $message) {
                $message = "no message given";
        }
@@ -172,7 +186,7 @@ sub rcs_remove ($) { # {{{
 sub rcs_rename ($$) { # {{{
        my ($src, $dest) = @_;
 
-       my $parent = dirname($dest);
+       my $parent = IkiWiki::dirname($dest);
        if (system("bzr", "add", "--quiet", "$config{srcdir}/$parent") != 0) {
                warn("bzr add $parent failed\n");
        }
index 6c9aca650ee3ab09751ef307aae2febd11a95280..b20793d8694ed093688695701fa7615d424ca725 100644 (file)
@@ -1,6 +1,5 @@
 #!/usr/bin/perl
-
-package IkiWiki;
+package IkiWiki::Plugin::git;
 
 use warnings;
 use strict;
@@ -11,7 +10,22 @@ use open qw{:utf8 :std};
 my $sha1_pattern     = qr/[0-9a-fA-F]{40}/; # pattern to validate Git sha1sums
 my $dummy_commit_msg = 'dummy commit';      # message to skip in recent changes
 
-hook(type => "checkconfig", id => "git", call => sub { #{{{
+sub import { #{{{
+       hook(type => "checkconfig", id => "git", call => \&checkconfig);
+       hook(type => "getsetup", id => "git", call => \&getsetup);
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
+       hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
+       hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged);
+       hook(type => "rcs", id => "rcs_add", call => \&rcs_add);
+       hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove);
+       hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename);
+       hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges);
+       hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
+       hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
+} #}}}
+
+sub checkconfig () { #{{{
        if (! defined $config{diffurl}) {
                $config{diffurl}="";
        }
@@ -21,15 +35,15 @@ hook(type => "checkconfig", id => "git", call => sub { #{{{
        if (! defined $config{gitmaster_branch}) {
                $config{gitmaster_branch}="master";
        }
-       if (length $config{git_wrapper}) {
+       if (defined $config{git_wrapper} && length $config{git_wrapper}) {
                push @{$config{wrappers}}, {
                        wrapper => $config{git_wrapper},
                        wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
                };
        }
-}); #}}}
+} #}}}
 
-hook(type => "getsetup", id => "git", call => sub { #{{{
+sub getsetup () { #{{{
        return
                git_wrapper => {
                        type => "string",
@@ -73,9 +87,9 @@ hook(type => "getsetup", id => "git", call => sub { #{{{
                        safe => 0, # paranoia
                        rebuild => 0,
                },
-}); #}}}
+} #}}}
 
-sub _safe_git (&@) { #{{{
+sub safe_git (&@) { #{{{
        # Start a child process safely without resorting /bin/sh.
        # Return command output or success state (in scalar context).
 
@@ -107,12 +121,12 @@ sub _safe_git (&@) { #{{{
        return wantarray ? @lines : ($? == 0);
 }
 # Convenient wrappers.
-sub run_or_die ($@) { _safe_git(\&error, @_) }
-sub run_or_cry ($@) { _safe_git(sub { warn @_ },  @_) }
-sub run_or_non ($@) { _safe_git(undef,            @_) }
+sub run_or_die ($@) { safe_git(\&error, @_) }
+sub run_or_cry ($@) { safe_git(sub { warn @_ },  @_) }
+sub run_or_non ($@) { safe_git(undef,            @_) }
 #}}}
 
-sub _merge_past ($$$) { #{{{
+sub merge_past ($$$) { #{{{
        # Unlike with Subversion, Git cannot make a 'svn merge -rN:M file'.
        # Git merge commands work with the committed changes, except in the
        # implicit case of '-m' of git checkout(1).  So we should invent a
@@ -206,7 +220,7 @@ sub _merge_past ($$$) { #{{{
        return $conflict;
 } #}}}
 
-sub _parse_diff_tree ($@) { #{{{
+sub parse_diff_tree ($@) { #{{{
        # Parse the raw diff tree chunk and return the info hash.
        # See git-diff-tree(1) for the syntax.
 
@@ -326,7 +340,7 @@ sub git_commit_info ($;$) { #{{{
        my ($prefix) = run_or_die('git', 'rev-parse', '--show-prefix');
 
        my @ci;
-       while (my $parsed = _parse_diff_tree(($prefix or ""), \@raw_lines)) {
+       while (my $parsed = parse_diff_tree(($prefix or ""), \@raw_lines)) {
                push @ci, $parsed;
        }
 
@@ -379,7 +393,7 @@ sub rcs_commit ($$$;$$) { #{{{
        my ($prev) = $rcstoken =~ /^($sha1_pattern)$/; # untaint
 
        if (defined $cur && defined $prev && $cur ne $prev) {
-               my $conflict = _merge_past($prev, $file, $dummy_commit_msg);
+               my $conflict = merge_past($prev, $file, $dummy_commit_msg);
                return $conflict if defined $conflict;
        }
 
@@ -402,7 +416,7 @@ sub rcs_commit_staged ($$$) {
 
        # git commit returns non-zero if file has not been really changed.
        # so we should ignore its exit status (hence run_or_non).
-       $message = possibly_foolish_untaint($message);
+       $message = IkiWiki::possibly_foolish_untaint($message);
        if (run_or_non('git', 'commit', '--cleanup=verbatim',
                       '-q', '-m', $message)) {
                if (length $config{gitorigin_branch}) {
index 3a98e09d8721c24030e988bdf6473a661e3cc695..738be8c327d017a142af27011c569339806dd520 100644 (file)
@@ -1,6 +1,5 @@
 #!/usr/bin/perl
-
-package IkiWiki;
+package IkiWiki::Plugin::mercurial;
 
 use warnings;
 use strict;
@@ -8,19 +7,34 @@ use IkiWiki;
 use Encode;
 use open qw{:utf8 :std};
 
-hook(type => "checkconfig", id => "mercurial", call => sub { #{{{
+sub import { #{{{
+       hook(type => "checkconfig", id => "mercurial", call => \&checkconfig);
+       hook(type => "getsetup", id => "mercurial", call => \&getsetup);
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
+       hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
+       hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged);
+       hook(type => "rcs", id => "rcs_add", call => \&rcs_add);
+       hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove);
+       hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename);
+       hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges);
+       hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
+       hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
+} #}}}
+
+sub checkconfig () { #{{{
        if (! defined $config{diffurl}) {
                $config{diffurl}="";
        }
-       if (length $config{mercurial_wrapper}) {
+       if (exists $config{mercurial_wrapper} && length $config{mercurial_wrapper}) {
                push @{$config{wrappers}}, {
                        wrapper => $config{mercurial_wrapper},
                        wrappermode => (defined $config{mercurial_wrappermode} ? $config{mercurial_wrappermode} : "06755"),
                };
        }
-}); #}}}
+} #}}}
 
-hook(type => "getsetup", id => "mercurial", call => sub { #{{{
+sub getsetup () { #{{{
        return
                mercurial_wrapper => {
                        type => "string",
@@ -50,7 +64,7 @@ hook(type => "getsetup", id => "mercurial", call => sub { #{{{
                        safe => 1,
                        rebuild => 1,
                },
-}); #}}}
+} #}}}
 
 sub mercurial_log ($) { #{{{
        my $out = shift;
@@ -113,16 +127,16 @@ sub rcs_commit ($$$;$$) { #{{{
        my ($file, $message, $rcstoken, $user, $ipaddr) = @_;
 
        if (defined $user) {
-               $user = possibly_foolish_untaint($user);
+               $user = IkiWiki::possibly_foolish_untaint($user);
        }
        elsif (defined $ipaddr) {
-               $user = "Anonymous from ".possibly_foolish_untaint($ipaddr);
+               $user = "Anonymous from ".IkiWiki::possibly_foolish_untaint($ipaddr);
        }
        else {
                $user = "Anonymous";
        }
 
-       $message = possibly_foolish_untaint($message);
+       $message = IkiWiki::possibly_foolish_untaint($message);
        if (! length $message) {
                $message = "no message given";
        }
index d7e8f296a69f6d80c205ebbcaa4e40f3dc49e8a3..4b9be316a4e602f5aaa075c8c62f2e8ade8e3ed2 100644 (file)
@@ -1,6 +1,5 @@
 #!/usr/bin/perl
-
-package IkiWiki;
+package IkiWiki::Plugin::monotone;
 
 use warnings;
 use strict;
@@ -11,7 +10,22 @@ use Date::Format qw(time2str);
 
 my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate sha1sums
 
-hook(type => "checkconfig", id => "monotone", call => sub { #{{{
+sub import { #{{{
+       hook(type => "checkconfig", id => "monotone", call => \&checkconfig);
+       hook(type => "getsetup", id => "monotone", call => \&getsetup);
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
+       hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
+       hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged);
+       hook(type => "rcs", id => "rcs_add", call => \&rcs_add);
+       hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove);
+       hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename);
+       hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges);
+       hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
+       hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
+} #}}}
+
+sub checkconfig () { #{{{
        if (!defined($config{mtnrootdir})) {
                $config{mtnrootdir} = $config{srcdir};
        }
@@ -47,9 +61,9 @@ hook(type => "checkconfig", id => "monotone", call => sub { #{{{
                        wrappermode => (defined $config{mtn_wrappermode} ? $config{mtn_wrappermode} : "06755"),
                };
        }
-}); #}}}
+} #}}}
 
-hook(type => "getsetup", id => "monotone", call => sub { #{{{
+sub getsetup () { #{{{
        return
                mtn_wrapper => {
                        type => "string",
@@ -99,7 +113,7 @@ hook(type => "getsetup", id => "monotone", call => sub { #{{{
                        safe => 0, # path
                        rebuild => 0,
                },
-}); #}}}
+} #}}}
 
 sub get_rev () { #{{{
        my $sha1 = `mtn --root=$config{mtnrootdir} automate get_base_revision_id`;
@@ -156,7 +170,7 @@ sub mtn_merge ($$$$) { #{{{
        return $mergeRev;
 } #}}}
 
-sub commit_file_to_new_rev($$$$$$$$) { #{{{
+sub commit_file_to_new_rev ($$$$$$$$) { #{{{
        my $automator=shift;
        my $wsfilename=shift;
        my $oldFileID=shift;
@@ -398,7 +412,7 @@ sub rcs_commit ($$$;$$) { #{{{
 
        if (system("mtn", "--root=$config{mtnrootdir}", "commit", "--quiet",
                   "--author", $author, "--key", $config{mtnkey}, "-m",
-                  possibly_foolish_untaint($message), $file) != 0) {
+                  IkiWiki::possibly_foolish_untaint($message), $file) != 0) {
                debug("Traditional commit failed! Returning data as conflict.");
                my $conflict=readfile("$config{srcdir}/$file");
                if (system("mtn", "--root=$config{mtnrootdir}", "revert",
@@ -443,7 +457,7 @@ sub rcs_commit_staged ($$$) {
 
        if (system("mtn", "--root=$config{mtnrootdir}", "commit", "--quiet",
                   "--author", $author, "--key", $config{mtnkey}, "-m",
-                  possibly_foolish_untaint($message)) != 0) {
+                  IkiWiki::possibly_foolish_untaint($message)) != 0) {
                error("Monotone commit failed");
        }
 }
index 04ba5f028dc76e2d0eff76a6137db4d50e5eeea3..72c66569c3651c98fd94ba922cafb75a9f30595b 100644 (file)
@@ -1,99 +1,58 @@
 #!/usr/bin/perl
 # Stubs for no revision control.
-
-package IkiWiki;
+package IkiWiki::Plugin::norcs;
 
 use warnings;
 use strict;
 use IkiWiki;
 
-sub rcs_update () {
-       # Update working directory to current version.
-       # (May be more complex for distributed RCS.)
-}
-
-sub rcs_prepedit ($) {
-       # Prepares to edit a file under revision control. Returns a token
-       # that must be passed into rcs_commit when the file is ready
-       # for committing.
-       # The file is relative to the srcdir.
+sub import { #{{{
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
+       hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
+       hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged);
+       hook(type => "rcs", id => "rcs_add", call => \&rcs_add);
+       hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove);
+       hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename);
+       hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges);
+       hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
+       hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
+} #}}}
+
+sub rcs_update () { #{{{
+} #}}}
+
+sub rcs_prepedit ($) { #{{{
        return ""
-}
+} #}}}
 
-sub rcs_commit ($$$;$$) {
-       # Tries to commit the page; returns undef on _success_ and
-       # a version of the page with the rcs's conflict markers on failure.
-       # The file is relative to the srcdir.
+sub rcs_commit ($$$;$$) { #{{{
        my ($file, $message, $rcstoken, $user, $ipaddr) = @_;
        return undef # success
-}
+} #}}}
 
-sub rcs_commit_staged ($$$) {
-       # Commits all staged changes. Changes can be staged using rcs_add,
-       # rcs_remove, and rcs_rename.
+sub rcs_commit_staged ($$$) { #{{{
        my ($message, $user, $ipaddr)=@_;
        return undef # success
-}
+} #}}}
 
-sub rcs_add ($) {
-       # Add a file. The filename is relative to the root of the srcdir.
-       # Note that this should not check the new file in, it should only
-       # prepare for it to be checked in when rcs_commit is called.
-       # Note that the file may be in a new subdir that is not yet added
-       # to version control; the subdir can be added if so.
-}
+sub rcs_add ($) { #{{{
+} #}}}
 
-sub rcs_remove ($) {
-       # Remove a file. The filename is relative to the root of the srcdir.
-       # Note that this should not check the removal in, it should only
-       # prepare for it to be checked in when rcs_commit is called.
-       # Note that the new file may be in a new subdir that is not yet added
-       # to version control; the subdir can be added if so.
-}
+sub rcs_remove ($) { #{{{
+} #}}}
 
-sub rcs_rename ($$) {
-       # Rename a file. The filenames are relative to the root of the srcdir.
-       # Note that this should not commit the rename, it should only
-       # prepare it for when rcs_commit is called.
-       # The new filename may be in a new subdir, that is not yet added to
-       # version control. If so, the subdir will exist already, and should
-       # be added to revision control.
-}
+sub rcs_rename ($$) { #{{{
+} #}}}
 
-sub rcs_recentchanges ($) {
-       # Examine the RCS history and generate a list of recent changes.
-       # The data structure returned for each change is:
-       # {
-       #       rev => # the RCSs id for this commit
-       #       user => # name of user who made the change,
-       #       committype => # either "web" or the name of the rcs,
-       #       when => # time when the change was made,
-       #       message => [
-       #               { line => "commit message line" },
-       #               { line => "commit message line" },
-       #               # etc,
-       #       ],
-       #       pages => [
-       #               {
-       #                       page => # name of page changed,
-       #                       diffurl => # optional url to a diff showing 
-       #                                  # the changes,
-       #               },
-       #               # repeat for each page changed in this commit,
-       #       ],
-       # }
-}
+sub rcs_recentchanges ($) { #{{{
+} #}}}
 
-sub rcs_diff ($) {
-       # Optional, used to get diffs for recentchanges.
-       # The parameter is the rev from rcs_recentchanges.
-       # Should return a list of lines of the diff (including \n) in list
-       # context, and the whole diff in scalar context.
-}
+sub rcs_diff ($) { #{{{
+} #}}}
 
-sub rcs_getctime ($) {
-       # Optional, used to get the page creation time from the RCS.
+sub rcs_getctime ($) { #{{{
        error gettext("getctime not implemented");
-}
+} #}}}
 
 1
index 0e7df36595b10de27319efdd7a2ffd0c6e93ca62..05312a1ed42d2ae08189c5c665e53b7c91c7b80a 100644 (file)
@@ -1,13 +1,27 @@
 #!/usr/bin/perl
-
-package IkiWiki;
+package IkiWiki::Plugin::svn;
 
 use warnings;
 use strict;
 use IkiWiki;
 use POSIX qw(setlocale LC_CTYPE);
 
-hook(type => "checkconfig", id => "svn", call => sub { #{{{
+sub import { #{{{
+       hook(type => "checkconfig", id => "svn", call => \&checkconfig);
+       hook(type => "getsetup", id => "svn", call => \&getsetup);
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
+       hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
+       hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged);
+       hook(type => "rcs", id => "rcs_add", call => \&rcs_add);
+       hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove);
+       hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename);
+       hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges);
+       hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
+       hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
+} #}}}
+
+sub checkconfig () { #{{{
        if (! defined $config{diffurl}) {
                $config{diffurl}="";
        }
@@ -20,15 +34,15 @@ hook(type => "checkconfig", id => "svn", call => sub { #{{{
                $config{svnpath}=~s/\/$//;
                $config{svnpath}=~s/^\///;
        }
-       if (length $config{svn_wrapper}) {
+       if (defined $config{svn_wrapper} && length $config{svn_wrapper}) {
                push @{$config{wrappers}}, {
                        wrapper => $config{svn_wrapper},
                        wrappermode => (defined $config{svn_wrappermode} ? $config{svn_wrappermode} : "04755"),
                };
        }
-}); #}}}
+} #}}}
 
-hook(type => "getsetup", id => "svn", call => sub { #{{{
+sub getsetup () { #{{{
        return
                svnrepo => {
                        type => "string",
@@ -72,7 +86,7 @@ hook(type => "getsetup", id => "svn", call => sub { #{{{
                        safe => 1,
                        rebuild => 1,
                },
-}); #}}}
+} #}}}
 
 # svn needs LC_CTYPE set to a UTF-8 locale, so try to find one. Any will do.
 sub find_lc_ctype() {
@@ -160,7 +174,7 @@ sub rcs_commit ($$$;$$) { #{{{
 
                if (system("svn", "commit", "--quiet", 
                           "--encoding", "UTF-8", "-m",
-                          possibly_foolish_untaint($message),
+                          IkiWiki::possibly_foolish_untaint($message),
                           $config{srcdir}) != 0) {
                        my $conflict=readfile("$config{srcdir}/$file");
                        if (system("svn", "revert", "--quiet", "$config{srcdir}/$file") != 0) {
@@ -186,7 +200,7 @@ sub rcs_commit_staged ($$$) {
        
        if (system("svn", "commit", "--quiet",
                   "--encoding", "UTF-8", "-m",
-                  possibly_foolish_untaint($message),
+                  IkiWiki::possibly_foolish_untaint($message),
                   $config{srcdir}) != 0) {
                warn("svn commit failed\n");
                return 1; # failure     
@@ -199,10 +213,10 @@ sub rcs_add ($) { #{{{
        my $file=shift;
 
        if (-d "$config{srcdir}/.svn") {
-               my $parent=dirname($file);
+               my $parent=IkiWiki::dirname($file);
                while (! -d "$config{srcdir}/$parent/.svn") {
                        $file=$parent;
-                       $parent=dirname($file);
+                       $parent=IkiWiki::dirname($file);
                }
                
                if (system("svn", "add", "--quiet", "$config{srcdir}/$file") != 0) {
@@ -329,7 +343,7 @@ sub rcs_recentchanges ($) { #{{{
 } #}}}
 
 sub rcs_diff ($) { #{{{
-       my $rev=possibly_foolish_untaint(int(shift));
+       my $rev=IkiWiki::possibly_foolish_untaint(int(shift));
        return `svnlook diff $config{svnrepo} -r$rev --no-diff-deleted`;
 } #}}}
 
index e1389a34677e5b4fa1f3ade6acc10891bd2d0d0b..b95c1a522c87460f66d5a18af5a34889edcb6011 100644 (file)
@@ -1,24 +1,38 @@
 #!/usr/bin/perl
-
-package IkiWiki;
+package IkiWiki::Plugin::tla;
 
 use warnings;
 use strict;
 use IkiWiki;
 
-hook(type => "checkconfig", id => "tla", call => sub { #{{{
+sub import { #{{{
+       hook(type => "checkconfig", id => "tla", call => \&checkconfig);
+       hook(type => "getsetup", id => "tla", call => \&getsetup);
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
+       hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
+       hook(type => "rcs", id => "rcs_commit_staged", call => \&rcs_commit_staged);
+       hook(type => "rcs", id => "rcs_add", call => \&rcs_add);
+       hook(type => "rcs", id => "rcs_remove", call => \&rcs_remove);
+       hook(type => "rcs", id => "rcs_rename", call => \&rcs_rename);
+       hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges);
+       hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff);
+       hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
+} #}}}
+
+sub checkconfig () { #{{{
        if (! defined $config{diffurl}) {
                $config{diffurl}="";
        }
-       if (length $config{tla_wrapper}) {
+       if (defined $config{tla_wrapper} && length $config{tla_wrapper}) {
                push @{$config{wrappers}}, {
                        wrapper => $config{tla_wrapper},
                        wrappermode => (defined $config{tla_wrappermode} ? $config{tla_wrappermode} : "06755"),
                };
        }
-}); #}}}
+} #}}}
 
-hook(type => "getsetup", id => "tla", call => sub { #{{{
+sub getsetup () { #{{{
        return
                tla_wrapper => {
                        type => "string",
@@ -48,9 +62,9 @@ hook(type => "getsetup", id => "tla", call => sub { #{{{
                        safe => 1,
                        rebuild => 1,
                },
-}); #}}}
+} #}}}
 
-sub quiet_system (@) {
+sub quiet_system (@) { #{{{
        # See Debian bug #385939.
        open (SAVEOUT, ">&STDOUT");
        close STDOUT;
@@ -60,7 +74,7 @@ sub quiet_system (@) {
        open (STDOUT, ">&SAVEOUT");
        close SAVEOUT;
        return $ret;
-}
+} #}}}
 
 sub rcs_update () { #{{{
        if (-d "$config{srcdir}/{arch}") {
@@ -110,7 +124,7 @@ sub rcs_commit ($$$;$$) { #{{{
                }
 
                if (quiet_system("tla", "commit",
-                          "-L".possibly_foolish_untaint($message),
+                          "-L".IkiWiki::possibly_foolish_untaint($message),
                           '-d', $config{srcdir}) != 0) {
                        my $conflict=readfile("$config{srcdir}/$file");
                        if (system("tla", "undo", "-n", "--quiet", "-d", "$config{srcdir}") != 0) {
index 205620508af01f04efbb445ef485c7473a7a3af5..78a18b615ae8cfa988a6c82f05562ca49f000122 100644 (file)
@@ -3,9 +3,11 @@ ikiwiki (2.60) UNRELEASED; urgency=low
   * Add getsetup hook, all plugins that add fields to %config should use it.
   * ikiwiki --dumpsetup can generate a nice setup file snapshotting ikiwiki's
     current configuration.
+  * Large amounts of internal config data reorg.
   * The way wrappers are defined in the setup file has changed. Old setup
     files will continue to work, for now.
+  * Version control backends promoted to first-class plugins.
+
  -- Joey Hess <joeyh@debian.org>  Mon, 21 Jul 2008 11:35:46 -0400
 
 ikiwiki (2.55) UNRELEASED; urgency=low
index 686f7e518850febee6b47acde5951027f63c1281..896b988270914e47faa9b714ac036f6a3da9fd7b 100644 (file)
@@ -654,15 +654,107 @@ PageSpecs glob patterns, but instead only by a special `internal()`
 
 ### RCS plugins
 
-ikiwiki's support for [[revision_control_systems|rcs]] also uses pluggable
-perl modules. These are in the `IkiWiki::RCS` namespace, for example
-`IkiWiki::RCS::svn`. 
+ikiwiki's support for [[revision_control_systems|rcs]] is also done via
+plugins. See [[RCS_details|rcs/details]] for some more info.
 
-Each RCS plugin must support all the `IkiWiki::rcs_*` functions.
-See IkiWiki::RCS::Stub for the full list of functions. It's ok if
-`rcs_getctime` does nothing except for throwing an error.
+RCS plugins must register a number of hooks. Each hook has type 'rcs', 
+and the 'id' field is set to the name of the hook. For example:
+       
+       hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
+       hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
 
-See [[RCS_details|rcs/details]] for some more info.
+#### `rcs_update()`
+
+Updates the working directory with any remote changes.
+
+#### `rcs_prepedit($)`
+
+Is passed a file to prepare to edit. It can generate and return an arbitrary
+token, that will be passed into `rcs_commit` when committing. For example,
+it might return the current revision ID of the file, and use that
+information later when merging changes.
+
+#### `rcs_commit($$$;$$)`
+
+Passed a file, message, token (from `rcs_prepedit`), user, and ip address.
+Should try to commit the file. Returns `undef` on *success* and a version
+of the page with the rcs's conflict markers on failure.
+
+#### `rcs_commit_staged($$$)`
+
+Passed a message, user, and ip address. Should commit all staged changes.
+Returns undef on success, and an error message on failure.
+
+Changes can be staged by calls to `rcs_add, `rcs_remove`, and
+`rcs_rename`.
+
+#### `rcs_add($)`
+
+Adds the passed file to the archive. The filename is relative to the root
+of the srcdir.
+
+Note that this should not check the new file in, it should only
+prepare for it to be checked in when rcs_commit (or `rcs_commit_staged`) is
+called. Note that the file may be in a new subdir that is not yet in
+to version control; the subdir can be added if so.
+
+#### `rcs_remove($)`
+
+Remove a file. The filename is relative to the root of the srcdir.
+
+Note that this should not check the removal in, it should only prepare for it
+to be checked in when `rcs_commit` (or `rcs_commit_staged`) is called. Note
+that the new file may be in a new subdir that is not yet inversion
+control; the subdir can be added if so.
+
+#### `rcs_rename($$)`
+
+Rename a file. The filenames are relative to the root of the srcdir.
+
+Note that this should not commit the rename, it should only
+prepare it for when `rcs_commit` (or `rcs_commit_staged`) is called.
+The new filename may be in a new subdir, that is not yet added to
+version control. If so, the subdir will exist already, and should
+be added to revision control.
+
+#### `rcs_recentchanges($)`
+
+Examine the RCS history and generate a list of recent changes.
+The parameter is how many changes to return.
+
+The data structure returned for each change is:
+
+       {
+               rev => # the RCSs id for this commit
+               user => # name of user who made the change,
+               committype => # either "web" or the name of the rcs,
+               when => # time when the change was made,
+               message => [
+                       { line => "commit message line 1" },
+                       { line => "commit message line 2" },
+                       # etc,
+               ],
+               pages => [
+                       {
+                               page => # name of page changed,
+                               diffurl => # optional url to a diff of changes
+                       },
+                       # repeat for each page changed in this commit,
+               ],
+       }
+
+#### `rcs_diff($)`
+
+The parameter is the rev from `rcs_recentchanges`.
+Should return a list of lines of the diff (including \n) in list
+context, and the whole diff in scalar context.
+
+#### `rcs_getctime($)`
+
+This is used to get the page creation time for a file from the RCS, by looking
+it up in the history.
+
+It's ok if this is not implemented, and throws an error.
 
 ### PageSpec plugins
 
index b6e2dc68c0076e62e7fb430026ea75be1d7d6dd9..50c2fb87d2f79d43afb79a43a1940ae8aae4662a 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-07-25 16:16-0400\n"
+"POT-Creation-Date: 2008-07-26 22:24-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -50,7 +50,7 @@ msgid "%s is not an editable page"
 msgstr ""
 
 #: ../IkiWiki/CGI.pm:437 ../IkiWiki/Plugin/brokenlinks.pm:24
-#: ../IkiWiki/Plugin/inline.pm:261 ../IkiWiki/Plugin/opendiscussion.pm:17
+#: ../IkiWiki/Plugin/inline.pm:306 ../IkiWiki/Plugin/opendiscussion.pm:17
 #: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:78
 #: ../IkiWiki/Render.pm:148
 msgid "discussion"
@@ -71,122 +71,122 @@ msgstr ""
 msgid "You are banned."
 msgstr ""
 
-#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759 ../IkiWiki.pm:788
+#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759 ../IkiWiki.pm:1086
 msgid "Error"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:57
+#: ../IkiWiki/Plugin/aggregate.pm:76
 msgid "Aggregation triggered via web."
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:66
+#: ../IkiWiki/Plugin/aggregate.pm:85
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:193
+#: ../IkiWiki/Plugin/aggregate.pm:212
 #, perl-format
 msgid "missing %s parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:227
+#: ../IkiWiki/Plugin/aggregate.pm:246
 msgid "new feed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:260
 msgid "posts"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:243
+#: ../IkiWiki/Plugin/aggregate.pm:262
 msgid "new"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:406
+#: ../IkiWiki/Plugin/aggregate.pm:425
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:413
+#: ../IkiWiki/Plugin/aggregate.pm:432
 #, perl-format
 msgid "expiring %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:440
+#: ../IkiWiki/Plugin/aggregate.pm:459
 #, perl-format
 msgid "processed ok at %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:444
+#: ../IkiWiki/Plugin/aggregate.pm:463
 #, perl-format
 msgid "checking feed %s ..."
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:449
+#: ../IkiWiki/Plugin/aggregate.pm:468
 #, perl-format
 msgid "could not find feed at %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:464
+#: ../IkiWiki/Plugin/aggregate.pm:483
 msgid "feed not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:494
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:481
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:487
+#: ../IkiWiki/Plugin/aggregate.pm:506
 msgid "feed crashed XML::Feed!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:580
 #, perl-format
 msgid "creating new page %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:30
+#: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:37 ../IkiWiki/Setup.pm:117
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:188
 msgid "done"
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:46
+#: ../IkiWiki/Plugin/amazon_s3.pm:93
 #, perl-format
 msgid "Must specify %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:85
+#: ../IkiWiki/Plugin/amazon_s3.pm:132
 msgid "Failed to create bucket in S3: "
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:170
+#: ../IkiWiki/Plugin/amazon_s3.pm:217
 msgid "Failed to save file to S3: "
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:192
+#: ../IkiWiki/Plugin/amazon_s3.pm:239
 msgid "Failed to delete file from S3: "
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:22
+#: ../IkiWiki/Plugin/attachment.pm:34
 #, perl-format
 msgid "there is already a page named %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:41
+#: ../IkiWiki/Plugin/attachment.pm:53
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:144
+#: ../IkiWiki/Plugin/attachment.pm:156
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:186
+#: ../IkiWiki/Plugin/attachment.pm:198
 msgid "attachment upload"
 msgstr ""
 
@@ -262,33 +262,33 @@ msgstr ""
 msgid "failed to determine size of image %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:47
+#: ../IkiWiki/Plugin/inline.pm:89
 msgid "Must specify url to wiki with --url when using --rss or --atom"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:101
+#: ../IkiWiki/Plugin/inline.pm:146
 msgid "missing pages parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:149
+#: ../IkiWiki/Plugin/inline.pm:194
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:220
+#: ../IkiWiki/Plugin/inline.pm:265
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:236
+#: ../IkiWiki/Plugin/inline.pm:281
 #, perl-format
 msgid "nonexistant template %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:269 ../IkiWiki/Render.pm:82
+#: ../IkiWiki/Plugin/inline.pm:314 ../IkiWiki/Render.pm:82
 msgid "Discussion"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:506
+#: ../IkiWiki/Plugin/inline.pm:551
 msgid "RPC::XML::Client not found, not pinging"
 msgstr ""
 
@@ -301,11 +301,11 @@ msgstr ""
 msgid "%s is locked by %s and cannot be edited"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mdwn.pm:28
+#: ../IkiWiki/Plugin/mdwn.pm:40
 msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mdwn.pm:51
+#: ../IkiWiki/Plugin/mdwn.pm:63
 #, perl-format
 msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr ""
@@ -322,11 +322,11 @@ msgstr ""
 msgid "redir cycle is not allowed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:23
+#: ../IkiWiki/Plugin/mirrorlist.pm:35
 msgid "Mirrors"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:23
+#: ../IkiWiki/Plugin/mirrorlist.pm:35
 msgid "Mirror"
 msgstr ""
 
@@ -334,11 +334,15 @@ msgstr ""
 msgid "more"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:45
+#: ../IkiWiki/Plugin/norcs.pm:55
+msgid "getctime not implemented"
+msgstr ""
+
+#: ../IkiWiki/Plugin/openid.pm:57
 msgid "Log in with"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:48
+#: ../IkiWiki/Plugin/openid.pm:60
 msgid "Get an OpenID"
 msgstr ""
 
@@ -350,31 +354,31 @@ msgstr ""
 msgid "bad or missing template"
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:223
+#: ../IkiWiki/Plugin/passwordauth.pm:243
 msgid "Account creation successful. Now you can Login."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:226
+#: ../IkiWiki/Plugin/passwordauth.pm:246
 msgid "Error creating account."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:233
+#: ../IkiWiki/Plugin/passwordauth.pm:253
 msgid "No email address, so cannot email password reset instructions."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:265
+#: ../IkiWiki/Plugin/passwordauth.pm:287
 msgid "Failed to send mail"
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:267
+#: ../IkiWiki/Plugin/passwordauth.pm:289
 msgid "You have been mailed password reset instructions."
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:302
+#: ../IkiWiki/Plugin/passwordauth.pm:324
 msgid "incorrect password reset url"
 msgstr ""
 
-#: ../IkiWiki/Plugin/passwordauth.pm:305
+#: ../IkiWiki/Plugin/passwordauth.pm:327
 msgid "password reset denied"
 msgstr ""
 
@@ -382,21 +386,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:37
+#: ../IkiWiki/Plugin/pinger.pm:49
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:42
+#: ../IkiWiki/Plugin/pinger.pm:54
 #, perl-format
 msgid "Will ping %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:45
+#: ../IkiWiki/Plugin/pinger.pm:57
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:73
 msgid "LWP not found, not pinging"
 msgstr ""
 
@@ -476,23 +480,23 @@ msgstr ""
 msgid "%A night"
 msgstr ""
 
-#: ../IkiWiki/Plugin/prettydate.pm:78
+#: ../IkiWiki/Plugin/prettydate.pm:96
 msgid "at teatime on %A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/prettydate.pm:82
+#: ../IkiWiki/Plugin/prettydate.pm:100
 msgid "at midnight"
 msgstr ""
 
-#: ../IkiWiki/Plugin/prettydate.pm:85
+#: ../IkiWiki/Plugin/prettydate.pm:103
 msgid "at noon on %A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchanges.pm:76
+#: ../IkiWiki/Plugin/recentchanges.pm:95
 msgid "missing page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchanges.pm:78
+#: ../IkiWiki/Plugin/recentchanges.pm:97
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -576,17 +580,17 @@ msgstr ""
 msgid "update for rename of %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:20
+#: ../IkiWiki/Plugin/search.pm:32
 #, perl-format
 msgid "Must specify %s when using the search plugin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:166
+#: ../IkiWiki/Plugin/search.pm:178
 #, perl-format
 msgid "need Digest::SHA1 to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:201
+#: ../IkiWiki/Plugin/search.pm:213
 msgid "search"
 msgstr ""
 
@@ -688,10 +692,6 @@ msgstr ""
 msgid "failed to generate image from code"
 msgstr ""
 
-#: ../IkiWiki/Rcs/Stub.pm:96
-msgid "getctime not implemented"
-msgstr ""
-
 #: ../IkiWiki/Render.pm:276 ../IkiWiki/Render.pm:297
 #, perl-format
 msgid "skipping bad filename %s"
@@ -739,23 +739,11 @@ msgstr ""
 
 #. translators: The first parameter is a filename, and the second
 #. translators: is a (probably not translated) error message.
-#: ../IkiWiki/Setup.pm:25
+#: ../IkiWiki/Setup.pm:23
 #, perl-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: ../IkiWiki/Setup.pm:58
-msgid "generating wrappers.."
-msgstr ""
-
-#: ../IkiWiki/Setup.pm:107
-msgid "rebuilding wiki.."
-msgstr ""
-
-#: ../IkiWiki/Setup.pm:110
-msgid "refreshing wiki.."
-msgstr ""
-
 #: ../IkiWiki/Wrapper.pm:16
 #, perl-format
 msgid "%s doesn't seem to be executable"
@@ -792,23 +780,31 @@ msgstr ""
 msgid "usage: ikiwiki [options] source dest"
 msgstr ""
 
-#: ../ikiwiki.in:82
+#: ../ikiwiki.in:79
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../IkiWiki.pm:126
+#: ../ikiwiki.in:118
+msgid "generating wrappers.."
+msgstr ""
+
+#: ../ikiwiki.in:177
+msgid "rebuilding wiki.."
+msgstr ""
+
+#: ../ikiwiki.in:180
+msgid "refreshing wiki.."
+msgstr ""
+
+#: ../IkiWiki.pm:410
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 
-#. translators: The first parameter is a
-#. translators: preprocessor directive name,
-#. translators: the second a page name, the
-#. translators: third a number.
-#: ../IkiWiki.pm:771
+#: ../IkiWiki.pm:1069
 #, perl-format
-msgid "%s preprocessing loop detected on %s at depth %i"
+msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1219
+#: ../IkiWiki.pm:1557
 msgid "yes"
 msgstr ""
index 01346a33842d256ea6fd6f1d7b390f686ebbd8c7..694bb01df2f52d6a01477d14049611f291ab97b1 100755 (executable)
@@ -6,7 +6,7 @@ use Test::More;
 my @progs="ikiwiki.in";
 my @libs="IkiWiki.pm";
 # monotone, external, amazon_s3 skipped since they need perl modules
-push @libs, map { chomp; $_ } `find IkiWiki -type f -name \\*.pm | grep -v IkiWiki/Rcs/monotone.pm | grep -v IkiWiki/Plugin/external.pm | grep -v IkiWiki/Plugin/amazon_s3.pm`;
+push @libs, map { chomp; $_ } `find IkiWiki -type f -name \\*.pm | grep -v monotone.pm | grep -v external.pm | grep -v amazon_s3.pm`;
 
 plan(tests => (@progs + @libs));