Restore propagation of ErrDependenciesLeft (#18325)
Unfortunately #17643 prevented all propagation of ErrDependenciesLeft meaning that dependency errors that prevent closing of issues get swallowed. This PR restores propagation of the error but instead swallows the error in the places where it needs to be swallowed. Fix #18223 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
84f8ef3df6
commit
4a20eadfd7
3 changed files with 9 additions and 6 deletions
|
@ -8,6 +8,7 @@ import (
|
|||
"code.gitea.io/gitea/models"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/notification"
|
||||
)
|
||||
|
||||
|
@ -15,10 +16,9 @@ import (
|
|||
func ChangeStatus(issue *models.Issue, doer *user_model.User, closed bool) error {
|
||||
comment, err := issue.ChangeStatus(doer, closed)
|
||||
if err != nil {
|
||||
// Don't return an error when dependencies are open as this would let the push fail
|
||||
if models.IsErrDependenciesLeft(err) {
|
||||
if closed {
|
||||
return models.FinishIssueStopwatchIfPossible(db.DefaultContext, doer, issue)
|
||||
if models.IsErrDependenciesLeft(err) && closed {
|
||||
if err := models.FinishIssueStopwatchIfPossible(db.DefaultContext, doer, issue); err != nil {
|
||||
log.Error("Unable to stop stopwatch for issue[%d]#%d: %v", issue.ID, issue.Index, err)
|
||||
}
|
||||
}
|
||||
return err
|
||||
|
|
|
@ -105,7 +105,10 @@ func Merge(pr *models.PullRequest, doer *user_model.User, baseGitRepo *git.Repos
|
|||
close := ref.RefAction == references.XRefActionCloses
|
||||
if close != ref.Issue.IsClosed {
|
||||
if err = issue_service.ChangeStatus(ref.Issue, doer, close); err != nil {
|
||||
return err
|
||||
// Allow ErrDependenciesLeft
|
||||
if !models.IsErrDependenciesLeft(err) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -514,7 +514,7 @@ func CloseBranchPulls(doer *user_model.User, repoID int64, branch string) error
|
|||
|
||||
var errs errlist
|
||||
for _, pr := range prs {
|
||||
if err = issue_service.ChangeStatus(pr.Issue, doer, true); err != nil && !models.IsErrPullWasClosed(err) {
|
||||
if err = issue_service.ChangeStatus(pr.Issue, doer, true); err != nil && !models.IsErrPullWasClosed(err) && !models.IsErrDependenciesLeft(err) {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue