Alexandre Julliard : patches: Expire replies along with their parent patch.

Alexandre Julliard julliard at winehq.org
Fri Nov 10 09:14:03 CST 2017


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Nov  8 21:08:44 2017 +0100

patches: Expire replies along with their parent patch.

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

---

 patches/expire | 96 +++++++++++++++++++++++-----------------------------------
 1 file changed, 38 insertions(+), 58 deletions(-)

diff --git a/patches/expire b/patches/expire
index cba6246..4dd8a1a 100755
--- a/patches/expire
+++ b/patches/expire
@@ -193,6 +193,21 @@ sub get_patch_state($)
     my $file = shift;
     my $status = "nil";
     my $mtime = 0;
+    my ($subject, $msgid, $reply);
+
+    return undef unless open PATCH, "<$dir/$file";
+    while (<PATCH>)
+    {
+        if (/^Subject: (.*)$/) { $subject = $1; }
+        elsif (/^Message-Id: (.*)$/) { $msgid = $1; }
+        elsif (/^In-Reply-To: (.*)$/) { $reply = $1; }
+        last if (/^$/);
+    }
+    while (<PATCH>)
+    {
+        if (/^diff --git a\//) { $reply = undef; last; }
+    }
+    close PATCH;
 
     if (open STATUS, "<$dir/$file.status")
     {
@@ -201,11 +216,8 @@ sub get_patch_state($)
         $mtime = (stat STATUS)[9] unless ($status eq "nil" || $status eq "pending");
         close STATUS;
     }
-    if (!$mtime && $file !~ /^OLD\//)
-    {
-        $mtime = (stat "$dir/$file")[9];
-    }
-    return ($status, $mtime);
+    $mtime ||= (stat "$dir/$file")[9];
+    return ($subject, $msgid, $reply, $status, $mtime);
 }
 
 sub get_previous_state($)
@@ -364,81 +376,49 @@ EOF
 
 # expire current patches
 
+my %patches;
+
 opendir DIR, $dir or die "cannot open '$dir': $!\n";
 foreach my $file (sort readdir DIR)
 {
     next unless $file =~ /^[0-9]+$/;
-    my ($status, $mtime) = get_patch_state( $file );
+    my ($subject, $msgid, $reply, $status, $mtime) = get_patch_state( $file );
     my $prev_status = get_previous_state( $file );
     my $limit = $status_expiry{$status} || 7;
+    my $expire = (($now - $mtime - 12*60*60) / (24*60*60) > $limit);
 
     notify_state_change( $file, $prev_status, $status );
 
-    if (($now - $mtime - 12*60*60) / (24*60*60) > $limit)
-    {
-        if ($status eq "nil" || $status eq "pending")
-        {
-            # move to OLD
-            printf "rename $file -> OLD   %s  %s\n", $status, get_patch_subject( "$file" ) unless $quiet;
-            unless ($dry_run)
-            {
-                rename "$dir/$file",        "$dir/OLD/$file";
-                rename "$dir/$file.status", "$dir/OLD/$file.status";
-                rename "$dir/$file.order",  "$dir/OLD/$file.order";
-                rename "$dir/$file.review", "$dir/OLD/$file.review";
-                rename "$dir/$file.signoff", "$dir/OLD/$file.signoff";
-                rename "$dir/$file.testbot", "$dir/OLD/$file.testbot";
-                rename "$dir/$file.testfail", "$dir/OLD/$file.testfail";
-            }
-        }
-        else
-        {
-            printf "unlink $file   %s  %s\n", $status, get_patch_subject( "$file" ) unless $quiet;
-            unless ($dry_run)
-            {
-                unlink "$dir/$file";
-                unlink "$dir/$file.status";
-                unlink "$dir/$file.order";
-                unlink "$dir/$file.signoff";
-                unlink "$dir/$file.review";
-                unlink "$dir/$file.testbot";
-                unlink "$dir/$file.testfail";
-                unlink "$dir/OLD/$file.status";
-            }
-        }
-    }
+    $patches{$msgid} = [ $file, $subject, $reply, $status, $expire ];
 }
 closedir DIR;
 
-# expire old patches whose status has changed
-
-opendir DIR, "$dir/OLD" or die "cannot open '$dir/OLD': $!\n";
-foreach my $file (sort readdir DIR)
+foreach my $p (keys %patches)
 {
-    next unless $file =~ /^[0-9]+$/;
-    my ($status, $mtime) = get_patch_state( "OLD/$file" );
+    my ($file, $subject, $reply, $status, $expire) = @{$patches{$p}};
+    my $orig_status = $status;
 
-    if ($status eq "pending")
+    # for replies, inherit expire flag from top parent
+    while ($reply && $status eq "reply")
     {
-        # remove status file
-        printf "unlink OLD/$file.status\n" unless $quiet;
-        unlink "$dir/OLD/$file.status" unless $dry_run;
+        last unless defined $patches{$reply};
+        (undef, undef, $reply, $status, $expire) = @{$patches{$reply}};
     }
-    elsif ($status ne "nil")
+
+    if ($expire)
     {
-        printf "unlink OLD/$file   %s  %s\n", $status, get_patch_subject( "OLD/$file" ) unless $quiet;
+        printf "unlink $file   %s  %s\n", $orig_status, $subject unless $quiet;
         unless ($dry_run)
         {
-            unlink "$dir/OLD/$file";
+            unlink "$dir/$file";
+            unlink "$dir/$file.status";
+            unlink "$dir/$file.order";
+            unlink "$dir/$file.review";
+            unlink "$dir/$file.testbot";
+            unlink "$dir/$file.testfail";
             unlink "$dir/OLD/$file.status";
-            unlink "$dir/OLD/$file.order";
-            unlink "$dir/OLD/$file.review";
-            unlink "$dir/OLD/$file.signoff";
-            unlink "$dir/OLD/$file.testbot";
-            unlink "$dir/OLD/$file.testfail";
         }
     }
 }
-closedir DIR;
 
 notify_reviewers();




More information about the wine-cvs mailing list