From 57cff79d1c800ef85c591f3633069886f938c187 Mon Sep 17 00:00:00 2001 From: Chris Beer Date: Wed, 27 Jun 2018 07:54:25 -0700 Subject: [PATCH] Allow download from arbitrary url --- lib/solr_wrapper/instance.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/solr_wrapper/instance.rb b/lib/solr_wrapper/instance.rb index 70b6726..bd809c2 100644 --- a/lib/solr_wrapper/instance.rb +++ b/lib/solr_wrapper/instance.rb @@ -256,9 +256,11 @@ def extract return config.instance_dir if extracted? zip_path = download + top_level_dir = nil begin Zip::File.open(zip_path) do |zip_file| + top_level_dir = guess_top_dir(zip_file) # Handle entries one by one zip_file.each do |entry| dest_file = File.join(config.tmp_save_dir, entry.name) @@ -273,7 +275,7 @@ def extract begin FileUtils.remove_dir(config.instance_dir, true) - FileUtils.cp_r File.join(config.tmp_save_dir, File.basename(config.download_url, ".zip")), config.instance_dir + FileUtils.cp_r File.join(config.tmp_save_dir, top_level_dir), config.instance_dir self.extracted_version = config.version FileUtils.chmod 0755, config.solr_binary rescue Exception => e @@ -292,6 +294,15 @@ def extracted? File.exist?(config.solr_binary) && extracted_version == config.version end + # Guess the name of the top level + # directory within the downloaded zip file + # (e.g. "solr-1.2.3"). + # Assumes there's only one such directory. + def guess_top_dir(zip_file) + dir = zip_file.entries.find { |e| e.name[/^[^\/]+[\/]?$/] } + dir.name.tr('/', '') + end + def download unless File.exist?(config.solr_zip_path) && checksum_validator.validate?(config.solr_zip_path) Downloader.fetch_with_progressbar config.download_url, config.solr_zip_path