[tor-commits] [tor-browser-bundle/master] Bug 16551: generate a downloads.json file

gk at torproject.org gk at torproject.org
Tue Sep 8 08:56:12 UTC 2015


commit 3dd1fc4afa36266027a2785a443757b2c6c3d93d
Author: Nicolas Vigier <boklm at torproject.org>
Date:   Fri Aug 21 16:40:03 2015 +0200

    Bug 16551: generate a downloads.json file
---
 gitian/check-prerequisites.sh           |    2 +-
 tools/update-responses/README.md        |    6 ++---
 tools/update-responses/update_responses |   41 +++++++++++++++++++++++++++++++
 3 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/gitian/check-prerequisites.sh b/gitian/check-prerequisites.sh
index 8518ffe..32c9b7b 100755
--- a/gitian/check-prerequisites.sh
+++ b/gitian/check-prerequisites.sh
@@ -60,7 +60,7 @@ else
   exit 1
 fi
 
-update_responses_pkg="libyaml-perl libfile-slurp-perl libxml-writer-perl libio-captureoutput-perl libfile-which-perl libparallel-forkmanager-perl libxml-libxml-perl libwww-perl"
+update_responses_pkg="libyaml-perl libfile-slurp-perl libxml-writer-perl libio-captureoutput-perl libfile-which-perl libparallel-forkmanager-perl libxml-libxml-perl libwww-perl libjson-perl"
 missing_pkg=''
 for pkg in $update_responses_pkg
 do
diff --git a/tools/update-responses/README.md b/tools/update-responses/README.md
index 5fe69a2..5440b0d 100644
--- a/tools/update-responses/README.md
+++ b/tools/update-responses/README.md
@@ -14,7 +14,7 @@ Dependencies
 The following perl modules need to be installed to run the script:
   FindBin YAML File::Slurp Digest::SHA XML::Writer File::Temp
   IO::CaptureOutput File::Which Parallel::ForkManager XML::LibXML
-  LWP
+  LWP JSON
 
 On Debian / Ubuntu you can install them with:
 
@@ -23,7 +23,7 @@ On Debian / Ubuntu you can install them with:
                     libdigest-sha-perl libxml-writer-perl \
                     libio-captureoutput-perl libfile-which-perl \
                     libparallel-forkmanager-perl libxml-libxml-perl \
-                    libwww-perl
+                    libwww-perl libjson-perl
 ```
 
 On Red Hat / Fedora you can install them with:
@@ -31,7 +31,7 @@ On Red Hat / Fedora you can install them with:
 ```
   # for module in FindBin YAML File::Slurp Digest::SHA XML::Writer \
                   File::Temp IO::CaptureOutput File::Which \
-                  Parallel::ForkManager XML::LibXML LWP
+                  Parallel::ForkManager XML::LibXML LWP JSON
     do yum install "perl($module)"; done
 ```
 
diff --git a/tools/update-responses/update_responses b/tools/update-responses/update_responses
index b1b3331..72a19d7 100755
--- a/tools/update-responses/update_responses
+++ b/tools/update-responses/update_responses
@@ -19,6 +19,7 @@ use Parallel::ForkManager;
 use File::Basename;
 use XML::LibXML '1.70';
 use LWP::Simple;
+use JSON;
 
 # Set umask and locale to provide a consistent environment for MAR file
 # generation, etc.
@@ -109,6 +110,32 @@ sub get_version_files {
     $config->{versions}{$version}{files} = $files;
 }
 
+sub get_version_downloads {
+    my ($config, $version) = @_;
+    my $downloads = {};
+    my $vdir = "$releases_dir/$version";
+    opendir(my $d, $vdir) or exit_error "Error opening directory $vdir";
+    foreach my $file (readdir $d) {
+        next unless -f "$vdir/$file";
+        my ($os, $lang);
+        if ($file =~ m/^TorBrowser-$version-osx64_(.+).dmg$/) {
+            ($os, $lang) = ('osx64', $1);
+        } elsif ($file =~ m/^tor-browser-(linux32|linux64)-${version}_(.+).tar.xz$/) {
+            ($os, $lang) = ($1, $2);
+        } elsif ($file =~ m/^torbrowser-install-${version}_(.+).exe$/) {
+            ($os, $lang) = ('win32', $1);
+        } else {
+            next;
+        }
+        $downloads->{$os}{$lang} = {
+            binary => "$config->{versions}{$version}{download_url}/$file",
+            sig => "$config->{versions}{$version}{download_url}/$file.asc",
+        };
+    }
+    closedir $d;
+    $config->{versions}{$version}{downloads} = $downloads;
+}
+
 sub extract_mar {
     my ($mar_file, $dest_dir) = @_;
     my $old_cwd = getcwd;
@@ -301,6 +328,19 @@ sub write_htaccess {
     }
 }
 
+sub write_downloads_json {
+    my ($config, @channels) = @_;
+    @channels = keys %{$config->{channels}} unless @channels;
+    foreach my $channel (@channels) {
+        my $version = $config->{channels}{$channel};
+        my $data = {
+            version => $version,
+            downloads => get_version_downloads($config, $version),
+        };
+        write_htdocs($channel, 'downloads.json', encode_json($data));
+    }
+}
+
 sub check_deps {
     foreach my $bin (qw(bunzip2 mar mbsdiff make_incremental_update.sh)) {
         exit_error "Cannot find $bin in PATH" unless which($bin);
@@ -501,6 +541,7 @@ my %actions = (
         }
         write_responses($config, @channels);
         write_htaccess($config, @channels);
+        write_downloads_json($config, @channels);
         clean_htdocs(@channels);
     },
     gen_incrementals => sub {



More information about the tor-commits mailing list