Class: Gemkeeper::GemSyncer

Inherits:
Object
  • Object
show all
Defined in:
lib/gemkeeper/gem_syncer.rb

Overview

Syncs a single gem: resolves version, checks cache, clones/pulls, builds, uploads.

Constant Summary collapse

AUTH_ERROR_PATTERNS =
[
  /authentication failed/i,
  /could not read from remote repository/i,
  /permission denied \(publickey\)/i,
  /repository not found/i,
  /fatal: credential/i
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(config, uploader, manifest:) ⇒ GemSyncer

Returns a new instance of GemSyncer.



14
15
16
17
18
# File 'lib/gemkeeper/gem_syncer.rb', line 14

def initialize(config, uploader, manifest:)
  @config = config
  @uploader = uploader
  @manifest = manifest
end

Instance Method Details

#sync(gem_def) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/gemkeeper/gem_syncer.rb', line 20

def sync(gem_def)
  repo_url = resolve_repo(gem_def)
  version = resolve_version(gem_def)
  name = gem_def.name
  gems_path = @config.gems_path

  return :skipped if !gem_def.latest? && cached?(name, version, gems_path)

  puts "Syncing #{name} @ #{version}..."
  local_path = File.join(@config.repos_path, name)
  repo = fetch_repo(repo_url, local_path)

  if gem_def.latest?
    version = latest_version!(repo, name, gems_path, repo_url)
    return :skipped unless version
  else
    Output.step("Checking out #{version}...")
    repo.checkout_version(version)
  end

  build_and_upload(local_path, gems_path)
  :synced
end