From 4fcedfff25a74d303f62d0a7ee3e09f170103231 Mon Sep 17 00:00:00 2001 From: Vokhmin Alexey V Date: Thu, 10 Jan 2013 16:30:18 +0400 Subject: [PATCH] #780: add rake task for updating packages --- lib/tasks/new_core.rake | 54 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/lib/tasks/new_core.rake b/lib/tasks/new_core.rake index 953e1b251..bbfa37f54 100644 --- a/lib/tasks/new_core.rake +++ b/lib/tasks/new_core.rake @@ -34,7 +34,7 @@ namespace :new_core do sha1 = bl.results.find{ |r| r['file_name'] =~ /.*\.tar\.gz$/ }['sha1'] - system "cd #{platform_repository_folder} && curl -L -O http://file-store.rosalinux.ru/api/v1/file_stores/#{sha1}" + system "cd #{platform_repository_folder} && curl -L -O #{APP_CONFIG['file_store_url']}/api/v1/file_stores/#{sha1}" system "cd #{platform_repository_folder} && tar -xzf #{sha1}" system "rm -f #{platform_repository_folder}/#{sha1}" @@ -54,4 +54,56 @@ namespace :new_core do say "[#{Time.zone.now}] done" end + desc 'Extracts all rpms from BuildList container and updates BuildList::Package#sha1 field' + task :update_packages => :environment do + say "[#{Time.zone.now}] Starting to extract rpms..." + + token = User.find_by_uname('rosa_system').authentication_token + BuildList.where(:new_core => true). + where(:status => [ + BuildServer::SUCCESS, + BuildList::FAILED_PUBLISH, + BuildList::BUILD_PUBLISHED, + BuildList::BUILD_PUBLISH + ]). + order(:id). + find_in_batches(:batch_size => 1) do | bls | + + bl = bls.first + puts "[#{Time.zone.now}] - where build_lists.id #{bl.id}" + + sha1 = bl.results.find{ |r| r['file_name'] =~ /.*\.tar\.gz$/ }['sha1'] + next unless sha1 + dir = Dir.mktmpdir('update-packages-', "#{APP_CONFIG['root_path']}") + begin + system "cd #{dir} && curl -L -O #{APP_CONFIG['file_store_url']}/api/v1/file_stores/#{sha1}" + system "cd #{dir} && tar -xzf #{sha1}" + system "rm -f #{dir}/#{sha1}" + + extract_rpms_and_update_package("#{dir}/archives/SRC_RPM", bl, 'source', token) + extract_rpms_and_update_package("#{dir}/archives/RPM", bl, 'binary', token) + ensure + # remove the directory. + FileUtils.remove_entry_secure dir + end + end + + say "[#{Time.zone.now}] done" + end + + def extract_rpms_and_update_package(dir, bl, package_type, token) + Dir.glob("#{dir}/*.rpm") do |rpm_file| + fullname = File.basename rpm_file + package = bl.packages.by_package_type(package_type). + find{ |p| p.fullname == fullname } + next unless package + + package.sha1 = Digest::SHA1.file(rpm_file).hexdigest + if %x[ curl #{APP_CONFIG['file_store_url']}/api/v1/file_stores.json?hash=#{sha1} ] == '[]' + system "curl --user #{token}: -POST -F 'file_store[file]=@#{rpm_file}' #{APP_CONFIG['file_store_url']}/api/v1/upload" + end + package.save! + end + end + end \ No newline at end of file