Alexandre Julliard : patches: Add email notifications for assigned patches.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 16 05:35:46 CST 2016


Module: tools
Branch: master
Commit: 816ac2d399b782ca0450251084cdefc36ddaa22c
URL:    http://source.winehq.org/git/tools.git/?a=commit;h=816ac2d399b782ca0450251084cdefc36ddaa22c

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Feb 15 20:58:34 2016 +0900

patches: Add email notifications for assigned patches.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 patches/expire | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 65 insertions(+), 1 deletion(-)

diff --git a/patches/expire b/patches/expire
index 0ff3bc7..6bbd5c8 100755
--- a/patches/expire
+++ b/patches/expire
@@ -149,6 +149,8 @@ my $dry_run = 0;
 my $quiet = 1;
 my $now = time();
 my $email_from = "Marvin <testbot\@winehq.org>";
+my $base_url = "https://source.winehq.org/patches/data";
+my %reviews;
 
 foreach my $arg (@ARGV)
 {
@@ -210,6 +212,16 @@ sub get_previous_state($)
     return $prev_status;
 }
 
+sub get_patch_reviewer($)
+{
+    my $file = shift;
+
+    return undef unless open REVIEW, "<$dir/$file.review";
+    chomp( my $ret = <REVIEW> );
+    close REVIEW;
+    return $ret;
+}
+
 sub get_notify_headers($$)
 {
     my $file = shift;
@@ -242,7 +254,7 @@ sub get_notify_headers($$)
     close PATCH;
 
     push @headers, "X-Patch-Status: $status_descr{$status}";
-    push @headers, "X-Patch-URL: https://source.winehq.org/patches/data/$file";
+    push @headers, "X-Patch-URL: $base_url/$file";
     push @headers, "Reply-To: wine-devel\@winehq.org";
     return @headers;
 }
@@ -260,9 +272,17 @@ sub notify_state_change($$$)
     # if there's no available explanation, don't notify
     return unless defined $status_explanation{$status};
 
+    if ($status eq "assigned")
+    {
+        my $reviewer = get_patch_reviewer( $file );
+        push @{$reviews{$reviewer}}, $file if $reviewer;
+    }
+
     my @headers = get_notify_headers( $file, $status );
     return unless @headers;
 
+    return if $dry_run;
+
     open PREVSTATUS, ">$dir/OLD/$file.status" or return;
     printf PREVSTATUS "%s\n", $status;
     close PREVSTATUS;
@@ -290,6 +310,48 @@ EOF
     close SENDMAIL;
 }
 
+sub notify_reviewers()
+{
+    while ((my $rev, $patches) = each( %reviews ))
+    {
+        my $patch_urls = join "\n    ", map({ "$base_url/$_"; } sort @{$patches});
+        my $patch_str = @{$patches} > 1 ? "patches" : "patch";
+
+        printf "notifying %s about %s\n", $rev, join ", ", sort @{$patches} unless $quiet;
+        next if $dry_run;
+
+        open SENDMAIL, "|/usr/sbin/sendmail -oi -t -odq" or return;
+        print SENDMAIL <<"EOF";
+From: $email_from
+To: $rev
+Subject: Wine $patch_str assigned for review
+X-Patch-URL: $patch_urls
+Reply-To: wine-devel\@winehq.org
+
+This is an automated notification to let you know that you have been
+asked to review the following Wine $patch_str:
+
+    $patch_urls
+
+If you think that a patch is correct and can be committed, please send
+a mail to wine-patches with your Signed-off-by header, as a reply to
+the original patch email.
+
+If you find some issues in a patch, please send a mail to the patch
+author and CC wine-devel so that the patch status can be updated
+accordingly.
+
+If you feel that you don't have the time or the qualifications to
+review a patch, please send a mail to wine-devel or directly to
+julliard\@winehq.org so that the patch can be assigned to another
+reviewer.
+
+Thank you for your help!
+EOF
+        close SENDMAIL;
+    }
+}
+
 # expire current patches
 
 opendir DIR, $dir or die "cannot open '$dir': $!\n";
@@ -368,3 +430,5 @@ foreach my $file (sort readdir DIR)
     }
 }
 closedir DIR;
+
+notify_reviewers();




More information about the wine-cvs mailing list