Class: Ocak::MergeManager
- Inherits:
-
Object
- Object
- Ocak::MergeManager
- Includes:
- CommandRunner
- Defined in:
- lib/ocak/merge_manager.rb
Instance Method Summary collapse
-
#create_pr_only(issue_number, worktree) ⇒ Object
Create a PR without merging (manual review mode).
-
#initialize(config:, claude:, logger:, issues:, watch: nil) ⇒ MergeManager
constructor
A new instance of MergeManager.
-
#merge(issue_number, worktree) ⇒ Object
Rebase, test, push, then let the merger agent create PR + merge + close issue.
Constructor Details
#initialize(config:, claude:, logger:, issues:, watch: nil) ⇒ MergeManager
Returns a new instance of MergeManager.
12 13 14 15 16 17 18 |
# File 'lib/ocak/merge_manager.rb', line 12 def initialize(config:, claude:, logger:, issues:, watch: nil) @config = config @claude = claude @logger = logger @issues = issues @watch = watch end |
Instance Method Details
#create_pr_only(issue_number, worktree) ⇒ Object
Create a PR without merging (manual review mode). Returns the PR number on success, nil on failure.
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ocak/merge_manager.rb', line 58 def create_pr_only(issue_number, worktree) @logger.info("Creating PR (manual review) for issue ##{issue_number}") commit_uncommitted_changes(issue_number, worktree) return log_and_nil("Rebase failed for issue ##{issue_number}") unless rebase_onto_main(worktree) return log_and_nil("Tests failed after rebase for issue ##{issue_number}") unless verify_tests(worktree) return log_and_nil("Push failed for issue ##{issue_number}") unless push_branch(worktree) open_pull_request(issue_number, worktree) end |
#merge(issue_number, worktree) ⇒ Object
Rebase, test, push, then let the merger agent create PR + merge + close issue.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ocak/merge_manager.rb', line 21 def merge(issue_number, worktree) @logger.info("Starting merge for issue ##{issue_number}") commit_uncommitted_changes(issue_number, worktree) unless rebase_onto_main(worktree) @logger.error("Rebase failed for issue ##{issue_number}") return false end unless verify_tests(worktree) @logger.error("Tests failed after rebase for issue ##{issue_number}") return false end unless push_branch(worktree) @logger.error("Push failed for issue ##{issue_number}") return false end result = @claude.run_agent( 'merger', "Create a PR, merge it, and close issue ##{issue_number}. Branch: #{worktree.branch}", chdir: worktree.path ) if result.success? @logger.info("Issue ##{issue_number} merged successfully") true else @logger.error("Merger agent failed for issue ##{issue_number}") false end end |