rcs_commit and rcs_commit_staged api changes
authorJoey Hess <joey@kitenet.net>
Wed, 23 Jun 2010 21:35:21 +0000 (17:35 -0400)
committerJoey Hess <joey@kitenet.net>
Wed, 23 Jun 2010 23:04:36 +0000 (19:04 -0400)
Using named parameters for these is overdue. Passing the session in a
parameter instead of passing username and IP separately will later allow
storing other session info, like username or part of the email.

Note that these functions are not part of the exported API,
and the prototype change will catch (most) skew, so I am not changing
API versions. Any third-party plugins that call them will need updated
though.

28 files changed:
IkiWiki.pm
IkiWiki/Plugin/attachment.pm
IkiWiki/Plugin/autoindex.pm
IkiWiki/Plugin/bzr.pm
IkiWiki/Plugin/comments.pm
IkiWiki/Plugin/cvs.pm
IkiWiki/Plugin/darcs.pm
IkiWiki/Plugin/editpage.pm
IkiWiki/Plugin/git.pm
IkiWiki/Plugin/mercurial.pm
IkiWiki/Plugin/monotone.pm
IkiWiki/Plugin/norcs.pm
IkiWiki/Plugin/poll.pm
IkiWiki/Plugin/remove.pm
IkiWiki/Plugin/rename.pm
IkiWiki/Plugin/svn.pm
IkiWiki/Plugin/tag.pm
IkiWiki/Plugin/tla.pm
debian/changelog
doc/plugins/write.mdwn
ikiwiki-calendar.in
ikiwiki.spec
po/ikiwiki.pot
t/bazaar.t
t/cvs.t
t/git.t
t/mercurial.t
t/svn.t

index 203da3ba2d647740e5a3a80193873b39ebd41773..35b38df46bbc4d71116c151688c34d982d24b34f 100644 (file)
@@ -1840,11 +1840,11 @@ sub rcs_prepedit ($) {
        $hooks{rcs}{rcs_prepedit}{call}->(@_);
 }
 
