summary refs log tree commit diff
path: root/pkgs/applications/networking/mailreaders/thunderbird-bin/generate_sources.rb
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/mailreaders/thunderbird-bin/generate_sources.rb')
-rw-r--r--pkgs/applications/networking/mailreaders/thunderbird-bin/generate_sources.rb68
1 files changed, 25 insertions, 43 deletions
diff --git a/pkgs/applications/networking/mailreaders/thunderbird-bin/generate_sources.rb b/pkgs/applications/networking/mailreaders/thunderbird-bin/generate_sources.rb
index 1bf623a4b77..07374a827f2 100644
--- a/pkgs/applications/networking/mailreaders/thunderbird-bin/generate_sources.rb
+++ b/pkgs/applications/networking/mailreaders/thunderbird-bin/generate_sources.rb
@@ -1,61 +1,43 @@
-version = if ARGV.empty?
-            "latest"
-          else
-            ARGV[0]
-          end
-
-base_path = "archive.mozilla.org/pub/thunderbird/releases"
-
-arches = ["linux-i686", "linux-x86_64"]
-
-arches.each do |arch|
-  system("wget", "--recursive", "--continue", "--no-parent", "--reject-regex", ".*\\?.*", "--reject", "xpi", "http://#{base_path}/#{version}/#{arch}/")
-end
-
-locales = Dir.glob("#{base_path}/#{version}/#{arches[0]}/*").map do |path|
-  File.basename(path)
-end.sort
-
-locales.delete("index.html")
-locales.delete("xpi")
-
-# real version number, e.g. "30.0" instead of "latest".
-real_version = Dir.glob("#{base_path}/#{version}/#{arches[0]}/#{locales[0]}/thunderbird-*")[0].match(/thunderbird-([0-9.]*)/)[1][0..-2]
-
-locale_arch_path_tuples = locales.flat_map do |locale|
-  arches.map do |arch|
-    path = Dir.glob("#{base_path}/#{version}/#{arch}/#{locale}/thunderbird-*")[0]
-
-    [locale, arch, path]
+require "open-uri"
+
+version =
+  if ARGV.empty?
+    $stderr.puts("Usage: ruby generate_sources.rb <version> > sources.nix")
+    exit(-1)
+  else
+    ARGV[0]
   end
-end
 
-paths = locale_arch_path_tuples.map do |tuple| tuple[2] end
+base_path = "http://archive.mozilla.org/pub/thunderbird/releases"
 
-hashes = IO.popen(["sha256sum", "--binary", *paths]) do |input|
-  input.each_line.map do |line|
-    $stderr.puts(line)
+Source = Struct.new(:hash, :arch, :locale, :filename)
 
-    line.match(/^[0-9a-f]*/)[0]
-  end
+sources = open("#{base_path}/#{version}/SHA512SUMS") do |input|
+  input.readlines
+end.select do |line|
+  /\/thunderbird-.*\.tar\.bz2$/ === line && !(/source/ === line)
+end.map do |line|
+  hash, name = line.chomp.split(/ +/)
+  Source.new(hash, *(name.split("/")))
+end.sort_by do |source|
+  [source.locale, source.arch]
 end
 
+arches = ["linux-i686", "linux-x86_64"]
 
 puts(<<"EOH")
 # This file is generated from generate_sources.rb. DO NOT EDIT.
-# Execute the following command in a temporary directory to update the file.
+# Execute the following command to update the file.
 #
-# ruby generate_sources.rb > sources.nix
+# ruby generate_sources.rb 45.1.0 > sources.nix
 
 {
-  version = "#{real_version}";
+  version = "#{version}";
   sources = [
 EOH
 
-locale_arch_path_tuples.zip(hashes) do |tuple, hash|
-  locale, arch, path = tuple
-
-  puts(%Q|    { locale = "#{locale}"; arch = "#{arch}"; sha256 = "#{hash}"; }|)
+sources.each do |source|
+  puts(%Q|    { locale = "#{source.locale}"; arch = "#{source.arch}"; sha512 = "#{source.hash}"; }|)
 end
 
 puts(<<'EOF')