X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/35ee7e44a62f9126a83c1243b549d47cc5ca7b43..b62270dfdddac257a295d80c1a0b2d9786f9a94e:/IkiWiki/Rcs/tla.pm?ds=sidebyside

diff --git a/IkiWiki/Rcs/tla.pm b/IkiWiki/Rcs/tla.pm
index c71c9e6ee..1dbc006c1 100644
--- a/IkiWiki/Rcs/tla.pm
+++ b/IkiWiki/Rcs/tla.pm
@@ -3,12 +3,9 @@
 use warnings;
 use strict;
 use IkiWiki;
-use POSIX qw(setlocale LC_CTYPE);
 
 package IkiWiki;
 
-my $tla_webcommit=qr/^web commit (by (\w+)|from (\d+\.\d+\.\d+\.\d+)):?(.*)/;
-
 sub quiet_system (@) {
 	# See Debian bug #385939.
 	open (SAVEOUT, ">&STDOUT");
@@ -40,10 +37,19 @@ sub rcs_prepedit ($) { #{{{
 	}
 } #}}}
 
-sub rcs_commit ($$$) { #{{{
+sub rcs_commit ($$$;$$) { #{{{
 	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}/{arch}") {
 		# Check to see if the page has been changed by someone
@@ -117,7 +123,7 @@ sub rcs_recentchanges ($) {
 		my $when = time - str2time($sdate, 'UTC');
 
 		my $committype = "web";
-		if (defined $summ && $summ =~ /$tla_webcommit/) {
+		if (defined $summ && $summ =~ /$config{web_commit_regexp}/) {
 			$user = defined $2 ? "$2" : "$3";
 			$summ = $4;
 		}
@@ -166,7 +172,6 @@ sub rcs_notify () { #{{{
 	my $head = Mail::Header->new(\*LOG);
 	close(LOG);
 
-	my $message = $head->get("Summary");
 	my $user = $head->get("Creator");
 
 	my $newfiles = $head->get("New-files");
@@ -176,57 +181,27 @@ sub rcs_notify () { #{{{
 	my @changed_pages = grep { !/(^.*\/)?\.arch-ids\/.*\.id$/ }
 		split(/ /, "$newfiles $modfiles $remfiles .arch-ids/fake.id");
 
-	if ($message =~ /$tla_webcommit/) {
-		$user=defined $2 ? "$2" : "$3";
-		$message=$4;
-	}
-
 	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 $logs = `tla logs -d $config{srcdir}`;
-		my @changesets = reverse split(/\n/, $logs);
-		my $i;
-
-		for($i=0;$i<$#changesets;$i++) {
-			last if $changesets[$i] eq $rev;
-		}
-
-		my $revminusone = $changesets[$i+1];
-		my $diff=`tla diff -d $ENV{ARCH_TREE_ROOT} $revminusone`;
-
-		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 {
+			my $message = $head->get("Summary");
+			if ($message =~ /$config{web_commit_regexp}/) {
+				$user=defined $2 ? "$2" : "$3";
+				$message=$4;
+			}
+		},
+		sub {
+			my $logs = `tla logs -d $config{srcdir}`;
+			my @changesets = reverse split(/\n/, $logs);
+			my $i;
+
+			for($i=0;$i<$#changesets;$i++) {
+				last if $changesets[$i] eq $rev;
+			}
+	
+			my $revminusone = $changesets[$i+1];
+			`tla diff -d $ENV{ARCH_TREE_ROOT} $revminusone`;
+		}, $user, @changed_pages);
 } #}}}
 
 sub rcs_getctime ($) { #{{{