Francois Gouget : testbot/build: Prepare for having multiple way to update addons.

Alexandre Julliard julliard at winehq.org
Thu Apr 23 14:40:09 CDT 2020


Module: tools
Branch: master
Commit: 66cca7b09689d2b05bf9a31c07444dccde64b330
URL:    https://source.winehq.org/git/tools.git/?a=commit;h=66cca7b09689d2b05bf9a31c07444dccde64b330

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Thu Apr 23 15:04:23 2020 +0200

testbot/build: Prepare for having multiple way to update addons.

Check whether the addon needs to be updated before any update method
is called. Since _IsAddOnBad() needs all the information required to
locate the addon it now stores it in the architecture-specific structure
for reuse by the update methods such as _UpdateMSIAddOn().

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 testbot/lib/Build/Utils.pm | 77 ++++++++++++++++++++++++++++------------------
 1 file changed, 47 insertions(+), 30 deletions(-)

diff --git a/testbot/lib/Build/Utils.pm b/testbot/lib/Build/Utils.pm
index 17addee..a6d38fc 100644
--- a/testbot/lib/Build/Utils.pm
+++ b/testbot/lib/Build/Utils.pm
@@ -1,5 +1,5 @@
 # -*- Mode: Perl; perl-indent-level: 2; indent-tabs-mode: nil -*-
-# Copyright 2018 Francois Gouget
+# Copyright 2018-2020 Francois Gouget
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -360,23 +360,56 @@ sub BuildWine($$$$;$)
 # Wine addons updates
 #
 
+my $ADDONS_URL = "http://dl.winehq.org/wine";
+
 sub _IsAddOnBad($$)
 {
   my ($AddOn, $Arch) = @_;
 
+  my $AddOnArch = $AddOn->{$Arch};
+  if (!$AddOnArch->{msifile})
+  {
+    $AddOn->{basedir} = "$DataDir/$AddOn->{name}";
+    my $Basename = "wine-$AddOn->{name}-$AddOn->{version}";
+    my $ArchSuffix = $Arch eq "" ? "" : "-$Arch";
+    $AddOnArch->{msifile} = "$Basename$ArchSuffix.msi";
+    mkdir "$AddOn->{basedir}";
+  }
+
   my $Sha256 = Digest::SHA->new(256);
-  eval { $Sha256->addfile("$DataDir/$AddOn->{name}/$AddOn->{filename}") };
+  eval { $Sha256->addfile("$AddOn->{basedir}/$AddOnArch->{msifile}") };
   return "$@" if ($@);
 
   my $Checksum = $Sha256->hexdigest();
-  return undef if ($Checksum eq $AddOn->{$Arch});
-  return "Bad checksum for '$AddOn->{filename}'";
+  return undef if ($Checksum eq $AddOnArch->{checksum});
+  return "Bad checksum for '$AddOnArch->{msifile}'";
+}
+
+sub _UpdateMSIAddOn($$)
+{
+  my ($AddOn, $Arch) = @_;
+
+  my $AddOnArch = $AddOn->{$Arch};
+  InfoMsg "Downloading $AddOnArch->{msifile}\n";
+  my $Url="$ADDONS_URL/wine-$AddOn->{name}/$AddOn->{version}/$AddOnArch->{msifile}";
+  my $ErrMessage;
+  for (1..3)
+  {
+    system("cd '$AddOn->{basedir}' && set -x && ".
+           "wget --no-verbose -O- '$Url' >'$AddOnArch->{msifile}'");
+    $ErrMessage = _IsAddOnBad($AddOn, $Arch);
+    return 1 if (!defined $ErrMessage);
+    unlink "$AddOn->{basedir}/$AddOnArch->{msifile}";
+  }
+  LogMsg "$ErrMessage\n";
+  return 0;
 }
 
 sub _UpdateAddOn($$$)
 {
-  my ($AddOn, $Name, $Arch) = @_;
+  my ($AddOns, $Name, $Arch) = @_;
 
+  my $AddOn = $AddOns->{$Name};
   if (!defined $AddOn)
   {
     LogMsg "Could not get information on the $Name addon\n";
@@ -389,33 +422,17 @@ sub _UpdateAddOn($$$)
   }
   if (!$AddOn->{$Arch})
   {
-    LogMsg "Could not get the $Name $Arch checksum\n";
+    LogMsg "Could not get the $Name $Arch MSI checksum\n";
     return 0;
   }
 
-  $AddOn->{filename} = "wine-$Name-$AddOn->{version}".
-                       ($Arch eq "" ? "" : "-$Arch") .".msi";
   return 1 if (!_IsAddOnBad($AddOn, $Arch));
-
-  InfoMsg "Downloading $AddOn->{filename}\n";
-  mkdir "$DataDir/$Name";
-
-  my $Url="http://dl.winehq.org/wine/wine-$Name/$AddOn->{version}/$AddOn->{filename}";
-  for (1..3)
-  {
-    system("cd '$DataDir/$Name' && set -x && ".
-           "wget --no-verbose -O- '$Url' >'$AddOn->{filename}'");
-    last if ($? == 0);
-  }
-  my $ErrMessage = _IsAddOnBad($AddOn, $Arch);
-  return 1 if (!defined $ErrMessage);
-  LogMsg "$ErrMessage\n";
-  return 0;
+  return _UpdateMSIAddOn($AddOn, $Arch);
 }
 
 sub UpdateAddOns()
 {
-  my %AddOns;
+  my $AddOns;
   my $AddonSrc = "wine/dlls/appwiz.cpl/addons.c";
   if (open(my $fh, "<", "$DataDir/$AddonSrc"))
   {
@@ -434,14 +451,14 @@ sub UpdateAddOns()
       {
         my ($AddOn, $Version) = ($1, $2);
         $AddOn =~ tr/A-Z/a-z/;
-        $AddOns{$AddOn}->{name} = $AddOn;
-        $AddOns{$AddOn}->{version} = $Version;
+        $AddOns->{$AddOn}->{name} = $AddOn;
+        $AddOns->{$AddOn}->{version} = $Version;
       }
       elsif ($Line =~ /^\s*#\s*define\s*(GECKO|MONO)_SHA\s*"([^"]+)"/)
       {
         my ($AddOn, $Checksum) = ($1, $2);
         $AddOn =~ tr/A-Z/a-z/;
-        $AddOns{$AddOn}->{$Arch} = $Checksum;
+        $AddOns->{$AddOn}->{$Arch}->{checksum} = $Checksum;
         $Arch = "";
       }
     }
@@ -453,9 +470,9 @@ sub UpdateAddOns()
     return 0;
   }
 
-  return _UpdateAddOn($AddOns{gecko}, "gecko", "x86") &&
-         _UpdateAddOn($AddOns{gecko}, "gecko", "x86_64") &&
-         _UpdateAddOn($AddOns{mono},  "mono",  "x86");
+  return _UpdateAddOn($AddOns, "gecko", "x86") &&
+         _UpdateAddOn($AddOns, "gecko", "x86_64") &&
+         _UpdateAddOn($AddOns, "mono",  "x86");
 }
 
 




More information about the wine-cvs mailing list