fix: don't open a duplicate PR when the reviewer request fails (#53)

This commit is contained in:
systemBlue 2026-06-04 13:00:44 +02:00 committed by secana
parent 4f6803cc03
commit e9b6be91f5

View file

@ -20,6 +20,7 @@ struct PullRequestCreateView: View {
@State private var selectedMilestoneID: Int?
@State private var selectedAssigneeLogins: Set<String> = []
@State private var selectedReviewerLogins: Set<String> = []
@State private var createdPRNumber: Int?
@Environment(\.dismiss) private var dismiss
private let prService: PullRequestService?
@ -175,24 +176,33 @@ struct PullRequestCreateView: View {
guard let prService else { return }
isSubmitting = true
do {
let trimmedBody = bodyText.trimmingCharacters(in: .whitespacesAndNewlines)
let createdPR = try await prService.createPullRequest(
owner: owner,
repo: repo,
title: title.trimmingCharacters(in: .whitespacesAndNewlines),
head: headBranch,
base: baseBranch,
body: trimmedBody.isEmpty ? nil : trimmedBody,
labels: selectedLabelIDs.isEmpty ? nil : Array(selectedLabelIDs),
milestone: selectedMilestoneID,
assignees: selectedAssigneeLogins.isEmpty ? nil : Array(selectedAssigneeLogins),
)
// Reuse the already-created PR on retry so a failed reviewer request
// doesn't open a duplicate PR when the user taps Create again.
let prNumber: Int
if let existingNumber = createdPRNumber {
prNumber = existingNumber
} else {
let trimmedBody = bodyText.trimmingCharacters(in: .whitespacesAndNewlines)
let createdPR = try await prService.createPullRequest(
owner: owner,
repo: repo,
title: title.trimmingCharacters(in: .whitespacesAndNewlines),
head: headBranch,
base: baseBranch,
body: trimmedBody.isEmpty ? nil : trimmedBody,
labels: selectedLabelIDs.isEmpty ? nil : Array(selectedLabelIDs),
milestone: selectedMilestoneID,
assignees: selectedAssigneeLogins.isEmpty ? nil : Array(selectedAssigneeLogins),
)
createdPRNumber = createdPR.number
prNumber = createdPR.number
}
if !selectedReviewerLogins.isEmpty {
do {
try await prService.requestReviewers(
owner: owner,
repo: repo,
index: createdPR.number,
index: prNumber,
reviewers: Array(selectedReviewerLogins),
)
} catch {