X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/f27a462b185ef571d16e467be70123f46f9ae990..ed982a6f30c63d264cec62d30dcfb17537be50e2:/IkiWiki/Rcs/git.pm

diff --git a/IkiWiki/Rcs/git.pm b/IkiWiki/Rcs/git.pm
index 09275fe5f..46adf1657 100644
--- a/IkiWiki/Rcs/git.pm
+++ b/IkiWiki/Rcs/git.pm
@@ -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.
@@ -344,6 +343,7 @@ sub rcs_recentchanges ($) { #{{{
 	my ($num) = @_;
 
 	eval q{use Date::Parse};
+	error($@) if $@;
 
 	my ($sha1, $type, $when, $diffurl, $user, @pages, @message, @rets);
 	INFO: foreach my $ci (git_commit_info('HEAD', $num)) {
@@ -374,7 +374,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 {
@@ -423,7 +423,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 {
@@ -432,40 +432,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};
-	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 ($) { #{{{