summaryrefslogtreecommitdiffstats
path: root/tools/update-packaging/unwrap_full_update.pl
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xtools/update-packaging/unwrap_full_update.pl95
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/update-packaging/unwrap_full_update.pl b/tools/update-packaging/unwrap_full_update.pl
new file mode 100755
index 0000000000..ed17946b39
--- /dev/null
+++ b/tools/update-packaging/unwrap_full_update.pl
@@ -0,0 +1,95 @@
+#!/usr/bin/perl -w
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#
+# This tool unpacks a full update package generated by make_full_update.sh
+# Author: Benjamin Smedberg
+#
+
+# -----------------------------------------------------------------------------
+# By default just assume that these tools exist on our path
+
+use Getopt::Std;
+
+my ($MAR, $XZ, $archive, @marentries, @marfiles);
+
+if (defined($ENV{"MAR"})) {
+ $MAR = $ENV{"MAR"};
+}
+else {
+ $MAR = "mar";
+}
+
+if (defined($ENV{"XZ"})) {
+ $XZ = $ENV{"XZ"};
+}
+else {
+ if (system("xz --version > /dev/null 2>&1") != 0) {
+ # Some of the Windows build systems have xz.exe in topsrcdir/xz/.
+ my $xzwinpath = __FILE__;
+ $xzwinpath = substr($xzwinpath, 0, rindex($xzwinpath, '/'));
+ $xzwinpath = substr($xzwinpath, 0, rindex($xzwinpath, '/'));
+ $xzwinpath = substr($xzwinpath, 0, rindex($xzwinpath, '/'));
+ my $xzwin = $xzwinpath . "/xz/xz.exe";
+ if (-e $xzwin) {
+ $XZ = $xzwin;
+ }
+ else {
+ $xzwinpath = substr($xzwinpath, 0, rindex($xzwinpath, '/'));
+ $xzwin = $xzwinpath . "/xz/xz.exe";
+ if (-e $xzwin) {
+ $XZ = $xzwin;
+ }
+ else {
+ # If the xz executable was not found fallback to trying to execute
+ # xz and follow the normal failure path if it isn't found.
+ $XZ = "xz";
+ }
+ }
+ }
+ else {
+ $XZ = "xz";
+ }
+}
+
+sub print_usage
+{
+ print "Usage: unwrap_full_update.pl [OPTIONS] ARCHIVE\n\n";
+ print "The contents of ARCHIVE will be unpacked into the current directory.\n\n";
+ print "Options:\n";
+ print " -h show this help text\n";
+}
+
+my %opts;
+getopts("h", \%opts);
+
+if (defined($opts{'h'}) || scalar(@ARGV) != 1) {
+ print_usage();
+ exit 1;
+}
+
+$archive = $ARGV[0];
+@marentries = `"$MAR" -t "$archive"`;
+$? && die("Couldn't run \"$MAR\" -t");
+
+system($MAR, "-x", $archive) == 0 ||
+ die "Couldn't run $MAR -x";
+
+shift @marentries;
+
+foreach (@marentries) {
+ tr/\n\r//d;
+ my @splits = split(/\t/,$_);
+ my $file = $splits[2];
+
+ print "Decompressing: " . $file . "\n";
+ system("mv", $file, "$file.xz") == 0 ||
+ die "Couldn't mv \"$file\"";
+ system($XZ, "-d", "$file.xz") == 0 ||
+ die "Couldn't decompress \"$file\"";
+}
+
+print "Finished\n";
+