brainiac-github 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a7a75791c3df9f85c5e2d545bbaa83bc496a7d6f88c34f38a84d73a5bcced59
4
- data.tar.gz: 896ba92478b7d36dbc9e99f71586c4c0fdb4e777a007e087412ccaf71b2cabdd
3
+ metadata.gz: 61c06c4b2537e0c675234514c9381b0797f96669401f108a5215f5f42a70b142
4
+ data.tar.gz: a7e2bfd0b3bd4ec8258131e31bd251a9d816a5cedd84742c8141449d161445ae
5
5
  SHA512:
6
- metadata.gz: eca03777383a673758eb035ea69ed5b604d6fe289486cd4cb5e943c93fb8e6c14a1057268ed68c5ee04adc5fc6744219734dd6756f70b60b00e4720269a28fd6
7
- data.tar.gz: 17fafeac99cfe179febe43424dd4bf791e199d226f6dc92022f5ce9f7643b151cdbe65698ef956d9794c2651eaff012d0f66395cfb296cf3b13b9dbf1664e0f0
6
+ metadata.gz: e01941e3c2e97832df1683b438cd1632cee50f9d9afaa91538c53bf55e4e438992f7567b17066e555fab22603ce3c56a8831af9332c8d57bb0117354951ff7c3
7
+ data.tar.gz: 9b51d89a994a1a9b4d072375f9a39011ddba50adbce000c11e598ce820900e2d052c577614f730c20a589036e821508d32ed58ecb31940b48095686efaa7ca25
@@ -192,6 +192,14 @@ module Brainiac
192
192
  LOG.info "[GitHub] PR ##{pr_number} assigned to remote agent #{work_item_agent} — skipping review dispatch"
193
193
  return [200, { status: "ignored", reason: "work item owned by remote agent" }.to_json]
194
194
  end
195
+ else
196
+ # No work item found — check if the PR's branch exists as a local worktree.
197
+ # This handles PRs opened manually (not through a card) where the worktree
198
+ # exists on only one machine. The machine that has the worktree should handle it.
199
+ unless branch_exists_locally?(repo_path, branch)
200
+ LOG.info "[GitHub] PR ##{pr_number} branch '#{branch}' not found locally — skipping review dispatch"
201
+ return [200, { status: "ignored", reason: "branch not on this machine" }.to_json]
202
+ end
195
203
  end
196
204
 
197
205
  card_key = "pr-review-#{repo_name.tr("/", "-")}-#{pr_number}"
@@ -396,6 +404,32 @@ module Brainiac
396
404
  local_agent_names.include?(agent_from_bot)
397
405
  end
398
406
 
407
+ # Check if a branch exists as a local worktree or local branch.
408
+ # Used to determine if this machine should handle a PR when there's no work item.
409
+ #
410
+ # @param repo_path [String] Path to the main repo
411
+ # @param branch [String] Branch name to check
412
+ # @return [Boolean] True if the branch exists locally
413
+ def branch_exists_locally?(repo_path, branch)
414
+ return false unless repo_path && File.directory?(repo_path)
415
+
416
+ # Check if branch exists in any local worktree
417
+ output, status = Open3.capture2("git", "worktree", "list", "--porcelain", chdir: repo_path)
418
+ return false unless status.success?
419
+
420
+ output.each_line do |line|
421
+ if line.start_with?("branch refs/heads/")
422
+ wt_branch = line.sub("branch refs/heads/", "").strip
423
+ return true if wt_branch == branch
424
+ end
425
+ end
426
+
427
+ # Also check if it's a local branch (not in a separate worktree)
428
+ _, status = Open3.capture2("git", "rev-parse", "--verify", "refs/heads/#{branch}",
429
+ chdir: repo_path, err: File::NULL)
430
+ status.success?
431
+ end
432
+
399
433
  # Extract a Brainiac agent display name from a GitHub bot login.
400
434
  # Bot logins follow the pattern "<name>-brainiac[bot]" or "<name>-brainiac".
401
435
  # Returns the matched agent display name, or nil if not a known agent bot.
@@ -3,7 +3,7 @@
3
3
  module Brainiac
4
4
  module Plugins
5
5
  module Github
6
- VERSION = "0.2.6"
6
+ VERSION = "0.2.7"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainiac-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Davis