Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48353 Signed-off-by: Francois Gouget fgouget@codeweavers.com --- testbot/lib/WineTestBot/Patches.pm | 73 ++++++++++++--------- testbot/lib/WineTestBot/PendingPatchSets.pm | 24 +++---- 2 files changed, 50 insertions(+), 47 deletions(-)
diff --git a/testbot/lib/WineTestBot/Patches.pm b/testbot/lib/WineTestBot/Patches.pm index 6af51d7655..2b52f4baff 100644 --- a/testbot/lib/WineTestBot/Patches.pm +++ b/testbot/lib/WineTestBot/Patches.pm @@ -110,6 +110,31 @@ sub FromSubmission($$) $self->Disposition("Processing"); }
+sub ParseSubject($) +{ + my ($self) = @_; + + my $Title = $self->Subject; + $Title =~ s/32/64//; + $Title =~ s/64/32//; + + my $SubjectInfo; + if ($Title =~ s~[[(](\d+)/(\d+)[])]~~ or + $Title =~ s~\b(\d+)/(\d+)\b~~) + { + $SubjectInfo->{PartNo} = int($1); + $SubjectInfo->{MaxPartNo} = int($2); + } + + $Title =~ s/[PATCH[^]]*]//i; + $Title =~ s/\s+/ /g; + $Title =~ s/^\s//; + $Title =~ s/\s$//; + $SubjectInfo->{Title} = $Title; + + return $SubjectInfo; +} +
=pod =over 12 @@ -129,22 +154,23 @@ WineTestBot::PendingPatchSet::SubmitSubset(). =back =cut
-sub Submit($$$) +sub Submit($$;$) { - my ($self, $PatchFileName, $IsSet) = @_; + my ($self, $PatchFileName, $SubjectInfo) = @_;
+ $SubjectInfo ||= $self->ParseSubject(); my $Impacts = GetPatchImpacts($PatchFileName); if (!$Impacts->{PatchedRoot} and !$Impacts->{PatchedModules} and !$Impacts->{PatchedTests}) { if ($Impacts->{IsWinePatch}) { - $self->Disposition(($IsSet ? "Part does" : "Does") + $self->Disposition(($SubjectInfo->{PartNo} ? "Part does" : "Does") ." not impact the Wine build"); } else { - $self->Disposition(($IsSet ? "Part is not" : "Not") ." a Wine patch"); + $self->Disposition(($SubjectInfo->{PartNo} ? "Part is not" : "Not") ." a Wine patch"); } return undef; } @@ -155,12 +181,8 @@ sub Submit($$$) my $Priority = 5; $NewJob->Priority($Priority); my $PropertyDescriptor = $Jobs->GetPropertyDescriptorByName("Remarks"); - my $Subject = $self->Subject; - $Subject =~ s/[PATCH[^]]*]//i; - $Subject =~ s/[[(]?\d+/\d+[)]]?//; - $Subject =~ s/^\s*//; - $NewJob->Remarks(substr("[$PatchesMailingList] " . $Subject, 0, - $PropertyDescriptor->GetMaxLength())); + my $Remarks = "[$PatchesMailingList] $SubjectInfo->{Title}"; + $NewJob->Remarks(substr($Remarks, 0, $PropertyDescriptor->GetMaxLength())); $NewJob->Patch($self);
my $User; @@ -301,7 +323,7 @@ sub Submit($$$) } else { - $self->Disposition(($IsSet ? "Part does" : "Does") ." not impact the ". + $self->Disposition(($SubjectInfo->{PartNo} ? "Part does" : "Does") ." not impact the ". ($WineVMs->IsEmpty() ? "Windows " : "") ."tests"); } return undef; @@ -464,28 +486,15 @@ sub NewPatch($$$) my $ErrMessage; if (scalar(@PatchBodies) == 1) { - my $Subject = $Patch->Subject; - $Subject =~ s/32/64//; - $Subject =~ s/64/32//; - if ($Subject =~ m/\d+/\d+/) - { - $Patch->Disposition("Checking series"); - (my $_ErrKey, my $_ErrProperty, $ErrMessage) = $self->Save(); - link($PatchBodies[0]->path, "$DataDir/patches/" . $Patch->Id); - if (! defined($ErrMessage)) - { - $ErrMessage = CreatePendingPatchSets()->NewSubmission($Patch); - } - } - else + my $SubjectInfo = $Patch->ParseSubject(); + $Patch->Disposition($SubjectInfo->{PartNo} ? "Checking series" : "Checking patch"); + (my $_ErrKey, my $_ErrProperty, $ErrMessage) = $self->Save(); + link($PatchBodies[0]->path, "$DataDir/patches/" . $Patch->Id); + if (!defined $ErrMessage) { - $Patch->Disposition("Checking patch"); - (my $_ErrKey, my $_ErrProperty, $ErrMessage) = $self->Save(); - link($PatchBodies[0]->path, "$DataDir/patches/" . $Patch->Id); - if (! defined($ErrMessage)) - { - $ErrMessage = $Patch->Submit($PatchBodies[0]->path, !1); - } + $ErrMessage = $SubjectInfo->{PartNo} ? + CreatePendingPatchSets()->NewSubmission($Patch, $SubjectInfo) : + $Patch->Submit($PatchBodies[0]->path, $SubjectInfo); } } elsif (scalar(@PatchBodies) == 0) diff --git a/testbot/lib/WineTestBot/PendingPatchSets.pm b/testbot/lib/WineTestBot/PendingPatchSets.pm index 53395130e7..adabf2e6c1 100644 --- a/testbot/lib/WineTestBot/PendingPatchSets.pm +++ b/testbot/lib/WineTestBot/PendingPatchSets.pm @@ -136,7 +136,7 @@ sub SubmitSubset($$$)
if (!defined $ErrMessage) { - $ErrMessage = $FinalPatch->Submit($CombinedFileName, 1); + $ErrMessage = $FinalPatch->Submit($CombinedFileName); } unlink($CombinedFileName);
@@ -224,36 +224,29 @@ makes the patchset complete, then the patchset itself is deleted. =back =cut
-sub NewSubmission($$) +sub NewSubmission($$$) { - my ($self, $Patch) = @_; + my ($self, $Patch, $SubjectInfo) = @_; if (! defined($Patch->FromEMail)) { $Patch->Disposition("Unable to determine series author"); return undef; }
- my $Subject = $Patch->Subject; - $Subject =~ s/32/64//; - $Subject =~ s/64/32//; - $Subject =~ m/(\d+)/(\d+)/; - my $PartNo = int($1); - my $MaxPartNo = int($2); - - my $Set = $self->GetItem($self->CombineKey($Patch->FromEMail, $MaxPartNo)); + my $Set = $self->GetItem($self->CombineKey($Patch->FromEMail, $SubjectInfo->{MaxPartNo})); if (! defined($Set)) { $Set = $self->Add(); $Set->EMail($Patch->FromEMail); - $Set->TotalParts($MaxPartNo); + $Set->TotalParts($SubjectInfo->{MaxPartNo}); }
my $Parts = $Set->Parts; - my $Part = $Parts->GetItem($PartNo); + my $Part = $Parts->GetItem($SubjectInfo->{PartNo}); if (! defined($Part)) { $Part = $Parts->Add(); - $Part->No($PartNo); + $Part->No($SubjectInfo->{PartNo}); }
$Part->Patch($Patch); @@ -264,12 +257,13 @@ sub NewSubmission($$) $Patch->Disposition("Error occurred during series processing"); }
- if (! $Set->CheckSubsetComplete($PartNo)) + if (! $Set->CheckSubsetComplete($SubjectInfo->{PartNo})) { $Patch->Disposition("Set not complete yet"); } else { + my $PartNo = $SubjectInfo->{PartNo}; my $AllPartsAvailable = 1; while ($PartNo <= $Set->TotalParts && $AllPartsAvailable && ! defined($ErrMessage))