namespace :warp_engine do
namespace :shelves do desc "Bring every shelf in line with the catalog (DRY_RUN=1 only prints what would change)" task sync: :environment do dry_run = ENV["DRY_RUN"] == "1" shelves = WarpEngine::Shelves.validate! puts "No shelves configured." if shelves.empty? shelves.each do |shelf| result = WarpEngine::ShelfService.new(shelf).sync!(dry_run: dry_run) puts "#{shelf.describe} → #{shelf.directory}#{' (dry run)' if dry_run}" puts " #{result.entries.size} on the shelf" result.written.each { |entry| puts " write #{entry.file} #{entry.version}" } result.removed.each { |file| puts " remove #{file}" } puts " index #{result.index_changed ? 'rewritten' : 'unchanged'}" result.skipped.each { |skip| puts " skipped #{skip}" } end end desc "List what each shelf would hold and what it leaves out (STRICT=1 fails on anything left out)" task check: :environment do shelves = WarpEngine::Shelves.validate! puts "No shelves configured." if shelves.empty? skipped_total = 0 shelves.each do |shelf| entries, skipped = WarpEngine::ShelfService.new(shelf).plan skipped_total += skipped.size puts "#{shelf.describe} → #{shelf.directory}" shelf.urls.each { |url| puts " served #{url}" } entries.each { |entry| puts " ok #{entry.file.ljust(shelf.name_length)} #{entry.version} #{entry.software.name} (#{entry.kind})" } skipped.each { |skip| puts " skipped #{skip}" } end abort "\nSTRICT: #{skipped_total} software(s) left off a shelf." if ENV["STRICT"] == "1" && skipped_total.positive? end end
end