Class: Mamiya::Agent::Tasks::Switch

Inherits:
Notifyable show all
Defined in:
lib/mamiya/agent/tasks/switch.rb

Defined Under Namespace

Classes: PrereleaseMissing

Instance Attribute Summary

Attributes inherited from Abstract

#agent, #error, #logger, #task, #task_queue

Instance Method Summary collapse

Methods inherited from Abstract

#after, #before, #errored, identifier, #initialize, #raise_error?, #task_id

Constructor Details

This class inherits a constructor from Mamiya::Agent::Tasks::Abstract

Instance Method Details

#checkObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/mamiya/agent/tasks/switch.rb', line 17

def check
  return true if ignore_incompletion? && (prerelease_path.exist? || release_path.exist?)
  return true if prerelease_prepared?
  return true if release_prepared?

  unless package_path.exist?
    new_chain = ['prepare', 'switch'] + (task['_chain'] || [])
    logger.info "Package not fetched, enqueueing fetch task with #{new_chain.inspect}"
    task_queue.enqueue(
      :fetch,
      task.merge('_chain' => new_chain)
    )
    return false
  end

  unless prerelease_prepared?
    new_chain = ['switch'] + (task['_chain'] || [])
    logger.info "Package not prepared, enqueueing prepare task with #{new_chain.inspect}"
    task_queue.enqueue(
      :prepare,
      task.merge('_chain' => new_chain)
    )
    return false
  end

  true
end

#executeObject



12
13
14
15
# File 'lib/mamiya/agent/tasks/switch.rb', line 12

def execute
  return unless check
  super
end

#runObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/mamiya/agent/tasks/switch.rb', line 45

def run
  case
  when prerelease_prepared? && release_path.exist? && !release_path.join('.mamiya.prepared').exist?
    logger.info "Removing existing release (not prepared)"
    FileUtils.remove_entry_secure release_path
  when ignore_incompletion? && (prerelease_path.exist? || release_path.exist?)
    logger.warn "Using incomplete release or prereleases"
  when !prerelease_prepared? && prerelease_path.exist? && !release_path.join('.mamiya.prepared').exist?
    # this condition may be a bug
    logger.error "Existing release is not prepared but prerelease doesn't exist"
    raise PrereleaseMissing, "Existing release is not prepared but prerelease doesn't exist"
  end

  unless release_path.exist?
    logger.info "Copying #{prerelease_path} -> #{release_path}"
    FileUtils.cp_r prerelease_path, release_path
  end

  logger.info "Switching"
  switch_step.run!

  task_queue.enqueue(:clean, {})
end