X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/702b8721d360ca132ff5c8f43d332757694b98da..c5a3afffe9c2ee3bdcd5530df736fed9ddb7072c:/IkiWiki/Rcs/svn.pm

diff --git a/IkiWiki/Rcs/svn.pm b/IkiWiki/Rcs/svn.pm
index 71189c82e..87fd12fad 100644
--- a/IkiWiki/Rcs/svn.pm
+++ b/IkiWiki/Rcs/svn.pm
@@ -60,13 +60,22 @@ sub rcs_prepedit ($) { #{{{
 	}
 } #}}}
 
-sub rcs_commit ($$$) { #{{{
+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;
+
+	if (defined $user) {
+		$message="web commit by $user".(length $message ? ": $message" : "");
+	}
+	elsif (defined $ipaddr) {
+		$message="web commit from $ipaddr".(length $message ? ": $message" : "");
+	}
 
 	if (-d "$config{srcdir}/.svn") {
 		# Check to see if the page has been changed by someone
@@ -86,7 +95,7 @@ sub rcs_commit ($$$) { #{{{
 		if (system("svn", "commit", "--quiet", 
 		           "--encoding", "UTF-8", "-m",
 		           possibly_foolish_untaint($message),
-			   "$config{srcdir}") != 0) {
+			   $config{srcdir}) != 0) {
 			my $conflict=readfile("$config{srcdir}/$file");
 			if (system("svn", "revert", "--quiet", "$config{srcdir}/$file") != 0) {
 				warn("svn revert failed\n");
@@ -122,7 +131,6 @@ sub rcs_recentchanges ($) { #{{{
 
 	eval q{
 		use Date::Parse;
-		use Time::Duration;
 		use XML::SAX;
 		use XML::Simple;
 	};
@@ -195,12 +203,13 @@ sub rcs_recentchanges ($) { #{{{
 
 sub rcs_notify () { #{{{
 	if (! exists $ENV{REV}) {
-		error("REV is not set, not running from svn post-commit hook, cannot send notifications");
+		error(gettext("REV is not set, not running from svn post-commit hook, cannot send notifications"));
 	}
 	my $rev=int(possibly_foolish_untaint($ENV{REV}));
 	
 	my $user=`svnlook author $config{svnrepo} -r $rev`;
 	chomp $user;
+	
 	my $message=`svnlook log $config{svnrepo} -r $rev`;
 	if ($message=~/$config{web_commit_regexp}/) {
 		$user=defined $2 ? "$2" : "$3";
@@ -214,44 +223,15 @@ sub rcs_notify () { #{{{
 			push @changed_pages, $1;
 		}
 	}
-		
+	
 	require IkiWiki::UserInfo;
-	my @email_recipients=commit_notify_list($user, @changed_pages);
-	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=`svnlook diff $config{svnrepo} -r $rev --no-diff-deleted`;
-
-		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 {
+			return $message;
+		},
+		sub {
+			`svnlook diff $config{svnrepo} -r $rev --no-diff-deleted`;
+		}, $user, @changed_pages);
 } #}}}
 
 sub rcs_getctime ($) { #{{{