mirror of
https://github.com/go-gitea/gitea.git
synced 2024-12-22 17:34:03 +03:00
Fix 500 error when state
params is set when editing issue/PR by API (#31880)
A quick fix for #31871
This commit is contained in:
parent
661a1e10f7
commit
eba6bfbe15
@ -891,7 +891,20 @@ func EditIssue(ctx *context.APIContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := issue_service.ChangeStatus(ctx, issue, ctx.Doer, "", api.StateClosed == api.StateType(*form.State)); err != nil {
|
|
||||||
|
var isClosed bool
|
||||||
|
switch state := api.StateType(*form.State); state {
|
||||||
|
case api.StateOpen:
|
||||||
|
isClosed = false
|
||||||
|
case api.StateClosed:
|
||||||
|
isClosed = true
|
||||||
|
default:
|
||||||
|
ctx.Error(http.StatusPreconditionFailed, "UnknownIssueStateError", fmt.Sprintf("unknown state: %s", state))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if issue.IsClosed != isClosed {
|
||||||
|
if err := issue_service.ChangeStatus(ctx, issue, ctx.Doer, "", isClosed); err != nil {
|
||||||
if issues_model.IsErrDependenciesLeft(err) {
|
if issues_model.IsErrDependenciesLeft(err) {
|
||||||
ctx.Error(http.StatusPreconditionFailed, "DependenciesLeft", "cannot close this issue because it still has open dependencies")
|
ctx.Error(http.StatusPreconditionFailed, "DependenciesLeft", "cannot close this issue because it still has open dependencies")
|
||||||
return
|
return
|
||||||
@ -900,6 +913,7 @@ func EditIssue(ctx *context.APIContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Refetch from database to assign some automatic values
|
// Refetch from database to assign some automatic values
|
||||||
issue, err = issues_model.GetIssueByID(ctx, issue.ID)
|
issue, err = issues_model.GetIssueByID(ctx, issue.ID)
|
||||||
|
@ -716,7 +716,20 @@ func EditPullRequest(ctx *context.APIContext) {
|
|||||||
ctx.Error(http.StatusPreconditionFailed, "MergedPRState", "cannot change state of this pull request, it was already merged")
|
ctx.Error(http.StatusPreconditionFailed, "MergedPRState", "cannot change state of this pull request, it was already merged")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := issue_service.ChangeStatus(ctx, issue, ctx.Doer, "", api.StateClosed == api.StateType(*form.State)); err != nil {
|
|
||||||
|
var isClosed bool
|
||||||
|
switch state := api.StateType(*form.State); state {
|
||||||
|
case api.StateOpen:
|
||||||
|
isClosed = false
|
||||||
|
case api.StateClosed:
|
||||||
|
isClosed = true
|
||||||
|
default:
|
||||||
|
ctx.Error(http.StatusPreconditionFailed, "UnknownPRStateError", fmt.Sprintf("unknown state: %s", state))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if issue.IsClosed != isClosed {
|
||||||
|
if err := issue_service.ChangeStatus(ctx, issue, ctx.Doer, "", isClosed); err != nil {
|
||||||
if issues_model.IsErrDependenciesLeft(err) {
|
if issues_model.IsErrDependenciesLeft(err) {
|
||||||
ctx.Error(http.StatusPreconditionFailed, "DependenciesLeft", "cannot close this pull request because it still has open dependencies")
|
ctx.Error(http.StatusPreconditionFailed, "DependenciesLeft", "cannot close this pull request because it still has open dependencies")
|
||||||
return
|
return
|
||||||
@ -725,6 +738,7 @@ func EditPullRequest(ctx *context.APIContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// change pull target branch
|
// change pull target branch
|
||||||
if !pr.HasMerged && len(form.Base) != 0 && form.Base != pr.BaseBranch {
|
if !pr.HasMerged && len(form.Base) != 0 && form.Base != pr.BaseBranch {
|
||||||
|
@ -13,6 +13,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ChangeStatus changes issue status to open or closed.
|
// ChangeStatus changes issue status to open or closed.
|
||||||
|
// closed means the target status
|
||||||
|
// Fix me: you should check whether the current issue status is same to the target status before call this function
|
||||||
|
// as in function changeIssueStatus we will return WasClosedError, even the issue status and target status are both open
|
||||||
func ChangeStatus(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, commitID string, closed bool) error {
|
func ChangeStatus(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, commitID string, closed bool) error {
|
||||||
comment, err := issues_model.ChangeIssueStatus(ctx, issue, doer, closed)
|
comment, err := issues_model.ChangeIssueStatus(ctx, issue, doer, closed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user