[tools 4/4] testbot/build: Add support for shared Gecko and Mono installs.
Francois Gouget
fgouget at codeweavers.com
Thu Apr 23 08:04:27 CDT 2020
This adds the _UpdateSharedAddOn() method and only calls
_UpdateMSIAddOn() as a fallback.
This also updates _IsAddOnBad() to check for the presence of the shared
install so the addon is not updated if it is present in either the
shared install or MSI form. _IsAddOnBad() also stores the information
needed to locate and update the addon for use by the update methods.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
testbot/lib/Build/Utils.pm | 53 +++++++++++++++++++++++++++++++++++++-
1 file changed, 52 insertions(+), 1 deletion(-)
diff --git a/testbot/lib/Build/Utils.pm b/testbot/lib/Build/Utils.pm
index a6d38fc7f5..aa786183b5 100644
--- a/testbot/lib/Build/Utils.pm
+++ b/testbot/lib/Build/Utils.pm
@@ -373,9 +373,14 @@ sub _IsAddOnBad($$)
my $Basename = "wine-$AddOn->{name}-$AddOn->{version}";
my $ArchSuffix = $Arch eq "" ? "" : "-$Arch";
$AddOnArch->{msifile} = "$Basename$ArchSuffix.msi";
+ $AddOnArch->{shareddir} = $Basename;
+ $AddOnArch->{shareddir} .= $ArchSuffix if ($AddOn->{name} ne "mono");
+ $AddOnArch->{basetar} = "$Basename$ArchSuffix";
mkdir "$AddOn->{basedir}";
}
+ return undef if (-d "$AddOn->{basedir}/$AddOnArch->{shareddir}");
+
my $Sha256 = Digest::SHA->new(256);
eval { $Sha256->addfile("$AddOn->{basedir}/$AddOnArch->{msifile}") };
return "$@" if ($@);
@@ -405,6 +410,52 @@ sub _UpdateMSIAddOn($$)
return 0;
}
+sub _UpdateSharedAddOn($$)
+{
+ my ($AddOn, $Arch) = @_;
+
+ my $AddOnArch = $AddOn->{$Arch};
+ InfoMsg "Downloading $AddOnArch->{basetar}\n";
+ my $ErrMessage;
+ for (1..3)
+ {
+ foreach my $Suffix (".tar.xz", ".tar.bz2")
+ {
+ my $Tarfile = "$AddOnArch->{basetar}$Suffix";
+ my $Url="$ADDONS_URL/wine-$AddOn->{name}/$AddOn->{version}/$Tarfile";
+ system("cd '$AddOn->{basedir}' && set -x && ".
+ "wget --no-verbose -O- '$Url' >'$Tarfile'");
+ if ($?)
+ {
+ unlink "$AddOn->{basedir}/$Tarfile";
+ $ErrMessage ||= "Could not download the $AddOnArch->{basetar}* archive";
+ }
+ else
+ {
+ my $Decompress = $Suffix eq ".tar.xz" ? "xz" : "bzip2";
+ system("cd '$AddOn->{basedir}' && set -x && ".
+ "$Decompress -c -d '$Tarfile' | tar xf -");
+ unlink "$AddOn->{basedir}/$Tarfile";
+ if ($?)
+ {
+ $ErrMessage = "Could not decompress '$Tarfile'";
+ }
+ elsif (!-d "$AddOn->{basedir}/$AddOnArch->{shareddir}")
+ {
+ $ErrMessage = "$Tarfile did not contain $AddOnArch->{shareddir}";
+ }
+ else
+ {
+ return 1; # Success!
+ }
+ }
+ }
+ }
+
+ LogMsg "$ErrMessage\n";
+ return 0;
+}
+
sub _UpdateAddOn($$$)
{
my ($AddOns, $Name, $Arch) = @_;
@@ -427,7 +478,7 @@ sub _UpdateAddOn($$$)
}
return 1 if (!_IsAddOnBad($AddOn, $Arch));
- return _UpdateMSIAddOn($AddOn, $Arch);
+ return _UpdateSharedAddOn($AddOn, $Arch) || _UpdateMSIAddOn($AddOn, $Arch);
}
sub UpdateAddOns()
--
2.20.1
More information about the wine-devel
mailing list