From ef9942fe994a219e75fe52e1a1d1098556a0d95a Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 4 Jan 2023 10:51:08 +0100 Subject: [PATCH] Move download functions into a module --- Rakefile | 29 ++++++++++++--- lib/download.rb | 84 +++++++++++++++++++++--------------------- rakelib/dmd_tools.rake | 2 +- 3 files changed, 67 insertions(+), 48 deletions(-) diff --git a/Rakefile b/Rakefile index a6e4e0b..b022fdc 100644 --- a/Rakefile +++ b/Rakefile @@ -30,7 +30,7 @@ task :composer, [:version] do |_, arguments| homepage: 'https://getcomposer.org/' uri = "https://getcomposer.org/download/#{arguments[:version]}/composer.phar" - checksum = download URI(uri), 'slackbuilds/development/composer/composer.phar' + checksum = SlackBuilder.download URI(uri), 'slackbuilds/development/composer/composer.phar' write_info package, downloads: [Download.new(uri, checksum.hexdigest)] update_slackbuild_version 'development/composer', arguments[:version] @@ -47,7 +47,7 @@ task 'universal-ctags', [:version] do |_, arguments| uri = "https://github.com/universal-ctags/ctags/archive/#{arguments[:version]}/ctags-#{arguments[:version]}.tar.gz" tarball = "slackbuilds/development/universal-ctags/ctags-#{arguments[:version]}.tar.gz" - checksum = download URI(uri), tarball + checksum = SlackBuilder.download URI(uri), tarball download = "https://download.dlackware.com/hosted-sources/universal-ctags/ctags-#{arguments[:version]}.tar.gz" write_info package, @@ -90,8 +90,8 @@ task :ioncube do '64' => URI("http://downloads3.ioncube.com/loader_downloads/#{tarball_name['64']}") } checksum = { - '32' => download(uri['32'], "slackbuilds/development/ioncube-loader/#{tarball_name['32']}").hexdigest, - '64' => download(uri['64'], "slackbuilds/development/ioncube-loader/#{tarball_name['64']}").hexdigest + '32' => SlackBuilder.download(uri['32'], "slackbuilds/development/ioncube-loader/#{tarball_name['32']}").hexdigest, + '64' => SlackBuilder.download(uri['64'], "slackbuilds/development/ioncube-loader/#{tarball_name['64']}").hexdigest } package = Package.new 'development/ioncube-loader', version: arguments[:version], @@ -110,7 +110,7 @@ end task :webex do tarball = 'slackbuilds/network/webex/Webex.deb' uri = 'https://binaries.webex.com/WebexDesktop-Ubuntu-Official-Package/Webex.deb' - checksum = download URI(uri), tarball + checksum = SlackBuilder.download URI(uri), tarball last_stdout, = Open3.pipeline_r ['ar', 'p', tarball, 'control.tar.gz'], ['tar', 'zxO', './control'] version = last_stdout.read.lines @@ -127,3 +127,22 @@ task :webex do update_slackbuild_version 'network/webex', package.version commit 'network/webex', package.version end + +task 'rdiff-backup', [:version] do |_, arguments| + raise 'Version is not specified.' unless arguments.key? :version + + package = Package.new 'system/rdiff-backup', + version: arguments[:version], + homepage: 'https://rdiff-backup.net/', + requires: ['librsync'] + + uri = "https://github.com/rdiff-backup/rdiff-backup/releases/download/v#{arguments[:version]}/rdiff-backup-#{arguments[:version]}.tar.gz" + tarball = "system/rdiff-backup/rdiff-backup-#{arguments[:version]}.tar.gz" + checksum = download_and_deploy URI(uri), tarball + download = "https://download.dlackware.com/hosted-sources/rdiff-backup/rdiff-backup-#{arguments[:version]}.tar.gz" + + write_info package, downloads: [Download.new(download, checksum)] + update_slackbuild_version 'system/rdiff-backup', arguments[:version] + + commit 'system/rdiff-backup', arguments[:version] +end diff --git a/lib/download.rb b/lib/download.rb index 308e8ee..64a453f 100644 --- a/lib/download.rb +++ b/lib/download.rb @@ -28,58 +28,58 @@ module SlackBuilder repository end -end -def write_chunk(response, checksum, progressbar, io) - response.read_body do |chunk| - progressbar.progress += chunk.length - io << chunk - checksum << chunk + def self.download(uri, target) + print Term::ANSIColor.green "Downloading #{uri} " + checksum = nil + + Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http| + checksum = start_download uri, target, http + end + + puts + checksum end -end -def write_download(target, response) - checksum = Digest::MD5.new - progressbar = ProgressBar.create title: target, total: response.header.content_length + private_class_method def self.redirect_download(location, target) + puts 'redirecting...' + new_location = URI location - File.open target, 'w' do |io| - write_chunk response, checksum, progressbar, io + download new_location, target end - progressbar.finish - checksum -end - -def redirect_download(location, target) - puts 'redirecting...' - new_location = URI location - - download new_location, target -end - -def start_download(uri, target, http) - request = Net::HTTP::Get.new uri - - http.request request do |response| - case response - when Net::HTTPRedirection - return redirect_download response['location'], target - else - return write_download target, response + private_class_method def self.write_chunk(response, checksum, progressbar, io) + response.read_body do |chunk| + progressbar.progress += chunk.length + io << chunk + checksum << chunk end end -end -def download(uri, target) - print Term::ANSIColor.green "Downloading #{uri} " - checksum = nil + private_class_method def self.write_download(target, response) + checksum = Digest::MD5.new + progressbar = ProgressBar.create title: target, total: response.header.content_length - Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http| - checksum = start_download uri, target, http + File.open target, 'w' do |io| + write_chunk response, checksum, progressbar, io + end + progressbar.finish + + checksum end - puts - checksum + private_class_method def self.start_download(uri, target, http) + request = Net::HTTP::Get.new uri + + http.request request do |response| + case response + when Net::HTTPRedirection + return redirect_download response['location'], target + else + return write_download target, response + end + end + end end def hosted_sources(absolute_url) @@ -135,10 +135,10 @@ def download_and_deploy(uri, tarball) if remote_file_exists?(remote_path) uri = URI hosted_sources(remote_path) - return download(uri, "slackbuilds/#{tarball}").hexdigest + return SlackBuilder.download(uri, "slackbuilds/#{tarball}").hexdigest end - checksum = download uri, "slackbuilds/#{tarball}" + checksum = SlackBuilder.download uri, "slackbuilds/#{tarball}" sh(*upload_command(tarball, remote_path)) checksum.hexdigest end diff --git a/rakelib/dmd_tools.rake b/rakelib/dmd_tools.rake index 3d98063..843e9fb 100644 --- a/rakelib/dmd_tools.rake +++ b/rakelib/dmd_tools.rake @@ -15,7 +15,7 @@ module SlackBuilder tarball_name = "dmd.#{version}.linux.tar.xz" uri = URI "http://downloads.dlang.org/releases/2.x/#{version}/#{tarball_name}" - checksum = download(uri, "slackbuilds/development/dmd/#{tarball_name}") + checksum = SlackBuilder.download(uri, "slackbuilds/development/dmd/#{tarball_name}") package = Package.new 'development/dmd', version: version, homepage: 'https://dlang.org'