Skip to content

Commit 6e787df

Browse files
committed
improve
1 parent e26a301 commit 6e787df

File tree

6 files changed

+39
-66
lines changed

6 files changed

+39
-66
lines changed

routers/api/v1/repo/issue.go

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -912,32 +912,11 @@ func EditIssue(ctx *context.APIContext) {
912912
}
913913
}
914914

915-
var closeOrReopen bool
916-
switch state := api.StateType(*form.State); state {
917-
case api.StateOpen:
918-
closeOrReopen = false
919-
case api.StateClosed:
920-
closeOrReopen = true
921-
default:
922-
ctx.Error(http.StatusPreconditionFailed, "UnknownIssueStateError", fmt.Sprintf("unknown state: %s", state))
915+
state := api.StateType(*form.State)
916+
closeOrReopenIssue(ctx, issue, state)
917+
if ctx.Written() {
923918
return
924919
}
925-
926-
if closeOrReopen && !issue.IsClosed {
927-
if err := issue_service.CloseIssue(ctx, issue, ctx.Doer, ""); err != nil {
928-
if issues_model.IsErrDependenciesLeft(err) {
929-
ctx.Error(http.StatusPreconditionFailed, "DependenciesLeft", "cannot close this issue because it still has open dependencies")
930-
return
931-
}
932-
ctx.Error(http.StatusInternalServerError, "CloseIssue", err)
933-
return
934-
}
935-
} else if !closeOrReopen && issue.IsClosed {
936-
if err := issue_service.ReopenIssue(ctx, issue, ctx.Doer, ""); err != nil {
937-
ctx.Error(http.StatusInternalServerError, "ReopenIssue", err)
938-
return
939-
}
940-
}
941920
}
942921

943922
// Refetch from database to assign some automatic values
@@ -1060,3 +1039,26 @@ func UpdateIssueDeadline(ctx *context.APIContext) {
10601039

10611040
ctx.JSON(http.StatusCreated, api.IssueDeadline{Deadline: deadlineUnix.AsTimePtr()})
10621041
}
1042+
1043+
func closeOrReopenIssue(ctx *context.APIContext, issue *issues_model.Issue, state api.StateType) {
1044+
if state != api.StateOpen && state != api.StateClosed {
1045+
ctx.Error(http.StatusPreconditionFailed, "UnknownIssueStateError", fmt.Sprintf("unknown state: %s", state))
1046+
return
1047+
}
1048+
1049+
if state == api.StateClosed && !issue.IsClosed {
1050+
if err := issue_service.CloseIssue(ctx, issue, ctx.Doer, ""); err != nil {
1051+
if issues_model.IsErrDependenciesLeft(err) {
1052+
ctx.Error(http.StatusPreconditionFailed, "DependenciesLeft", "cannot close this issue or pull request because it still has open dependencies")
1053+
return
1054+
}
1055+
ctx.Error(http.StatusInternalServerError, "CloseIssue", err)
1056+
return
1057+
}
1058+
} else if state == api.StateOpen && issue.IsClosed {
1059+
if err := issue_service.ReopenIssue(ctx, issue, ctx.Doer, ""); err != nil {
1060+
ctx.Error(http.StatusInternalServerError, "ReopenIssue", err)
1061+
return
1062+
}
1063+
}
1064+
}

routers/api/v1/repo/pull.go

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -753,32 +753,11 @@ func EditPullRequest(ctx *context.APIContext) {
753753
return
754754
}
755755

756-
var closeOrReopen bool
757-
switch state := api.StateType(*form.State); state {
758-
case api.StateOpen:
759-
closeOrReopen = false
760-
case api.StateClosed:
761-
closeOrReopen = true
762-
default:
763-
ctx.Error(http.StatusPreconditionFailed, "UnknownPRStateError", fmt.Sprintf("unknown state: %s", state))
756+
state := api.StateType(*form.State)
757+
closeOrReopenIssue(ctx, issue, state)
758+
if ctx.Written() {
764759
return
765760
}
766-
767-
if closeOrReopen && !issue.IsClosed {
768-
if err := issue_service.CloseIssue(ctx, issue, ctx.Doer, ""); err != nil {
769-
if issues_model.IsErrDependenciesLeft(err) {
770-
ctx.Error(http.StatusPreconditionFailed, "DependenciesLeft", "cannot close this pull request because it still has open dependencies")
771-
return
772-
}
773-
ctx.Error(http.StatusInternalServerError, "CloseIssue", err)
774-
return
775-
}
776-
} else if !closeOrReopen && issue.IsClosed {
777-
if err := issue_service.ReopenIssue(ctx, issue, ctx.Doer, ""); err != nil {
778-
ctx.Error(http.StatusInternalServerError, "ReopenIssue", err)
779-
return
780-
}
781-
}
782761
}
783762

784763
// change pull target branch

