[tor-commits] [tor-browser-build/master] Bug 27178: add support for xz compression in mar files

gk at torproject.org gk at torproject.org
Fri Aug 17 08:23:00 UTC 2018


commit 93acbf12b01c83facfb6fb023ceff10d9f601b98
Author: Nicolas Vigier <boklm at torproject.org>
Date:   Fri Aug 17 09:35:25 2018 +0200

    Bug 27178: add support for xz compression in mar files
    
    Add the option `mar_compression` to update_responses_config.yml to
    select the compression format used in the mar files.
    
    Currently we are using bzip2 for the previous alpha, xz for the new
    alpha, and bzip2 for both the previous and new stable.
---
 projects/release/update_responses_config.yml |  4 ++++
 tools/update-responses/update_responses      | 27 +++++++++++++++++++--------
 2 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/projects/release/update_responses_config.yml b/projects/release/update_responses_config.yml
index 3f7ff41..90fbc3a 100644
--- a/projects/release/update_responses_config.yml
+++ b/projects/release/update_responses_config.yml
@@ -47,6 +47,10 @@ versions:
             minSupportedOSVersion: 6.1
         win64:
             minSupportedOSVersion: 6.1
+[% IF ! c("var/release") -%]
+        mar_compression: xz
+[% END -%]
+mar_compression: bzip2
 htaccess_rewrite_rules:
     alpha: |
         # bug 26569: Redirect pre-8.0a9 alpha users to a separate update directory
diff --git a/tools/update-responses/update_responses b/tools/update-responses/update_responses
index 3295808..59cd2ef 100755
--- a/tools/update-responses/update_responses
+++ b/tools/update-responses/update_responses
@@ -154,19 +154,24 @@ sub get_version_downloads {
 }
 
 sub extract_mar {
-    my ($mar_file, $dest_dir) = @_;
+    my ($mar_file, $dest_dir, $compression) = @_;
     my $old_cwd = getcwd;
     mkdir $dest_dir;
     chdir $dest_dir or exit_error "Cannot enter $dest_dir";
     my $res = system('mar', '-x', $mar_file);
     exit_error "Error extracting $mar_file" if $res;
-    my $bunzip_file = sub {
+    if ($compression ne 'bzip2' && $compression ne 'xz') {
+        exit_error "Unknown compression format $compression";
+    }
+    my $compr_ext = $compression eq 'bzip2' ? 'bz2' : 'xz';
+    my $compr_cmd = $compression eq 'bzip2' ? 'bunzip2' : 'unxz';
+    my $uncompress_file = sub {
         return unless -f $File::Find::name;
-        rename $File::Find::name, "$File::Find::name.bz2";
-        system('bunzip2', "$File::Find::name.bz2") == 0
+        rename $File::Find::name, "$File::Find::name.$compr_ext";
+        system($compr_cmd, "$File::Find::name.$compr_ext") == 0
                 || exit_error "Error decompressing $File::Find::name";
     };
-    find($bunzip_file, $dest_dir);
+    find($uncompress_file, $dest_dir);
     my $manifest = -f 'updatev3.manifest' ? 'updatev3.manifest'
                         : 'updatev2.manifest';
     my @lines = read_file($manifest) if -f $manifest;
@@ -208,8 +213,12 @@ sub create_incremental_mar {
     };
     return if $pm->start($finished_file);
     my $tmpdir = get_tmpdir($config);
-    extract_mar(mar_filename($config, $appname, $from_version, $os, $lang), "$tmpdir/A");
-    extract_mar(mar_filename($config, $appname, $new_version, $os, $lang), "$tmpdir/B");
+    my $mar_c_from = get_config($config, $from_version, $os, 'mar_compression');
+    my $mar_c_new = get_config($config, $new_version, $os, 'mar_compression');
+    extract_mar(mar_filename($config, $appname, $from_version, $os, $lang),
+                "$tmpdir/A", $mar_c_from);
+    extract_mar(mar_filename($config, $appname, $new_version, $os, $lang),
+                "$tmpdir/B", $mar_c_new);
     # bug 26054: make sure previous macOS version is code signed
     if (($os eq 'osx64') && ! -f "$tmpdir/A/Contents/_CodeSignature/CodeResources") {
         exit_error "Missing code signature in $from_version while creating $mar_file";
@@ -279,9 +288,11 @@ sub get_buildinfos {
         foreach my $lang (keys %{$files->{$os}}) {
             next unless $files->{$os}{$lang}{complete};
             my $tmpdir = get_tmpdir($config);
+            my $mar_compression = get_config($config, $version, $os, 'mar_compression');
             extract_mar(
                 mar_filename($config, $config->{appname_marfile}, $version, $os, $lang),
-                "$tmpdir");
+                "$tmpdir",
+                $mar_compression);
             my $appfile = "$tmpdir/application.ini" if -f "$tmpdir/application.ini";
             $appfile = "$tmpdir/Contents/Resources/application.ini"
                                 if -f "$tmpdir/Contents/Resources/application.ini";



More information about the tor-commits mailing list