]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Rcs/git.pm
mercurial username setting patch
[ikiwiki.git] / IkiWiki / Rcs / git.pm
index c8b5adc45d6b584064d93a06102b1ad0887ab01c..05eaa8d78eba8f408bdaa4645a3eca28d31ea213 100644 (file)
@@ -12,7 +12,6 @@ my $origin_branch    = 'origin';            # Git ref for main repository
 my $master_branch    = 'master';            # working branch
 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
-my $web_commit_msg   = qr/^web commit (by (\w+)|from (\d+\.\d+\.\d+\.\d+)):?(.*)/;
 
 sub _safe_git (&@) { #{{{
        # Start a child process safely without resorting /bin/sh.
@@ -295,12 +294,19 @@ 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) = @_;
+       my ($file, $message, $rcstoken, $user, $ipaddr) = @_;
+
+       if (defined $user) {
+               $message="web commit by $user".(length $message ? ": $message" : "");
+       }
+       elsif (defined $ipaddr) {
+               $message="web commit from $ipaddr".(length $message ? ": $message" : "");
+       }
 
        # XXX: Wiki directory is in the unlocked state when starting this
        # action.  But it takes time for a Git process to finish its job
@@ -375,7 +381,7 @@ sub rcs_recentchanges ($) { #{{{
                push @message, { line => $title };
 
                if (defined $message[0] &&
-                   $message[0]->{line} =~ m/$web_commit_msg/) {
+                   $message[0]->{line} =~ m/$config{web_commit_regexp}/) {
                        $user=defined $2 ? "$2" : "$3";
                        $message[0]->{line}=$4;
                } else {
@@ -424,7 +430,7 @@ sub rcs_notify () { #{{{
        my @changed_pages = map { $_->{'file'} } @{ $ci->{'details'} };
 
        my ($user, $message);
-       if (@{ $ci->{'comment'} }[0] =~ m/$web_commit_msg/) {
+       if (@{ $ci->{'comment'} }[0] =~ m/$config{web_commit_regexp}/) {
                $user    = defined $2 ? "$2" : "$3";
                $message = $4;
        } else {
@@ -433,41 +439,13 @@ sub rcs_notify () { #{{{
        }
 
        require IkiWiki::UserInfo;
-       my @email_recipients = commit_notify_list($user, @changed_pages);
-       return if !@email_recipients;
-
-       # TODO: if a commit spans multiple pages, this will send
-       # subscribers a diff that might contain pages they did not
-       # sign up for. Should separate the diff per page and
-       # reassemble into one mail with just the pages subscribed to.
-       my $diff = join "\n", run_or_die('git-diff', "${sha1}^", $sha1);
-
-       my $subject = "$config{wikiname} update of ";
-       if (@changed_pages > 2) {
-               $subject .= "$changed_pages[0] $changed_pages[1] etc";
-       } else {
-               $subject .= join " ", @changed_pages;
-       }
-       $subject .= " by $user";
-
-       my $template = template("notifymail.tmpl");
-       $template->param(
-               wikiname => $config{wikiname},
-               diff     => $diff,
-               user     => $user,
-               message  => $message,
-       );
-
-       eval q{use Mail::Sendmail};
-       error($@) if $@;
-       foreach my $email (@email_recipients) {
-               sendmail(
-                       To      => $email,
-                       From    => "$config{wikiname} <$config{adminemail}>",
-                       Subject => $subject,
-                       Message => $template->output,
-               ) or error("Failed to send update notification mail: $!");
-       }
+       send_commit_mails(
+               sub {
+                       $message;
+               },
+               sub {
+                       join "\n", run_or_die('git-diff', "${sha1}^", $sha1);
+               }, $user, @changed_pages);
 } #}}}
 
 sub rcs_getctime ($) { #{{{