mirror of
https://github.com/go-gitea/gitea
synced 2025-02-08 12:57:00 +01:00
More improvements
This commit is contained in:
parent
406884a6f4
commit
ed261f1403
@ -49,7 +49,7 @@ func TestCreateIssueDependency(t *testing.T) {
|
|||||||
assert.False(t, left)
|
assert.False(t, left)
|
||||||
|
|
||||||
// Close #2 and check again
|
// Close #2 and check again
|
||||||
_, err = issues_model.ChangeIssueStatus(db.DefaultContext, issue2, user1, true)
|
_, err = issues_model.CloseIssue(db.DefaultContext, issue2, user1)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
left, err = issues_model.IssueNoDependenciesLeft(db.DefaultContext, issue1)
|
left, err = issues_model.IssueNoDependenciesLeft(db.DefaultContext, issue1)
|
||||||
|
@ -118,8 +118,8 @@ func doChangeIssueStatus(ctx context.Context, issue *Issue, doer *user_model.Use
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChangeIssueStatus changes issue status to open or closed.
|
// CloseIssue changes issue status to closed.
|
||||||
func ChangeIssueStatus(ctx context.Context, issue *Issue, doer *user_model.User, isClosed bool) (*Comment, error) {
|
func CloseIssue(ctx context.Context, issue *Issue, doer *user_model.User) (*Comment, error) {
|
||||||
if err := issue.LoadRepo(ctx); err != nil {
|
if err := issue.LoadRepo(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -127,7 +127,19 @@ func ChangeIssueStatus(ctx context.Context, issue *Issue, doer *user_model.User,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return changeIssueStatus(ctx, issue, doer, isClosed, false)
|
return changeIssueStatus(ctx, issue, doer, true, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangeIssueStatus changes issue status to open or closed.
|
||||||
|
func ReopenIssue(ctx context.Context, issue *Issue, doer *user_model.User) (*Comment, error) {
|
||||||
|
if err := issue.LoadRepo(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := issue.LoadPoster(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return changeIssueStatus(ctx, issue, doer, false, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChangeIssueTitle changes the title of this issue, as the given user.
|
// ChangeIssueTitle changes the title of this issue, as the given user.
|
||||||
|
@ -98,7 +98,7 @@ func TestXRef_ResolveCrossReferences(t *testing.T) {
|
|||||||
i1 := testCreateIssue(t, 1, 2, "title1", "content1", false)
|
i1 := testCreateIssue(t, 1, 2, "title1", "content1", false)
|
||||||
i2 := testCreateIssue(t, 1, 2, "title2", "content2", false)
|
i2 := testCreateIssue(t, 1, 2, "title2", "content2", false)
|
||||||
i3 := testCreateIssue(t, 1, 2, "title3", "content3", false)
|
i3 := testCreateIssue(t, 1, 2, "title3", "content3", false)
|
||||||
_, err := issues_model.ChangeIssueStatus(db.DefaultContext, i3, d, true)
|
_, err := issues_model.CloseIssue(db.DefaultContext, i3, d)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
pr := testCreatePR(t, 1, 2, "titlepr", fmt.Sprintf("closes #%d", i1.Index))
|
pr := testCreatePR(t, 1, 2, "titlepr", fmt.Sprintf("closes #%d", i1.Index))
|
||||||
|
@ -3166,7 +3166,7 @@ func NewComment(ctx *context.Context) {
|
|||||||
ctx.Flash.Info(ctx.Tr("repo.pulls.open_unmerged_pull_exists", pr.Index))
|
ctx.Flash.Info(ctx.Tr("repo.pulls.open_unmerged_pull_exists", pr.Index))
|
||||||
} else {
|
} else {
|
||||||
closeOrReopen := form.Status == "close"
|
closeOrReopen := form.Status == "close"
|
||||||
if closeOrReopen {
|
if closeOrReopen && !issue.IsClosed {
|
||||||
if err := issue_service.CloseIssue(ctx, issue, ctx.Doer, ""); err != nil {
|
if err := issue_service.CloseIssue(ctx, issue, ctx.Doer, ""); err != nil {
|
||||||
log.Error("CloseIssue: %v", err)
|
log.Error("CloseIssue: %v", err)
|
||||||
if issues_model.IsErrDependenciesLeft(err) {
|
if issues_model.IsErrDependenciesLeft(err) {
|
||||||
@ -3184,7 +3184,7 @@ func NewComment(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
log.Trace("Issue [%d] status changed to closed: %v", issue.ID, issue.IsClosed)
|
log.Trace("Issue [%d] status changed to closed: %v", issue.ID, issue.IsClosed)
|
||||||
}
|
}
|
||||||
} else {
|
} else if !closeOrReopen && issue.IsClosed {
|
||||||
if err := issue_service.ReopenIssue(ctx, issue, ctx.Doer, ""); err != nil {
|
if err := issue_service.ReopenIssue(ctx, issue, ctx.Doer, ""); err != nil {
|
||||||
log.Error("ReopenIssue: %v", err)
|
log.Error("ReopenIssue: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -188,15 +188,20 @@ func UpdateIssuesCommit(ctx context.Context, doer *user_model.User, repo *repo_m
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isClosed := ref.Action == references.XRefActionCloses
|
|
||||||
if isClosed && len(ref.TimeLog) > 0 {
|
closeOrReopen := ref.Action == references.XRefActionCloses
|
||||||
if err := issueAddTime(ctx, refIssue, doer, c.Timestamp, ref.TimeLog); err != nil {
|
refIssue.Repo = refRepo
|
||||||
|
if closeOrReopen && !refIssue.IsClosed {
|
||||||
|
if len(ref.TimeLog) > 0 {
|
||||||
|
if err := issueAddTime(ctx, refIssue, doer, c.Timestamp, ref.TimeLog); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := CloseIssue(ctx, refIssue, doer, c.Sha1); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
} else if !closeOrReopen && refIssue.IsClosed {
|
||||||
if isClosed && !refIssue.IsClosed {
|
if err := ReopenIssue(ctx, refIssue, doer, c.Sha1); err != nil {
|
||||||
refIssue.Repo = refRepo
|
|
||||||
if err := CloseIssue(ctx, refIssue, doer, c.Sha1); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
// CloseIssue close and issue.
|
// CloseIssue close and issue.
|
||||||
func CloseIssue(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, commitID string) error {
|
func CloseIssue(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, commitID string) error {
|
||||||
comment, err := issues_model.ChangeIssueStatus(ctx, issue, doer, true)
|
comment, err := issues_model.CloseIssue(ctx, issue, doer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if issues_model.IsErrDependenciesLeft(err) {
|
if issues_model.IsErrDependenciesLeft(err) {
|
||||||
if err := issues_model.FinishIssueStopwatchIfPossible(ctx, doer, issue); err != nil {
|
if err := issues_model.FinishIssueStopwatchIfPossible(ctx, doer, issue); err != nil {
|
||||||
@ -36,15 +36,11 @@ func CloseIssue(ctx context.Context, issue *issues_model.Issue, doer *user_model
|
|||||||
// ReopenIssue reopen an issue.
|
// ReopenIssue reopen an issue.
|
||||||
// FIXME: If some issues dependent this one are closed, should we also reopen them?
|
// FIXME: If some issues dependent this one are closed, should we also reopen them?
|
||||||
func ReopenIssue(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, commitID string) error {
|
func ReopenIssue(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, commitID string) error {
|
||||||
comment, err := issues_model.ChangeIssueStatus(ctx, issue, doer, false)
|
comment, err := issues_model.ReopenIssue(ctx, issue, doer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := issues_model.FinishIssueStopwatchIfPossible(ctx, doer, issue); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
notify_service.IssueChangeStatus(ctx, doer, commitID, issue, comment, false)
|
notify_service.IssueChangeStatus(ctx, doer, commitID, issue, comment, false)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -242,14 +242,18 @@ func handleCloseCrossReferences(ctx context.Context, pr *issues_model.PullReques
|
|||||||
if err = ref.Issue.LoadRepo(ctx); err != nil {
|
if err = ref.Issue.LoadRepo(ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
isClosed := ref.RefAction == references.XRefActionCloses
|
closeOrReopen := ref.RefAction == references.XRefActionCloses
|
||||||
if isClosed && !ref.Issue.IsClosed {
|
if closeOrReopen && !ref.Issue.IsClosed {
|
||||||
if err = issue_service.CloseIssue(ctx, ref.Issue, doer, pr.MergedCommitID); err != nil {
|
if err = issue_service.CloseIssue(ctx, ref.Issue, doer, pr.MergedCommitID); err != nil {
|
||||||
// Allow ErrDependenciesLeft
|
// Allow ErrDependenciesLeft
|
||||||
if !issues_model.IsErrDependenciesLeft(err) {
|
if !issues_model.IsErrDependenciesLeft(err) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if !closeOrReopen && ref.Issue.IsClosed {
|
||||||
|
if err = issue_service.ReopenIssue(ctx, ref.Issue, doer, pr.MergedCommitID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user