-sub rcs_commit ($$$;$$) {
+sub rcs_commit (@) {
        $hooks{rcs}{rcs_commit}{call}->(@_);
 }
 
-sub rcs_commit_staged ($$$) {
+sub rcs_commit_staged (@) {
        $hooks{rcs}{rcs_commit_staged}{call}->(@_);
 }
 
index 216e00b3d2117bafc75aaefb66bde815c36cc949..ee105a1709f3fe71e0e44a47782e9596791dbbf9 100644 (file)
@@ -183,10 +183,12 @@ sub formbuilder (@) {
                if ($config{rcs}) {
                        IkiWiki::rcs_add($filename);
                        IkiWiki::disable_commit_hook();
-                       IkiWiki::rcs_commit($filename, gettext("attachment upload"),
-                               IkiWiki::rcs_prepedit($filename),
-                               $session->param("name"),
-                               $session->remote_addr());
+                       IkiWiki::rcs_commit(
+                               file => $filename,
+                               message => gettext("attachment upload"),
+                               token => IkiWiki::rcs_prepedit($filename),
+                               session => $session,
+                       );
                        IkiWiki::enable_commit_hook();
                        IkiWiki::rcs_update();
                }
index c3eb53300e426e0bfb72bc7df2d5e019024b9e39..11595e217cdccf6d7bb571a3bb9f6c79ef4ddd7f 100644 (file)
@@ -117,8 +117,8 @@ sub refresh () {
                }
                if ($config{rcs}) {
                        IkiWiki::rcs_commit_staged(
-                               gettext("automatic index generation"),
-                               undef, undef);
+                               message => gettext("automatic index generation"),
+                       );
                        IkiWiki::enable_commit_hook();
                }
        }
index 44ab9a86a207bf11637f3249d5247a98ceecf32f..562d5d3893fcf5c2c0c6ba0b82e574c362f36891 100644 (file)
@@ -123,8 +123,13 @@ sub rcs_prepedit ($) {
        return "";
 }
 
-sub bzr_author ($$) {
-       my ($user, $ipaddr) = @_;
+sub bzr_author ($) {
+       my $session=shift;
+
+       return unless defined $session;
+
+       my $user=$session->param("name");
+       my $ipaddr=$session->remote_addr();
 
        if (defined $user) {
                return IkiWiki::possibly_foolish_untaint($user);
@@ -137,18 +142,19 @@ sub bzr_author ($$) {
        }
 }
 
-sub rcs_commit ($$$;$$$) {
-       my ($file, $message, $rcstoken, $user, $ipaddr, $emailuser) = @_;
+sub rcs_commit (@) {
+       my %params=@_;
 
-       $user = bzr_author($user, $ipaddr);
+       my $user=bzr_author($params{session});
 
-       $message = IkiWiki::possibly_foolish_untaint($message);
-       if (! length $message) {
-               $message = "no message given";
+       $params{message} = IkiWiki::possibly_foolish_untaint($params{message});
+       if (! length $params{message}) {
+               $params{message} = "no message given";
        }
 
-       my @cmdline = ("bzr", "commit", "--quiet", "-m", $message, "--author", $user,
-                      $config{srcdir}."/".$file);
+       my @cmdline = ("bzr", "commit", "--quiet", "-m", $params{message},
+                      (defined $user ? ("--author", $user) : ()),
+                      $config{srcdir}."/".$params{file});
        if (system(@cmdline) != 0) {
                warn "'@cmdline' failed: $!";
        }
@@ -156,19 +162,18 @@ sub rcs_commit ($$$;$$$) {
        return undef; # success
 }
 
-sub rcs_commit_staged ($$$;$) {
-       # Commits all staged changes. Changes can be staged using rcs_add,
-       # rcs_remove, and rcs_rename.
-       my ($message, $user, $ipaddr, $emailuser)=@_;
+sub rcs_commit_staged (@) {
+       my %params=@_;
 
-       $user = bzr_author($user, $ipaddr);
+       my $user=bzr_author($params{session});
 
-       $message = IkiWiki::possibly_foolish_untaint($message);
-       if (! length $message) {
-               $message = "no message given";
+       $params{message} = IkiWiki::possibly_foolish_untaint($params{message});
+       if (! length $params{message}) {
+               $params{message} = "no message given";
        }
 
-       my @cmdline = ("bzr", "commit", "--quiet", "-m", $message, "--author", $user,
+       my @cmdline = ("bzr", "commit", "--quiet", "-m", $params{message},
+                      (defined $user ? ("--author", $user) : ()),
                       $config{srcdir});
        if (system(@cmdline) != 0) {
                warn "'@cmdline' failed: $!";
index 4770209c9d556d1bc819c8d32e5c77776f1bbe42..41c6948e846557703717cb7ad83f1e41ca477c82 100644 (file)
@@ -513,9 +513,10 @@ sub editcomment ($$) {
 
                        IkiWiki::rcs_add($file);
                        IkiWiki::disable_commit_hook();
-                       $conflict = IkiWiki::rcs_commit_staged($message,
-                               $session->param('name'),
-                               $session->remote_addr());
+                       $conflict = IkiWiki::rcs_commit_staged(
+                               message => $message,
+                               session => $session,
+                       );
                        IkiWiki::enable_commit_hook();
                        IkiWiki::rcs_update();
                }
@@ -603,9 +604,10 @@ sub commentmoderation ($$) {
                        if ($config{rcs} and $config{comments_commit}) {
                                my $message = gettext("Comment moderation");
                                IkiWiki::disable_commit_hook();
-                               $conflict=IkiWiki::rcs_commit_staged($message,
-                                       $session->param('name'),
-                                       $session->remote_addr());
+                               $conflict=IkiWiki::rcs_commit_staged(
+                                       message => $message,
+                                       session => $session,
+                               );
                                IkiWiki::enable_commit_hook();
                                IkiWiki::rcs_update();
                        }
index a9fe162a1b7957e4f10e16163bea303b36936b7c..c6687d7800707560e9c2ca49c513dc2b3b63ca91 100644 (file)
@@ -183,41 +183,47 @@ sub rcs_prepedit ($) {
        return defined $rev ? $rev : "";
 }
 
-sub rcs_commit ($$$;$$$) {
+sub commitmessage (@) {
+       my %params=@_;
+       
+       if (defined $params{session}) {
+               if (defined $params{session}->param("name")) {
+                       return "web commit by ".
+                               $params{session}->param("name").
+                               (length $params{message} ? ": $params{message}" : "");
+               }
+               elsif (defined $params{session}->remote_addr()) {
+                       return "web commit from ".
+                               $params{session}->remote_addr().
+                               (length $params{message} ? ": $params{message}" : "");
+               }
+       }
+       return $params{message};
+}
+
+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.
-       my $file=shift;
-       my $message=shift;
-       my $rcstoken=shift;
-       my $user=shift;
-       my $ipaddr=shift;
-       my $emailuser=shift;
+       my %params=@_;
 
        return unless cvs_is_controlling;
 
-       if (defined $user) {
-               $message="web commit by $user".(length $message ? ": $message" : "");
-       }
-       elsif (defined $ipaddr) {
-               $message="web commit from $ipaddr".(length $message ? ": $message" : "");
-       }
-
        # Check to see if the page has been changed by someone
        # else since rcs_prepedit was called.
-       my ($oldrev)=$rcstoken=~/^([0-9]+)$/; # untaint
-       my $rev=cvs_info("Repository revision", "$config{srcdir}/$file");
+       my ($oldrev)=$params{token}=~/^([0-9]+)$/; # untaint
+       my $rev=cvs_info("Repository revision", "$config{srcdir}/$params{file}");
        if (defined $rev && defined $oldrev && $rev != $oldrev) {
                # Merge their changes into the file that we've
                # changed.
-               cvs_runcvs('update', $file) ||
+               cvs_runcvs('update', $params{file}) ||
                        warn("cvs merge from $oldrev to $rev failed\n");
        }
 
        if (! cvs_runcvs('commit', '-m',
-                        IkiWiki::possibly_foolish_untaint $message)) {
-               my $conflict=readfile("$config{srcdir}/$file");
-               cvs_runcvs('update', '-C', $file) ||
+                        IkiWiki::possibly_foolish_untaint(commitmessage(%params)))) {
+               my $conflict=readfile("$config{srcdir}/$params{file}");
+               cvs_runcvs('update', '-C', $params{file}) ||
                        warn("cvs revert failed\n");
                return $conflict;
        }
@@ -225,20 +231,13 @@ sub rcs_commit ($$$;$$$) {
        return undef # success
 }
 
-sub rcs_commit_staged ($$$;$) {
+sub rcs_commit_staged (@) {
        # Commits all staged changes. Changes can be staged using rcs_add,
        # rcs_remove, and rcs_rename.
-       my ($message, $user, $ipaddr, $emailuser)=@_;
-
-       if (defined $user) {
-               $message="web commit by $user".(length $message ? ": $message" : "");
-       }
-       elsif (defined $ipaddr) {
-               $message="web commit from $ipaddr".(length $message ? ": $message" : "");
-       }
+       my %params=@_;
 
        if (! cvs_runcvs('commit', '-m',
-                        IkiWiki::possibly_foolish_untaint $message)) {
+                        IkiWiki::possibly_foolish_untaint(commitmessage(%params)))) {
                warn "cvs staged commit failed\n";
                return 1; # failure
        }
index 345456c01d01d6a6b66bc72640c68ded0940d633..0dfc8708daee02a78d55794ba5150beb7e9b8a96 100644 (file)
@@ -140,14 +140,31 @@ sub rcs_prepedit ($) {
        return $rev;
 }
 
-sub rcs_commit ($$$;$$$) {
+sub commitauthor (@) {
+       my %params=@_;
+       
+       my $author="anon\@web";
+       if (defined $params{session}) {
+               if (defined $params{session}->param("name")) {
+                       return $params{session}->param("name").'@web';
+               }
+               elsif (defined $params{session}->remote_addr()) {
+                       return $params{session}->remote_addr().'@web';
+               }
+       }
+       return 'anon@web';
+}
+
+sub rcs_commit (@) {
        # Commit the page.  Returns 'undef' on success and a version of the page
        # with conflict markers on failure.
+       my %params=@_;
 
-       my ($file, $message, $rcstoken, $user, $ipaddr, $emailuser) = @_;
+       my ($file, $message, $token) =
+               ($params{file}, $params{message}, $params{token});
 
        # Compute if the "revision" of $file changed.
-       my $changed = darcs_rev($file) ne $rcstoken;
+       my $changed = darcs_rev($file) ne $token;
 
        # Yes, the following is a bit convoluted.
        if ($changed) {
@@ -155,7 +172,7 @@ sub rcs_commit ($$$;$$$) {
                rename("$config{srcdir}/$file", "$config{srcdir}/$file.save") or
                        error("failed to rename $file to $file.save: $!");
 
-               # Roll the repository back to $rcstoken.
+               # Roll the repository back to $token.
 
                # TODO.  Can we be sure that no changes are lost?  I think that
                # we can, if we make sure that the 'darcs push' below will always
@@ -166,37 +183,28 @@ sub rcs_commit ($$$;$$$) {
                # TODO: 'yes | ...' needed?  Doesn't seem so.
                silentsystem('darcs', "revert", "--repodir", $config{srcdir}, "--all") == 0 ||
                        error("'darcs revert' failed");
-               # Remove all patches starting at $rcstoken.
+               # Remove all patches starting at $token.
                my $child = open(DARCS_OBLITERATE, "|-");
                if (! $child) {
                        open(STDOUT, ">/dev/null");
                        exec('darcs', "obliterate", "--repodir", $config{srcdir},
-                          "--match", "hash " . $rcstoken) and
+                          "--match", "hash " . $token) and
                           error("'darcs obliterate' failed");
                }
                1 while print DARCS_OBLITERATE "y";
                close(DARCS_OBLITERATE);
-               # Restore the $rcstoken one.
+               # Restore the $token one.
                silentsystem('darcs', "pull", "--quiet", "--repodir", $config{srcdir},
-                       "--match", "hash " . $rcstoken, "--all") == 0 ||
+                       "--match", "hash " . $token, "--all") == 0 ||
                        error("'darcs pull' failed");
        
-               # We're back at $rcstoken.  Re-install the modified file.
+               # We're back at $token.  Re-install the modified file.
                rename("$config{srcdir}/$file.save", "$config{srcdir}/$file") or
                        error("failed to rename $file.save to $file: $!");
        }
 
        # Record the changes.
-       my $author;
-       if (defined $user) {
-               $author = "$user\@web";
-       }
-       elsif (defined $ipaddr) {
-               $author = "$ipaddr\@web";
-       }
-       else {
-               $author = "anon\@web";
-       }
+       my $author=commitauthor(%params);
        if (!defined $message || !length($message)) {
                $message = "empty message";
        }
@@ -211,13 +219,13 @@ sub rcs_commit ($$$;$$$) {
 
        # If this updating yields any conflicts, we'll record them now to resolve
        # them.  If nothing is recorded, there are no conflicts.
-       $rcstoken = darcs_rev($file);
+       $token = darcs_rev($file);
        # TODO: Use only the first line here, i.e. only the patch name?
        writefile("$file.log", $config{srcdir}, 'resolve conflicts: ' . $message);
        silentsystem('darcs', 'record', '--repodir', $config{srcdir}, '--all',
                '-m', 'resolve conflicts: ' . $message, '--author', $author, $file) == 0 ||
                error("'darcs record' failed");
-       my $conflicts = darcs_rev($file) ne $rcstoken;
+       my $conflicts = darcs_rev($file) ne $token;
        unlink("$config{srcdir}/$file.log") or
                error("failed to remove '$file.log'");
 
@@ -239,25 +247,18 @@ sub rcs_commit ($$$;$$$) {
        }
 }
 
-sub rcs_commit_staged ($$$;$) {
-       my ($message, $user, $ipaddr, $emailuser) = @_;
+sub rcs_commit_staged (@) {
+       my %params=@_;
 
-       my $author;
-       if (defined $user) {
-               $author = "$user\@web";
-       }
-       elsif (defined $ipaddr) {
-               $author = "$ipaddr\@web";
-       }
-       else {
-               $author = "anon\@web";
-       }
-       if (!defined $message || !length($message)) {
-               $message = "empty message";
+       my $author=commitauthor(%params);
+       if (!defined $params{message} || !length($params{message})) {
+               $params{message} = "empty message";
        }
 
-       silentsystem('darcs', "record", "--repodir", $config{srcdir}, "-a", "-A", $author,
-               "-m", $message) == 0 || error("'darcs record' failed");
+       silentsystem('darcs', "record", "--repodir", $config{srcdir},
+               "-a", "-A", $author,
+               "-m", $params{message},
+       ) == 0 || error("'darcs record' failed");
 
        # Push the changes to the main repository.
        silentsystem('darcs', 'push', '--quiet', '--repodir', $config{srcdir}, '--all') == 0 ||
index a8e75121fd672d6ee19557305433c95360582f19..1a04a72b5568f2980d8a7e00d0eaaa06a62e0e0d 100644 (file)
@@ -401,10 +401,12 @@ sub cgi_editpage ($$) {
                        # signaling to it that it should not try to
                        # do anything.
                        disable_commit_hook();
-                       $conflict=rcs_commit($file, $message,
-                               $form->field("rcsinfo"),
-                               $session->param("name"),
-                               $session->remote_addr());
+                       $conflict=rcs_commit(
+                               file => $file,
+                               message => $message,
+                               token => $form->field("rcsinfo"),
+                               session => $session,
+                       );
                        enable_commit_hook();
                        rcs_update();
                }
index b56f229d7c146aa3e8c65b42b44389d261eb5c59..b02fc118ddc0e758bee82b22b7c49b713a1e3153 100644 (file)
@@ -464,43 +464,55 @@ sub rcs_prepedit ($) {
        return git_sha1($file);
 }
 
-sub rcs_commit ($$$;$$$) {
+sub rcs_commit (@) {
        # Try to commit the page; returns undef on _success_ and
        # a version of the page with the rcs's conflict markers on
        # failure.
-
-       my ($file, $message, $rcstoken, $user, $ipaddr, $emailuser) = @_;
+       my %params=@_;
 
        # Check to see if the page has been changed by someone else since
        # rcs_prepedit was called.
-       my $cur    = git_sha1($file);
-       my ($prev) = $rcstoken =~ /^($sha1_pattern)$/; # untaint
+       my $cur    = git_sha1($params{file});
+       my ($prev) = $params{token} =~ /^($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, $params{file}, $dummy_commit_msg);
                return $conflict if defined $conflict;
        }
 
-       rcs_add($file); 
-       return rcs_commit_staged($message, $user, $ipaddr);
+       rcs_add($params{file});
+       return rcs_commit_staged(
+               message => $params{message},
+               session => $params{session},
+       );
 }
 
-sub rcs_commit_staged ($$$;$) {
+sub rcs_commit_staged (@) {
        # Commits all staged changes. Changes can be staged using rcs_add,
        # rcs_remove, and rcs_rename.
-       my ($message, $user, $ipaddr, $emailuser)=@_;
-
-       # Set the commit author and email to the web committer.
+       my %params=@_;
+       
        my %env=%ENV;
-       if (defined $user || defined $ipaddr) {
-               my $u=encode_utf8(defined $user ? $user : $ipaddr);
-               $ENV{GIT_AUTHOR_NAME}=$u;
-               $ENV{GIT_AUTHOR_EMAIL}="$u\@web";
+
+       if (defined $params{session}) {
+               # Set the commit author and email based on web session info.
+               my $u;
+               if (defined $params{session}->param("name")) {
+                       $u=$params{session}->param("name");
+               }
+               elsif (defined $params{session}->remote_addr()) {
+                       $u=$params{session}->remote_addr();
+               }
+               if (defined $u) {
+                       $u=encode_utf8($u);
+                       $ENV{GIT_AUTHOR_NAME}=$u;
+                       $ENV{GIT_AUTHOR_EMAIL}="$u\@web";
+               }
        }
 
-       $message = IkiWiki::possibly_foolish_untaint($message);
+       $params{message} = IkiWiki::possibly_foolish_untaint($params{message});
        my @opts;
-       if ($message !~ /\S/) {
+       if ($params{message} !~ /\S/) {
                # Force git to allow empty commit messages.
                # (If this version of git supports it.)
                my ($version)=`git --version` =~ /git version (.*)/;
@@ -508,13 +520,13 @@ sub rcs_commit_staged ($$$;$) {
                        push @opts, '--cleanup=verbatim';
                }
                else {
-                       $message.=".";
+                       $params{message}.=".";
                }
        }
        push @opts, '-q';
        # git commit returns non-zero if file has not been really changed.
        # so we should ignore its exit status (hence run_or_non).
-       if (run_or_non('git', 'commit', @opts, '-m', $message)) {
+       if (run_or_non('git', 'commit', @opts, '-m', $params{message})) {
                if (length $config{gitorigin_branch}) {
                        run_or_cry('git', 'push', $config{gitorigin_branch});
                }
index 1793ab4bb3f01d0abc22c4b70128b51fa3d6aa5c..edf915ae9f38ff3b0c4f426eab7ceead8b413a3f 100644 (file)
@@ -126,26 +126,26 @@ sub rcs_prepedit ($) {
        return "";
 }
 
-sub rcs_commit ($$$;$$$) {
-       my ($file, $message, $rcstoken, $user, $ipaddr, $emailuser) = @_;
+sub rcs_commit (@) {
+       my %params=@_;
 
-       if (defined $user) {
-               $user = IkiWiki::possibly_foolish_untaint($user);
-       }
-       elsif (defined $ipaddr) {
-               $user = "Anonymous from ".IkiWiki::possibly_foolish_untaint($ipaddr);
-       }
-       else {
-               $user = "Anonymous";
+       my $user="Anonymous";
+       if (defined $params{session}) {
+               if (defined $params{session}->param("name")) {
+                       $user = $params{session}->param("name");
+               }
+               elsif (defined $params{session}->remote_addr()) {
+                       $user = "Anonymous from ".$params{session}->remote_addr();
+               }
        }
 
-       $message = IkiWiki::possibly_foolish_untaint($message);
-       if (! length $message) {
-               $message = "no message given";
+       if (! length $params{message}) {
+               $params{message} = "no message given";
        }
 
        my @cmdline = ("hg", "-q", "-R", $config{srcdir}, "commit", 
-                      "-m", $message, "-u", $user);
+                      "-m", IkiWiki::possibly_foolish_untaint($params{message}),
+                      "-u", IkiWiki::possibly_foolish_untaint($user));
        if (system(@cmdline) != 0) {
                warn "'@cmdline' failed: $!";
        }
@@ -153,10 +153,10 @@ sub rcs_commit ($$$;$$$) {
        return undef; # success
 }
 
-sub rcs_commit_staged ($$$;$) {
+sub rcs_commit_staged (@) {
        # Commits all staged changes. Changes can be staged using rcs_add,
        # rcs_remove, and rcs_rename.
-       my ($message, $user, $ipaddr, $emailuser)=@_;
+       my %params=@_;
        
        error("rcs_commit_staged not implemented for mercurial"); # TODO
 }
index 55d8039e0f959d71b7e5ab7bac8a0a0fbede0de8..95fbcee7648c56c0825d714d15ad7bea37e93621 100644 (file)
@@ -293,32 +293,33 @@ sub rcs_prepedit ($) {
        return get_rev();
 }
 
-sub rcs_commit ($$$;$$$) {
+sub commitauthor (@) {
+       my %params=@_;
+
+       if (defined $params{session}) {
+               if (defined $params{session}->param("name")) {
+                       return "Web user: " . $params{session}->param("name");
+               }
+               elsif (defined $params{session}->remote_addr()) {
+                       return "Web IP: " . $params{session}->remote_addr();
+               }
+       }
+       return "Web: Anonymous";
+}
+
+
+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.
-       my $file=shift;
-       my $message=shift;
-       my $rcstoken=shift;
-       my $user=shift;
-       my $ipaddr=shift;
-       my $emailuser=shift;
-       my $author;
+       my %params=@_;
 
-       if (defined $user) {
-               $author="Web user: " . $user;
-       }
-       elsif (defined $ipaddr) {
-               $author="Web IP: " . $ipaddr;
-       }
-       else {
-               $author="Web: Anonymous";
-       }
+       my $author=IkiWiki::possibly_foolish_untaint(commitauthor(%params)),
 
        chdir $config{srcdir}
            or error("Cannot chdir to $config{srcdir}: $!");
 
-       my ($oldrev)= $rcstoken=~ m/^($sha1_pattern)$/; # untaint
+       my ($oldrev) = $params{token} =~ m/^($sha1_pattern)$/; # untaint
        my $rev = get_rev();
        if (defined $rev && defined $oldrev && $rev ne $oldrev) {
                my $automator = Monotone->new();
@@ -327,8 +328,8 @@ sub rcs_commit ($$$;$$$) {
                # Something has been committed, has this file changed?
                my ($out, $err);
                $automator->setOpts("r", $oldrev, "r", $rev);
-               ($out, $err) = $automator->call("content_diff", $file);
-               debug("Problem committing $file") if ($err ne "");
+               ($out, $err) = $automator->call("content_diff", $params{file});
+               debug("Problem committing $params{file}") if ($err ne "");
                my $diff = $out;
                
                if ($diff) {
@@ -337,11 +338,11 @@ sub rcs_commit ($$$;$$$) {
                        #
                        # first get the contents
                        debug("File changed: forming branch");
-                       my $newfile=readfile("$config{srcdir}/$file");
+                       my $newfile=readfile("$config{srcdir}/$params{file}");
                        
                        # then get the old content ID from the diff
-                       if ($diff !~ m/^---\s$file\s+($sha1_pattern)$/m) {
-                               error("Unable to find previous file ID for $file");
+                       if ($diff !~ m/^---\s$params{file}\s+($sha1_pattern)$/m) {
+                               error("Unable to find previous file ID for $params{file}");
                        }
                        my $oldFileID = $1;
 
@@ -352,13 +353,13 @@ sub rcs_commit ($$$;$$$) {
                        my $branch = $1;
 
                        # then put the new content into the DB (and record the new content ID)
-                       my $newRevID = commit_file_to_new_rev($automator, $file, $oldFileID, $newfile, $oldrev, $branch, $author, $message);
+                       my $newRevID = commit_file_to_new_rev($automator, $params{file}, $oldFileID, $newfile, $oldrev, $branch, $author, $params{message});
 
                        $automator->close();
 
                        # if we made it to here then the file has been committed... revert the local copy
-                       if (system("mtn", "--root=$config{mtnrootdir}", "revert", $file) != 0) {
-                               debug("Unable to revert $file after merge on conflicted commit!");
+                       if (system("mtn", "--root=$config{mtnrootdir}", "revert", $params{file}) != 0) {
+                               debug("Unable to revert $params{file} after merge on conflicted commit!");
                        }
                        debug("Divergence created! Attempting auto-merge.");
 
@@ -407,7 +408,7 @@ sub rcs_commit ($$$;$$$) {
                                # for cleanup note, this relies on the fact
                                # that ikiwiki seems to call rcs_prepedit()
                                # again after we return
-                               return readfile("$config{srcdir}/$file");
+                               return readfile("$config{srcdir}/$params{file}");
                        }
                        return undef;
                }
@@ -419,11 +420,12 @@ sub rcs_commit ($$$;$$$) {
 
        if (system("mtn", "--root=$config{mtnrootdir}", "commit", "--quiet",
                   "--author", $author, "--key", $config{mtnkey}, "-m",
-                  IkiWiki::possibly_foolish_untaint($message), $file) != 0) {
+                  IkiWiki::possibly_foolish_untaint($params{message}),
+                  $params{file}) != 0) {
                debug("Traditional commit failed! Returning data as conflict.");
-               my $conflict=readfile("$config{srcdir}/$file");
+               my $conflict=readfile("$config{srcdir}/$params{file}");
                if (system("mtn", "--root=$config{mtnrootdir}", "revert",
-                          "--quiet", $file) != 0) {
+                          "--quiet", $params{file}) != 0) {
                        debug("monotone revert failed");
                }
                return $conflict;
@@ -439,32 +441,21 @@ sub rcs_commit ($$$;$$$) {
        return undef # success
 }
 
-sub rcs_commit_staged ($$$;$) {
+sub rcs_commit_staged (@) {
        # Commits all staged changes. Changes can be staged using rcs_add,
        # rcs_remove, and rcs_rename.
-       my ($message, $user, $ipaddr, $emailuser)=@_;
-       
+       my %params=@_;
+
        # Note - this will also commit any spurious changes that happen to be
        # lying around in the working copy.  There shouldn't be any, but...
        
        chdir $config{srcdir}
            or error("Cannot chdir to $config{srcdir}: $!");
 
-       my $author;
-
-       if (defined $user) {
-               $author="Web user: " . $user;
-       }
-       elsif (defined $ipaddr) {
-               $author="Web IP: " . $ipaddr;
-       }
-       else {
-               $author="Web: Anonymous";
-       }
-
        if (system("mtn", "--root=$config{mtnrootdir}", "commit", "--quiet",
-                  "--author", $author, "--key", $config{mtnkey}, "-m",
-                  IkiWiki::possibly_foolish_untaint($message)) != 0) {
+                  "--author", IkiWiki::possibly_foolish_untaint(commitauthor(%params)),
+                  "--key", $config{mtnkey}, "-m",
+                  IkiWiki::possibly_foolish_untaint($params{message})) != 0) {
                error("Monotone commit failed");
        }
 }
index 5131a1502c474f29e0e873d60ec78af5e552f5a0..a3bb6240ef3024e2f33b855137a79083936b4e42 100644 (file)
@@ -38,13 +38,11 @@ sub rcs_prepedit ($) {
        return ""
 }
 
-sub rcs_commit ($$$;$$$) {
-       my ($file, $message, $rcstoken, $user, $ipaddr, $emailuser) = @_;
+sub rcs_commit (@) {
        return undef # success
 }
 
-sub rcs_commit_staged ($$$;$) {
-       my ($message, $user, $ipaddr, $emailuser)=@_;
+sub rcs_commit_staged (@) {
        return undef # success
 }
 
index e50efa5e093c5764a6156c636b23948db809e7cb..b333e2cdcff485edd81f4df426e1865c261a1199 100644 (file)
@@ -134,10 +134,12 @@ sub sessioncgi ($$) {
                $oldchoice=$session->param($choice_param);
                if ($config{rcs}) {
                        IkiWiki::disable_commit_hook();
-                       IkiWiki::rcs_commit($pagesources{$page}, "poll vote ($choice)",
-                               IkiWiki::rcs_prepedit($pagesources{$page}),
-                               $session->param("name"),
-                               $session->remote_addr());
+                       IkiWiki::rcs_commit(
+                               file => $pagesources{$page},
+                               message => "poll vote ($choice)",
+                               token => IkiWiki::rcs_prepedit($pagesources{$page}),
+                               session => $session,
+                       );
                        IkiWiki::enable_commit_hook();
                        IkiWiki::rcs_update();
                }
index b664cbf744a14c10b279f0892f0a0a89041328b8..95f148183cba558be65a95a9687992293d122839 100644 (file)
@@ -213,9 +213,10 @@ sub sessioncgi ($$) {
                                foreach my $file (@files) {
                                        IkiWiki::rcs_remove($file);
                                }
-                               IkiWiki::rcs_commit_staged(gettext("removed"),
-                                       $session->param("name"),
-                                       $session->remote_addr());
+                               IkiWiki::rcs_commit_staged(
+                                       message => gettext("removed"),
+                                       session => $session,
+                               );
                                IkiWiki::enable_commit_hook();
                                IkiWiki::rcs_update();
                        }
index 977c09e67f18ff033638514f6563840cda265314..61d39d4b568d74b3766984f585862ae698b9957b 100644 (file)
@@ -349,9 +349,8 @@ sub sessioncgi ($$) {
                                $pagesources{$rename->{src}}=$rename->{destfile};
                        }
                        IkiWiki::rcs_commit_staged(
-                               sprintf(gettext("rename %s to %s"), $srcfile, $destfile),
-                               $session->param("name"),
-                               $session->remote_addr(),
+                               message => sprintf(gettext("rename %s to %s"), $srcfile, $destfile),
+                               session => $session,
                        ) if $config{rcs};
 
                        # Then link fixups.
index ffacb8cf9534a2055d945224a60bd98fc12e14b7..f1e608408b4ff919d9adf02793556fb1169c9df0 100644 (file)
@@ -144,44 +144,50 @@ sub rcs_prepedit ($) {
        }
 }
 
-sub rcs_commit ($$$;$$$) {
+sub commitmessage (@) {
+       my %params=@_;
+
+       if (defined $params{session}) {
+               if (defined $params{session}->param("name")) {
+                       return "web commit by ".
+                               $params{session}->param("name").
+                               (length $params{message} ? ": $params{message}" : "");
+               }
+               elsif (defined $params{session}->remote_addr()) {
+                       return "web commit from ".
+                               $params{session}->remote_addr().
+                               (length $params{message} ? ": $params{message}" : "");
+               }
+       }
+       return $params{message};
+}
+
+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.
-       my $file=shift;
-       my $message=shift;
-       my $rcstoken=shift;
-       my $user=shift;
-       my $ipaddr=shift;
-       my $emailuser=shift;
-
-       if (defined $user) {
-               $message="web commit by $user".(length $message ? ": $message" : "");
-       }
-       elsif (defined $ipaddr) {
-               $message="web commit from $ipaddr".(length $message ? ": $message" : "");
-       }
+       my %params=@_;
 
        if (-d "$config{srcdir}/.svn") {
                # Check to see if the page has been changed by someone
                # else since rcs_prepedit was called.
-               my ($oldrev)=$rcstoken=~/^([0-9]+)$/; # untaint
-               my $rev=svn_info("Revision", "$config{srcdir}/$file");
+               my ($oldrev)=$params{token}=~/^([0-9]+)$/; # untaint
+               my $rev=svn_info("Revision", "$config{srcdir}/$params{file}");
                if (defined $rev && defined $oldrev && $rev != $oldrev) {
                        # Merge their changes into the file that we've
                        # changed.
                        if (system("svn", "merge", "--quiet", "-r$oldrev:$rev",
-                                  "$config{srcdir}/$file", "$config{srcdir}/$file") != 0) {
+                                  "$config{srcdir}/$params{file}", "$config{srcdir}/$params{file}") != 0) {
                                warn("svn merge -r$oldrev:$rev failed\n");
                        }
                }
 
                if (system("svn", "commit", "--quiet", 
                           "--encoding", "UTF-8", "-m",
-                          IkiWiki::possibly_foolish_untaint($message),
+                          IkiWiki::possibly_foolish_untaint(commitmessage(%params)),
                           $config{srcdir}) != 0) {
-                       my $conflict=readfile("$config{srcdir}/$file");
-                       if (system("svn", "revert", "--quiet", "$config{srcdir}/$file") != 0) {
+                       my $conflict=readfile("$config{srcdir}/$params{file}");
+                       if (system("svn", "revert", "--quiet", "$config{srcdir}/$params{file}") != 0) {
                                warn("svn revert failed\n");
                        }
                        return $conflict;
@@ -190,21 +196,14 @@ sub rcs_commit ($$$;$$$) {
        return undef # success
 }
 
-sub rcs_commit_staged ($$$;$) {
+sub rcs_commit_staged (@) {
        # Commits all staged changes. Changes can be staged using rcs_add,
        # rcs_remove, and rcs_rename.
-       my ($message, $user, $ipaddr, $emailuser)=@_;
-       
-       if (defined $user) {
-               $message="web commit by $user".(length $message ? ": $message" : "");
-       }
-       elsif (defined $ipaddr) {
-               $message="web commit from $ipaddr".(length $message ? ": $message" : "");
-       }
+       my %params=@_;
        
        if (system("svn", "commit", "--quiet",
                   "--encoding", "UTF-8", "-m",
-                  IkiWiki::possibly_foolish_untaint($message),
+                  IkiWiki::possibly_foolish_untaint(commitmessage(%params)),
                   $config{srcdir}) != 0) {
                warn("svn commit failed\n");
                return 1; # failure     
index 62f030f4eda9dd384b5127a0656eebc0170d6120..55064a9a3cef72c92f3ebc3cb43fa9ef7646d256 100644 (file)
@@ -90,7 +90,7 @@ sub gentag ($) {
                        if ($config{rcs}) {
                                IkiWiki::disable_commit_hook();
                                IkiWiki::rcs_add($tagfile);
-                               IkiWiki::rcs_commit_staged($message, undef, undef);
+                               IkiWiki::rcs_commit_staged(message => $message);
                                IkiWiki::enable_commit_hook();
                        }
                });
index 80c015e3cff881b8c59bd985647a73ae93bb6ca4..da4385446412635d3b4843e4b439e07cd399195b 100644 (file)
@@ -98,19 +98,23 @@ sub rcs_prepedit ($) {
        }
 }
 
-sub rcs_commit ($$$;$$$) {
-       my $file=shift;
-       my $message=shift;
-       my $rcstoken=shift;
-       my $user=shift;
-       my $ipaddr=shift;
-       my $emailuser=shift;
-
-       if (defined $user) {
-               $message="web commit by $user".(length $message ? ": $message" : "");
-       }
-       elsif (defined $ipaddr) {
-               $message="web commit from $ipaddr".(length $message ? ": $message" : "");
+sub rcs_commit (@) {
+       my %params=@_;
+
+       my ($file, $message, $rcstoken)=
+               ($params{file}, $params{message}, $params{token});
+
+       if (defined $params{session}) {
+               if (defined $params{session}->param("name")) {
+                       $message="web commit by ".
+                               $params{session}->param("name").
+                               (length $message ? ": $message" : "");
+               }
+               elsif (defined $params{session}->remote_addr()) {
+                       $message="web commit from ".
+                               $params{session}->remote_addr().
+                               (length $message ? ": $message" : "");
+               }
        }
 
        if (-d "$config{srcdir}/{arch}") {
@@ -140,10 +144,10 @@ sub rcs_commit ($$$;$$$) {
        return undef # success
 }
 
-sub rcs_commit_staged ($$$;$) {
+sub rcs_commit_staged (@) {
        # Commits all staged changes. Changes can be staged using rcs_add,
        # rcs_remove, and rcs_rename.
-       my ($message, $user, $ipaddr, $emailuser)=@_;
+       my %params=@_;
        
        error("rcs_commit_staged not implemented for tla"); # TODO
 }
index 2dfebd0b2eab8442be461aefe1643c891d83ea6e..f7452a070e14d08c6ea9a10f6cfe2445a3606e35 100644 (file)
@@ -1,9 +1,8 @@
 ikiwiki (3.20100624) UNRELEASED; urgency=low
 
   * API: Add new optional field usershort to rcs_recentchanges.
-  * API: rcs_commit and rcs_commit_staged are passed a new parameter
-    that may contain the username component of the email address of
-    the user making the commit.
+  * API: rcs_commit and rcs_commit_staged are now passed named
+    parameters.
 
  -- Joey Hess <joeyh@debian.org>  Wed, 23 Jun 2010 15:30:04 -0400
 
index ab2934bf14d22b01a1fcdd283cfb2320cf5b3e8f..a2b954bd43115677d23680e77d3e219cdc88c15e 100644 (file)
@@ -1051,18 +1051,20 @@ 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($$$;$$$)`
+#### `rcs_commit(@)`
+
+Passed named parameters: `file`, `message`, `token` (from `rcs_prepedit`),
+and `session` (optional).
 
-Passed a file, message, token (from `rcs_prepedit`), user, ip address,
-and optionally the username component of the committer's email 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($$$;$)`
+#### `rcs_commit_staged(@)`
+
+Passed named parameters: `message`, and `session` (optional).
 
-Passed a message, user, ip address, and optionally the username component of
-the committer's email address. Should commit all staged changes.
-Returns undef on success, and an error message on failure.
+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`.
index 04352b97050905dfd853a3a1b64228137e12dc69..60df99855df63a8a248b78616911359035477a1a 100755 (executable)
@@ -59,7 +59,7 @@ foreach my $y ($startyear..$endyear) {
        }
 }
 
-IkiWiki::rcs_commit_staged(gettext("calendar update"), undef, undef)
+IkiWiki::rcs_commit_staged(message => gettext("calendar update"))
        if $config{rcs};
 
 exec("ikiwiki", "-setup", $setup, "-refresh");
index 9a4bbf6bc7da00d5df90a95f547f087355044832..9644fd396b9fbcdb4c4dec46ce29b1b05e5d2380 100644 (file)
@@ -1,5 +1,5 @@
 Name:           ikiwiki
-Version: 3.20100623
+Version: 3.20100624
 Release:        1%{?dist}
 Summary:        A wiki compiler
 
index 437cdbdcc773ab1efde59caf5728fee535e42ed7..e50fa0f68ff4ba13f385074f6876f4b46d2884b2 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-10 15:02-0400\n"
+"POT-Creation-Date: 2010-06-23 17:10-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"
@@ -52,7 +52,7 @@ msgstr ""
 msgid "You are banned."
 msgstr ""
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1317
 msgid "Error"
 msgstr ""
 
@@ -163,19 +163,19 @@ msgstr ""
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr ""
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:110
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -248,19 +248,19 @@ msgstr ""
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:552 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:554 ../IkiWiki/Plugin/websetup.pm:268
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:603
+#: ../IkiWiki/Plugin/comments.pm:605
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:641
+#: ../IkiWiki/Plugin/comments.pm:645
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:790
+#: ../IkiWiki/Plugin/comments.pm:802
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -270,7 +270,7 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:800
+#: ../IkiWiki/Plugin/comments.pm:812
 msgid "Comment"
 msgstr ""
 
@@ -305,9 +305,9 @@ msgstr ""
 msgid "creating %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:334
-#: ../IkiWiki/Plugin/editpage.pm:345 ../IkiWiki/Plugin/editpage.pm:390
-#: ../IkiWiki/Plugin/editpage.pm:429
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr ""
@@ -320,12 +320,12 @@ msgstr ""
 msgid "match not specified"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:70
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
+#: ../IkiWiki/Plugin/edittemplate.pm:131 ../IkiWiki/Plugin/inline.pm:339
 #: ../IkiWiki/Plugin/template.pm:44
 msgid "failed to process template:"
 msgstr ""
@@ -356,18 +356,18 @@ msgstr ""
 msgid "%s is an attachment, not a page."
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:724 ../IkiWiki/Plugin/git.pm:742
+#: ../IkiWiki/Receive.pm:129
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:764
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:768
 msgid "you are not allowed to change file modes"
 msgstr ""
 
@@ -513,7 +513,7 @@ msgstr ""
 msgid "more"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, perl-format
 msgid "failed to load openid module: "
 msgstr ""
@@ -610,7 +610,7 @@ msgstr ""
 msgid "rebuilding all pages to fix meta titles"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
+#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:784
 #, perl-format
 msgid "building %s"
 msgstr ""
@@ -619,48 +619,48 @@ msgstr ""
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:455
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:475
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:875
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:889
 #, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:898
 #, perl-format
 msgid "failed to update %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:904
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:940
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:953
 #, perl-format
 msgid "failed to translate %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1037
 msgid "removed obsolete PO files"
 msgstr ""
 
@@ -803,7 +803,7 @@ msgstr ""
 msgid "Please select the attachments to remove."
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr ""
 
@@ -853,7 +853,7 @@ msgstr ""
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:577
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr ""
@@ -988,26 +988,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:272
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:288
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:431
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:435
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:472
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1017,7 +1017,7 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:86
+#: ../IkiWiki/Receive.pm:85
 #, perl-format
 msgid "bad file name %s"
 msgstr ""
@@ -1034,47 +1034,47 @@ msgid ""
 "allow this"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, perl-format
 msgid "removing obsolete %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, perl-format
 msgid "building %s, which links to %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, perl-format
 msgid "building %s, which depends on %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, perl-format
 msgid "building %s, to update its backlinks"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:836
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr ""
@@ -1179,31 +1179,31 @@ msgstr ""
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:607
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1299
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1993
+#: ../IkiWiki.pm:1994
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2070
+#: ../IkiWiki.pm:2071
 #, perl-format
 msgid "invalid sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2091
+#: ../IkiWiki.pm:2092
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2227
+#: ../IkiWiki.pm:2228
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr ""
index 0bdd883d51e754d587d4a92e37d34c67b97621bf..3e54ec4dc8f57ee7601f572d090a5dd66f04a822 100755 (executable)
@@ -24,11 +24,19 @@ IkiWiki::checkconfig();
 
 system "bzr init $config{srcdir}";
 
+use CGI::Session;
+my $session=CGI::Session->new;
+$session->param("name", "Joe User");
+
 # Web commit
 my $test1 = readfile("t/test1.mdwn");
 writefile('test1.mdwn', $config{srcdir}, $test1);
 IkiWiki::rcs_add("test1.mdwn");
-IkiWiki::rcs_commit("test1.mdwn", "Added the first page", "moo", "Joe User");
+IkiWiki::rcs_commit(
+       file => "test1.mdwn",
+       message => "Added the first page",
+       token => "moo",
+       session => $session);
 
 my @changes;
 @changes = IkiWiki::rcs_recentchanges(3);
@@ -66,7 +74,10 @@ ok($mtime >= time() - 20);
 writefile('test3.mdwn', $config{srcdir}, $test1);
 IkiWiki::rcs_add("test3.mdwn");
 IkiWiki::rcs_rename("test3.mdwn", "test4.mdwn");
-IkiWiki::rcs_commit_staged("Added the 4th page", "moo", "Joe User");
+IkiWiki::rcs_commit_staged(
+       message => "Added the 4th page",
+       session => $session,
+);
 
 @changes = IkiWiki::rcs_recentchanges(4);
 
@@ -75,7 +86,10 @@ is($changes[0]{pages}[0]{"page"}, "test4");
 
 ok(mkdir($config{srcdir}."/newdir"));
 IkiWiki::rcs_rename("test4.mdwn", "newdir/test5.mdwn");
-IkiWiki::rcs_commit_staged("Added the 5th page", "moo", "Joe User");
+IkiWiki::rcs_commit_staged(
+       message => "Added the 5th page",
+       session => $session,
+);
 
 @changes = IkiWiki::rcs_recentchanges(4);
 
@@ -83,6 +97,9 @@ is($#changes, 3);
 is($changes[0]{pages}[0]{"page"}, "newdir/test5");
 
 IkiWiki::rcs_remove("newdir/test5.mdwn");
-IkiWiki::rcs_commit_staged("Remove the 5th page", "moo", "Joe User");
+IkiWiki::rcs_commit_staged(
+       message => "Remove the 5th page",
+       session => $session,
+);
 
 system "rm -rf $dir";
diff --git a/t/cvs.t b/t/cvs.t
index 2808973be55a1819c65d2178cab3cf5e76841872..96359ab6e2a6bb9773af99179cf567da8732b3b1 100755 (executable)
--- a/t/cvs.t
+++ b/t/cvs.t
@@ -46,7 +46,11 @@ system "cvs -d $cvsrepo co -d $config{srcdir} ikiwiki >/dev/null";
 my $test1 = readfile("t/test1.mdwn");
 writefile('test1.mdwn', $config{srcdir}, $test1);
 IkiWiki::rcs_add("test1.mdwn");
-IkiWiki::rcs_commit("test1.mdwn", "Added the first page", "moo");
+IkiWiki::rcs_commit(
+       files => "test1.mdwn",
+       message => "Added the first page",
+       token => "moo"
+);
 
 my @changes;
 @changes = IkiWiki::rcs_recentchanges(3);
diff --git a/t/git.t b/t/git.t
index f1c24b3598e1709d9d58a9f962df4fef1f12a3f1..ee778ebf0ab38050eabd52f8528c25d1fe392058 100755 (executable)
--- a/t/git.t
+++ b/t/git.t
@@ -38,7 +38,11 @@ is($changes[0]{pages}[0]{"page"}, ".gitignore");
 my $test1 = readfile("t/test1.mdwn");
 writefile('test1.mdwn', $config{srcdir}, $test1);
 IkiWiki::rcs_add("test1.mdwn");
-IkiWiki::rcs_commit("test1.mdwn", "Added the first page", "moo");
+IkiWiki::rcs_commit(
+       file => "test1.mdwn",
+       message => "Added the first page",
+       token => "moo",
+);
 
 @changes = IkiWiki::rcs_recentchanges(3);
 
@@ -68,7 +72,7 @@ is($changes[1]{pages}[0]{"page"}, "test1");
 writefile('test3.mdwn', $config{srcdir}, $test1);
 IkiWiki::rcs_add("test3.mdwn");
 IkiWiki::rcs_rename("test3.mdwn", "test4.mdwn");
-IkiWiki::rcs_commit_staged("Added the 4th page", "moo", "Joe User");
+IkiWiki::rcs_commit_staged(message => "Added the 4th page");
 
 @changes = IkiWiki::rcs_recentchanges(4);
 
@@ -77,7 +81,7 @@ is($changes[0]{pages}[0]{"page"}, "test4");
 
 ok(mkdir($config{srcdir}."/newdir"));
 IkiWiki::rcs_rename("test4.mdwn", "newdir/test5.mdwn");
-IkiWiki::rcs_commit_staged("Added the 5th page", "moo", "Joe User");
+IkiWiki::rcs_commit_staged(message => "Added the 5th page");
 
 @changes = IkiWiki::rcs_recentchanges(4);
 
@@ -85,6 +89,6 @@ is($#changes, 3);
 is($changes[0]{pages}[0]{"page"}, "newdir/test5");
 
 IkiWiki::rcs_remove("newdir/test5.mdwn");
-IkiWiki::rcs_commit_staged("Remove the 5th page", "moo", "Joe User");
+IkiWiki::rcs_commit_staged(message => "Remove the 5th page");
 
 system "rm -rf $dir";
index 954b17526bd31c987fa21a0c77fa64e98b4d3139..b64ea8e563a0a0f6a683fa095374712c194a2c38 100755 (executable)
@@ -22,13 +22,22 @@ $config{srcdir} = "$dir/repo";
 IkiWiki::loadplugins();
 IkiWiki::checkconfig();
 
+use CGI::Session;
+my $session=CGI::Session->new;
+$session->param("name", "Joe User");
+
 system "hg init $config{srcdir}";
 
 # Web commit
 my $test1 = readfile("t/test1.mdwn");
 writefile('test1.mdwn', $config{srcdir}, $test1);
 IkiWiki::rcs_add("test1.mdwn");
-IkiWiki::rcs_commit("test1.mdwn", "Added the first page", "moo", "Joe User");
+IkiWiki::rcs_commit(
+       file => "test1.mdwn",
+       message => "Added the first page",
+       token => "moo",
+       session => $session,
+);
 
 my @changes;
 @changes = IkiWiki::rcs_recentchanges(3);
diff --git a/t/svn.t b/t/svn.t
index 5223b4409416911276974a57a823224cc4912df6..82b71b5fc1a404fc81159b6585c47997e9a4eb10 100755 (executable)
--- a/t/svn.t
+++ b/t/svn.t
@@ -36,7 +36,11 @@ system "svn co file://$svnrepo/trunk $config{srcdir} >/dev/null";
 my $test1 = readfile("t/test1.mdwn");
 writefile('test1.mdwn', $config{srcdir}, $test1);
 IkiWiki::rcs_add("test1.mdwn");
-IkiWiki::rcs_commit("test1.mdwn", "Added the first page", "moo");
+IkiWiki::rcs_commit(
+       file => "test1.mdwn",
+       message => "Added the first page",
+       token => "moo",
+);
 
 my @changes;
 @changes = IkiWiki::rcs_recentchanges(3);