mirror of
https://codeberg.org/secana/Forji.git
synced 2026-06-16 05:13:55 -07:00
fix: don't open a duplicate PR when the reviewer request fails (#53)
This commit is contained in:
parent
4f6803cc03
commit
e9b6be91f5
1 changed files with 23 additions and 13 deletions
|
|
@ -20,6 +20,7 @@ struct PullRequestCreateView: View {
|
||||||
@State private var selectedMilestoneID: Int?
|
@State private var selectedMilestoneID: Int?
|
||||||
@State private var selectedAssigneeLogins: Set<String> = []
|
@State private var selectedAssigneeLogins: Set<String> = []
|
||||||
@State private var selectedReviewerLogins: Set<String> = []
|
@State private var selectedReviewerLogins: Set<String> = []
|
||||||
|
@State private var createdPRNumber: Int?
|
||||||
@Environment(\.dismiss) private var dismiss
|
@Environment(\.dismiss) private var dismiss
|
||||||
|
|
||||||
private let prService: PullRequestService?
|
private let prService: PullRequestService?
|
||||||
|
|
@ -175,24 +176,33 @@ struct PullRequestCreateView: View {
|
||||||
guard let prService else { return }
|
guard let prService else { return }
|
||||||
isSubmitting = true
|
isSubmitting = true
|
||||||
do {
|
do {
|
||||||
let trimmedBody = bodyText.trimmingCharacters(in: .whitespacesAndNewlines)
|
// Reuse the already-created PR on retry so a failed reviewer request
|
||||||
let createdPR = try await prService.createPullRequest(
|
// doesn't open a duplicate PR when the user taps Create again.
|
||||||
owner: owner,
|
let prNumber: Int
|
||||||
repo: repo,
|
if let existingNumber = createdPRNumber {
|
||||||
title: title.trimmingCharacters(in: .whitespacesAndNewlines),
|
prNumber = existingNumber
|
||||||
head: headBranch,
|
} else {
|
||||||
base: baseBranch,
|
let trimmedBody = bodyText.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
body: trimmedBody.isEmpty ? nil : trimmedBody,
|
let createdPR = try await prService.createPullRequest(
|
||||||
labels: selectedLabelIDs.isEmpty ? nil : Array(selectedLabelIDs),
|
owner: owner,
|
||||||
milestone: selectedMilestoneID,
|
repo: repo,
|
||||||
assignees: selectedAssigneeLogins.isEmpty ? nil : Array(selectedAssigneeLogins),
|
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 {
|
if !selectedReviewerLogins.isEmpty {
|
||||||
do {
|
do {
|
||||||
try await prService.requestReviewers(
|
try await prService.requestReviewers(
|
||||||
owner: owner,
|
owner: owner,
|
||||||
repo: repo,
|
repo: repo,
|
||||||
index: createdPR.number,
|
index: prNumber,
|
||||||
reviewers: Array(selectedReviewerLogins),
|
reviewers: Array(selectedReviewerLogins),
|
||||||
)
|
)
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue