Alexandre Julliard : patches: Also use References: header to build mail threads.
Module: tools Branch: master Commit: 4e6b4b09d261b86ad0b0768849806294c8292e14 URL: http://source.winehq.org/git/tools.git/?a=commit;h=4e6b4b09d261b86ad0b076884... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Nov 9 12:32:44 2017 +0100 patches: Also use References: header to build mail threads. Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- patches/update | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/patches/update b/patches/update index e4ede03..ca4d2e5 100755 --- a/patches/update +++ b/patches/update @@ -154,6 +154,7 @@ foreach my $file (readdir DIR) elsif (/^From: (.*)$/) { $patch{"author"} = format_author($1); } elsif (/^Message-Id: (.*)$/) { $patch{"msgid"} = $1; } elsif (/^In-Reply-To: (.*)$/) { $patch{"reply"} = $1; } + elsif (/^References: (.*)$/) { @{$patch{"refs"}} = split /\s+/, $1; } last if (/^$/); } while (<PATCH>) @@ -225,24 +226,35 @@ closedir DIR; # build mail threads -foreach my $file (sort keys %patches) +sub assign_parent($); +sub assign_parent($) { - my $patch = $patches{$file}; - next if defined $patch->{"has_patch"}; - next unless defined $patch->{"reply"}; - next unless defined $messages{$patch->{"reply"}}; - my $parent = $messages{$patch->{"reply"}}; - # find top parent - while (!defined($parent->{"has_patch"}) && defined($parent->{"reply"})) + my $patch = shift; + + if (defined($patch->{"parent"})) { return $patch->{"parent"}; } + + return $patch if defined $patch->{"has_patch"}; + return $patch unless defined $patch->{"reply"}; + + foreach ($patch->{"reply"}, @{$patch->{"refs"}}) { - $parent = $messages{$parent->{"reply"}}; + next unless defined $messages{$_}; + my $parent = assign_parent( $messages{$_} ); + next unless $parent; + # add it to the parent's children + $patch->{"parent"} = $parent; + push @{$parent->{"children"}}, $patch; + push @{$parent->{"signoff"}}, @{$patch->{"signoff"}} if $patch->{"signoff"}; + return $parent; } - next unless defined $parent; - # add it to the parent's children and remove it from the list - $patch->{"parent"} = $parent; - push @{$parent->{"children"}}, $patch; - push @{$parent->{"signoff"}}, @{$patch->{"signoff"}} if $patch->{"signoff"}; - delete $patches{$file}; + return undef; +} + +foreach my $file (sort keys %patches) +{ + assign_parent( $patches{$file} ); + # remove patches that have a parent + delete $patches{$file} if $patches{$file}->{"parent"}; } my $row = 0; @@ -250,6 +262,12 @@ foreach my $file (sort { $patches{$b}->{"order"} <=> $patches{$a}->{"order"} } k { my $patch = $patches{$file}; + if (!defined $patch->{"has_patch"}) # skip non-patches + { + next if $patch->{"status"} eq "reply"; + next unless $patch->{"subject"} =~ /\[.*PATCH.*\]/; + } + printf INDEX "<tr class=\"%s %s\"><td class=\"id\">%s</td><td class=\"status\"><a href=\"#legend\">%s</a></td>", $row & 1 ? "odd" : "even", $patch->{"status"}, $file, $status_descr{$patch->{"status"}} || $patch->{"status"}; if (defined $patch->{"children"})
participants (1)
-
Alexandre Julliard