Class: Ace::Overseer::Molecules::WorktreeProvisioner

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/overseer/molecules/worktree_provisioner.rb

Instance Method Summary collapse

Constructor Details

#initialize(manager: nil) ⇒ WorktreeProvisioner

Returns a new instance of WorktreeProvisioner.



7
8
9
# File 'lib/ace/overseer/molecules/worktree_provisioner.rb', line 7

def initialize(manager: nil)
  @manager = manager || Ace::Git::Worktree::Organisms::WorktreeManager.new
end

Instance Method Details

#provision(task_ref) ⇒ Object

Raises:



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/ace/overseer/molecules/worktree_provisioner.rb', line 11

def provision(task_ref)
  task_ref_str = task_ref.to_s
  switch_result = @manager.switch(task_ref_str)
  if switch_result[:success]
    return build_result(switch_result, created: false) if worktree_path_exists?(switch_result[:worktree_path])

    return recover_from_stale_worktree(task_ref_str, source: :switch, previous_result: switch_result)
  end

  create_result = @manager.create_task(task_ref_str)
  raise Error, create_result[:error] || "Failed to provision worktree for task #{task_ref}" unless create_result[:success]

  created = !create_result[:existing]
  return build_result(create_result, created: created) if worktree_path_exists?(create_result[:worktree_path])

  recover_from_stale_worktree(task_ref_str, source: :create_task, previous_result: create_result)
end