2019-10-28 08:26:46 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-10-28 08:26:46 +03:00
package issue
import (
2022-05-03 22:46:28 +03:00
"context"
2021-11-21 12:11:48 +03:00
"code.gitea.io/gitea/models/db"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2022-01-19 02:26:42 +03:00
"code.gitea.io/gitea/modules/log"
2019-10-28 08:26:46 +03:00
"code.gitea.io/gitea/modules/notification"
)
// ChangeStatus changes issue status to open or closed.
2023-01-25 07:47:53 +03:00
func ChangeStatus ( issue * issues_model . Issue , doer * user_model . User , commitID string , closed bool ) error {
return changeStatusCtx ( db . DefaultContext , issue , doer , commitID , closed )
2022-05-03 22:46:28 +03:00
}
// changeStatusCtx changes issue status to open or closed.
// TODO: if context is not db.DefaultContext we get a deadlock!!!
2023-01-25 07:47:53 +03:00
func changeStatusCtx ( ctx context . Context , issue * issues_model . Issue , doer * user_model . User , commitID string , closed bool ) error {
2022-06-13 12:37:59 +03:00
comment , err := issues_model . ChangeIssueStatus ( ctx , issue , doer , closed )
2019-10-28 08:26:46 +03:00
if err != nil {
2022-06-13 12:37:59 +03:00
if issues_model . IsErrDependenciesLeft ( err ) && closed {
if err := issues_model . FinishIssueStopwatchIfPossible ( ctx , doer , issue ) ; err != nil {
2022-01-19 02:26:42 +03:00
log . Error ( "Unable to stop stopwatch for issue[%d]#%d: %v" , issue . ID , issue . Index , err )
2021-11-21 12:11:48 +03:00
}
}
return err
2019-10-28 08:26:46 +03:00
}
2021-11-21 12:11:48 +03:00
if closed {
2022-06-13 12:37:59 +03:00
if err := issues_model . FinishIssueStopwatchIfPossible ( ctx , doer , issue ) ; err != nil {
2021-11-21 12:11:48 +03:00
return err
}
}
2023-01-25 07:47:53 +03:00
notification . NotifyIssueChangeStatus ( ctx , doer , commitID , issue , comment , closed )
2021-11-21 12:11:48 +03:00
2019-10-28 08:26:46 +03:00
return nil
}