Skip to content

Commit 9b1a782

Browse files
hsbtclaude
andcommitted
Fetch PR data once and allow whitespace after # in Redmine pattern
Address review feedback: extract the PR API call into the review method and pass it to review_non_fork_branch and review_redmine_links to avoid a duplicate API request. Also allow optional whitespace between # and the ticket number in the Redmine ticket pattern. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c888b75 commit 9b1a782

1 file changed

Lines changed: 6 additions & 7 deletions

File tree

tool/auto_review_pr.rb

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class AutoReviewPR
3838
UPSTREAM_COMMENT_PREFIX = 'The following files are maintained in the following upstream repositories:'
3939
UPSTREAM_COMMENT_SUFFIX = 'Please file a pull request to the above instead. Thank you!'
4040

41-
REDMINE_TICKET_PATTERN = /\[(Bug|Feature|Misc)\s*#(\d+)\]/
41+
REDMINE_TICKET_PATTERN = /\[(Bug|Feature|Misc)\s*#\s*(\d+)\]/
4242
REDMINE_COMMENT_PREFIX = 'This pull request references the following Redmine tickets:'
4343

4444
FORK_COMMENT_PREFIX = 'It looks like this pull request was filed from a branch in ruby/ruby.'
@@ -60,9 +60,10 @@ def initialize(client)
6060

6161
def review(pr_number)
6262
existing_comments = fetch_existing_comments(pr_number)
63-
review_non_fork_branch(pr_number, existing_comments)
63+
pr = @client.get("/repos/#{REPO}/pulls/#{pr_number}")
64+
review_non_fork_branch(pr_number, pr, existing_comments)
6465
review_upstream_repos(pr_number, existing_comments)
65-
review_redmine_links(pr_number, existing_comments)
66+
review_redmine_links(pr_number, pr, existing_comments)
6667
end
6768

6869
private
@@ -82,13 +83,12 @@ def post_comment(pr_number, comment)
8283
end
8384

8485
# Suggest re-filing from a fork if the PR branch is in ruby/ruby itself
85-
def review_non_fork_branch(pr_number, existing_comments)
86+
def review_non_fork_branch(pr_number, pr, existing_comments)
8687
if already_commented?(existing_comments, FORK_COMMENT_PREFIX)
8788
puts "Skipped: The PR ##{pr_number} already has a fork branch comment."
8889
return
8990
end
9091

91-
pr = @client.get("/repos/#{REPO}/pulls/#{pr_number}")
9292
head_repo = pr.dig(:head, :repo, :full_name)
9393
if head_repo != REPO
9494
puts "Skipped: The PR ##{pr_number} is already from a fork (#{head_repo})."
@@ -124,13 +124,12 @@ def review_upstream_repos(pr_number, existing_comments)
124124
post_comment(pr_number, format_upstream_comment(upstream_repos))
125125
end
126126

127-
def review_redmine_links(pr_number, existing_comments)
127+
def review_redmine_links(pr_number, pr, existing_comments)
128128
if already_commented?(existing_comments, REDMINE_COMMENT_PREFIX)
129129
puts "Skipped: The PR ##{pr_number} already has a Redmine links comment."
130130
return
131131
end
132132

133-
pr = @client.get("/repos/#{REPO}/pulls/#{pr_number}")
134133
text = "#{pr[:title]}\n#{pr[:body]}"
135134

136135
tickets = text.scan(REDMINE_TICKET_PATTERN).uniq

0 commit comments

Comments
 (0)