routers/web/repo/issue_comment.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,7 @@ func NewComment(ctx *context.Context) {
154154
if pr != nil {
155155
ctx.Flash.Info(ctx.Tr("repo.pulls.open_unmerged_pull_exists", pr.Index))
156156
} else {
157-
closeOrReopen := form.Status == "close"
158-
if closeOrReopen && !issue.IsClosed {
157+
if form.Status == "close" && !issue.IsClosed {
159158
if err := issue_service.CloseIssue(ctx, issue, ctx.Doer, ""); err != nil {
160159
log.Error("CloseIssue: %v", err)
161160
if issues_model.IsErrDependenciesLeft(err) {
@@ -173,7 +172,7 @@ func NewComment(ctx *context.Context) {
173172
}
174173
log.Trace("Issue [%d] status changed to closed: %v", issue.ID, issue.IsClosed)
175174
}
176-
} else if !closeOrReopen && issue.IsClosed {
175+
} else if form.Status == "reopen" && issue.IsClosed {
177176
if err := issue_service.ReopenIssue(ctx, issue, ctx.Doer, ""); err != nil {
178177
log.Error("ReopenIssue: %v", err)
179178
}

routers/web/repo/issue_list.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -435,13 +435,8 @@ func UpdateIssueStatus(ctx *context.Context) {
435435
return
436436
}
437437

438-
var closeOrReopen bool // true: close, false: reopen
439-
switch action := ctx.FormString("action"); action {
440-
case "open":
441-
closeOrReopen = false
442-
case "close":
443-
closeOrReopen = true
444-
default:
438+
action := ctx.FormString("action")
439+
if action != "open" && action != "close" {
445440
log.Warn("Unrecognized action: %s", action)
446441
ctx.JSONOK()
447442
return
@@ -460,7 +455,7 @@ func UpdateIssueStatus(ctx *context.Context) {
460455
if issue.IsPull && issue.PullRequest.HasMerged {
461456
continue
462457
}
463-
if closeOrReopen && !issue.IsClosed {
458+
if action == "close" && !issue.IsClosed {
464459
if err := issue_service.CloseIssue(ctx, issue, ctx.Doer, ""); err != nil {
465460
if issues_model.IsErrDependenciesLeft(err) {
466461
ctx.JSON(http.StatusPreconditionFailed, map[string]any{
@@ -471,7 +466,7 @@ func UpdateIssueStatus(ctx *context.Context) {
471466
ctx.ServerError("CloseIssue", err)
472467
return
473468
}
474-
} else if !closeOrReopen && issue.IsClosed {
469+
} else if action == "open" && issue.IsClosed {
475470
if err := issue_service.ReopenIssue(ctx, issue, ctx.Doer, ""); err != nil {
476471
ctx.ServerError("ReopenIssue", err)
477472
return

services/issue/commit.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,8 @@ func UpdateIssuesCommit(ctx context.Context, doer *user_model.User, repo *repo_m
189189
}
190190
}
191191

192-
closeOrReopen := ref.Action == references.XRefActionCloses
193192
refIssue.Repo = refRepo
194-
if closeOrReopen && !refIssue.IsClosed {
193+
if ref.Action == references.XRefActionCloses && !refIssue.IsClosed {
195194
if len(ref.TimeLog) > 0 {
196195
if err := issueAddTime(ctx, refIssue, doer, c.Timestamp, ref.TimeLog); err != nil {
197196
return err
@@ -200,7 +199,7 @@ func UpdateIssuesCommit(ctx context.Context, doer *user_model.User, repo *repo_m
200199
if err := CloseIssue(ctx, refIssue, doer, c.Sha1); err != nil {
201200
return err
202201
}
203-
} else if !closeOrReopen && refIssue.IsClosed {
202+
} else if ref.Action == references.XRefActionReopens && refIssue.IsClosed {
204203
if err := ReopenIssue(ctx, refIssue, doer, c.Sha1); err != nil {
205204
return err
206205
}

services/pull/merge.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,15 +242,14 @@ func handleCloseCrossReferences(ctx context.Context, pr *issues_model.PullReques
242242
if err = ref.Issue.LoadRepo(ctx); err != nil {
243243
return err
244244
}
245-
closeOrReopen := ref.RefAction == references.XRefActionCloses
246-
if closeOrReopen && !ref.Issue.IsClosed {
245+
if ref.RefAction == references.XRefActionCloses && !ref.Issue.IsClosed {
247246
if err = issue_service.CloseIssue(ctx, ref.Issue, doer, pr.MergedCommitID); err != nil {
248247
// Allow ErrDependenciesLeft
249248
if !issues_model.IsErrDependenciesLeft(err) {
250249
return err
251250
}
252251
}
253-
} else if !closeOrReopen && ref.Issue.IsClosed {
252+
} else if ref.RefAction == references.XRefActionReopens && ref.Issue.IsClosed {
254253
if err = issue_service.ReopenIssue(ctx, ref.Issue, doer, pr.MergedCommitID); err != nil {
255254
return err
256255
}

0 commit comments

Comments
 (0)