Class: Soba::Services::GitWorkspaceManager

Inherits:
Object
  • Object
show all
Defined in:
lib/soba/services/git_workspace_manager.rb

Defined Under Namespace

Classes: GitOperationError

Instance Method Summary collapse

Constructor Details

#initialize(configuration: nil) ⇒ GitWorkspaceManager

Returns a new instance of GitWorkspaceManager.



12
13
14
# File 'lib/soba/services/git_workspace_manager.rb', line 12

def initialize(configuration: nil)
  @configuration = configuration || Soba::Configuration
end

Instance Method Details

#cleanup_workspace(issue_number) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/soba/services/git_workspace_manager.rb', line 35

def cleanup_workspace(issue_number)
  worktree_path = worktree_path(issue_number)

  # worktreeが存在しない場合はスキップ
  unless Dir.exist?(worktree_path)
    puts "Worktree does not exist at #{worktree_path}, skipping cleanup"
    return true
  end

  # worktreeを削除
  remove_worktree(worktree_path)

  true
end

#get_worktree_path(issue_number) ⇒ Object



50
51
52
53
# File 'lib/soba/services/git_workspace_manager.rb', line 50

def get_worktree_path(issue_number)
  path = worktree_path(issue_number)
  Dir.exist?(path) ? path : nil
end

#setup_workspace(issue_number) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/soba/services/git_workspace_manager.rb', line 16

def setup_workspace(issue_number)
  worktree_path = worktree_path(issue_number)
  branch_name = branch_name(issue_number)

  # 既存のworktreeが存在する場合はスキップ
  if Dir.exist?(worktree_path)
    puts "Worktree already exists at #{worktree_path}, skipping setup"
    return true
  end

  # worktreeディレクトリを作成
  FileUtils.mkdir_p(@configuration.config.git.worktree_base_path)

  # worktreeを作成
  create_worktree(worktree_path, branch_name)

  true
end

#update_main_branchObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/soba/services/git_workspace_manager.rb', line 55

def update_main_branch
  # git fetch origin
  _, stderr, status = Open3.capture3('git fetch origin')
  unless status.success?
    raise GitOperationError, "Failed to fetch from origin: #{stderr}"
  end

  # git checkout main
  _, stderr, status = Open3.capture3('git checkout main')
  unless status.success?
    raise GitOperationError, "Failed to checkout main branch: #{stderr}"
  end

  # git pull origin main
  _, stderr, status = Open3.capture3('git pull origin main')
  unless status.success?
    raise GitOperationError, "Failed to pull latest changes from main: #{stderr}"
  end
end