class YumS3Sync::S3Uploader

Public Class Methods

new(bucket, prefix, downloader, dry_run = false) click to toggle source
# File lib/yum_s3_sync/s3_uploader.rb, line 5
def initialize(bucket, prefix, downloader, dry_run = false)
  @bucket = bucket
  @prefix = prefix
  @downloader = downloader
  @dry_run = dry_run
end

Public Instance Methods

upload(file, overwrite = false) click to toggle source
# File lib/yum_s3_sync/s3_uploader.rb, line 12
def upload(file, overwrite = false)
  retries = 0
  s3 = AWS::S3.new

  begin
    target = "#{@prefix}/#{file}"
    target.gsub!(/\/+/, '/')
    dest_obj = s3.buckets[@bucket].objects[target]

    if dest_obj.exists? && ! overwrite
      puts "Already exists: skipping #{@bucket}::#{target}" 
      return
    end

    source_file = @downloader.download(file)

    if @dry_run 
      puts "Dry-run: Uploading #{@bucket}::#{target}"
    else
      puts "Uploading #{@bucket}::#{target}"
      dest_obj.delete if dest_obj.exists?
      dest_obj.write(:file => source_file)
    end
  rescue StandardError => e
    if retries < 10
      retries += 1
      puts "Error uploading #{@bucket}::#{target} : #{e.message} retry ##{retries}"
      sleep(1)
      retry
    else
      puts "Error uploading #{@bucket}::#{target} : #{e.message} giving up"
      raise e
    end
  end
end