class YumS3Sync::RepoSyncer

Public Class Methods

new(source_base, target_bucket, target_base, keep = false, dry_run = false) click to toggle source
# File lib/yum_s3_sync/repo_syncer.rb, line 8
def initialize(source_base, target_bucket, target_base, keep = false, dry_run = false)
  @source_base = source_base
  @target_bucket = target_bucket
  @target_base = target_base
  @keep = keep
  @dry_run = dry_run
end

Public Instance Methods

sync() click to toggle source
# File lib/yum_s3_sync/repo_syncer.rb, line 16
def sync
  http_downloader = YumS3Sync::HTTPDownloader.new(@source_base)
  source_repository = YumS3Sync::YumRepository.new(http_downloader)

  s3_downloader = YumS3Sync::S3Downloader.new(@target_bucket, @target_base)
  dest_repository = YumS3Sync::YumRepository.new(s3_downloader)

  s3_uploader = YumS3Sync::S3Uploader.new(@target_bucket, @target_base, http_downloader, @dry_run)

  s3_file_lister = YumS3Sync::S3FileLister.new(@target_bucket, @target_base)
  s3_deleter = YumS3Sync::S3Deleter.new(@target_bucket, @target_base, @dry_run)

  new_packages = source_repository.compare(dest_repository)

  metadata = []
  new_metadata = false
  source_repository.metadata.each do |type, file|
    if !dest_repository.metadata[type] || dest_repository.metadata[type][:checksum] != file[:checksum]
      new_metadata = true
    end
      
    metadata.push file[:href]
  end

  new_packages.each do |package|
    s3_uploader.upload(package, @keep)
  end

  if !dest_repository.exists? || !new_packages.empty? || new_metadata
    metadata.each do |file|
      s3_uploader.upload(file, true)
    end
  end

  file_names = s3_file_lister.list

  puts "Locating removed files"
  file_names.each do |filename|
    if !source_repository.packages[filename] && !metadata.include?(filename)
      s3_deleter.delete(filename)
    end
  end

  puts "Locating missing files"
  source_repository.packages.each do |package, data|
    unless file_names.include? package
      s3_uploader.upload(package, true)
    end
  end

end