* move clearlabels from models to issue service * improve code * Apply suggestions from code review Co-Authored-By: zeripath <art27@cantab.net>tags/v1.11.0-rc1
@@ -596,40 +596,6 @@ func (issue *Issue) ClearLabels(doer *User) (err error) { | |||
if err = sess.Commit(); err != nil { | |||
return fmt.Errorf("Commit: %v", err) | |||
} | |||
sess.Close() | |||
if err = issue.LoadPoster(); err != nil { | |||
return fmt.Errorf("loadPoster: %v", err) | |||
} | |||
mode, _ := AccessLevel(issue.Poster, issue.Repo) | |||
if issue.IsPull { | |||
err = issue.PullRequest.LoadIssue() | |||
if err != nil { | |||
log.Error("LoadIssue: %v", err) | |||
return | |||
} | |||
err = PrepareWebhooks(issue.Repo, HookEventPullRequest, &api.PullRequestPayload{ | |||
Action: api.HookIssueLabelCleared, | |||
Index: issue.Index, | |||
PullRequest: issue.PullRequest.APIFormat(), | |||
Repository: issue.Repo.APIFormat(mode), | |||
Sender: doer.APIFormat(), | |||
}) | |||
} else { | |||
err = PrepareWebhooks(issue.Repo, HookEventIssues, &api.IssuePayload{ | |||
Action: api.HookIssueLabelCleared, | |||
Index: issue.Index, | |||
Issue: issue.APIFormat(), | |||
Repository: issue.Repo.APIFormat(mode), | |||
Sender: doer.APIFormat(), | |||
}) | |||
} | |||
if err != nil { | |||
log.Error("PrepareWebhooks [is_pull: %v]: %v", issue.IsPull, err) | |||
} else { | |||
go HookQueue.Add(issue.RepoID) | |||
} | |||
return nil | |||
} |
@@ -11,6 +11,7 @@ import ( | |||
"code.gitea.io/gitea/modules/notification/indexer" | |||
"code.gitea.io/gitea/modules/notification/mail" | |||
"code.gitea.io/gitea/modules/notification/ui" | |||
"code.gitea.io/gitea/modules/notification/webhook" | |||
) | |||
var ( | |||
@@ -27,6 +28,7 @@ func init() { | |||
RegisterNotifier(ui.NewNotifier()) | |||
RegisterNotifier(mail.NewNotifier()) | |||
RegisterNotifier(indexer.NewNotifier()) | |||
RegisterNotifier(webhook.NewNotifier()) | |||
} | |||
// NotifyCreateIssueComment notifies issue comment related message to notifiers |
@@ -0,0 +1,67 @@ | |||
// Copyright 2019 The Gitea Authors. All rights reserved. | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package webhook | |||
import ( | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/notification/base" | |||
api "code.gitea.io/gitea/modules/structs" | |||
) | |||
type webhookNotifier struct { | |||
base.NullNotifier | |||
} | |||
var ( | |||
_ base.Notifier = &webhookNotifier{} | |||
) | |||
// NewNotifier create a new webhookNotifier notifier | |||
func NewNotifier() base.Notifier { | |||
return &webhookNotifier{} | |||
} | |||
func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *models.Issue) { | |||
if err := issue.LoadPoster(); err != nil { | |||
log.Error("loadPoster: %v", err) | |||
return | |||
} | |||
if err := issue.LoadRepo(); err != nil { | |||
log.Error("LoadRepo: %v", err) | |||
return | |||
} | |||
mode, _ := models.AccessLevel(issue.Poster, issue.Repo) | |||
var err error | |||
if issue.IsPull { | |||
if err = issue.LoadPullRequest(); err != nil { | |||
log.Error("LoadPullRequest: %v", err) | |||
return | |||
} | |||
err = models.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | |||
Action: api.HookIssueLabelCleared, | |||
Index: issue.Index, | |||
PullRequest: issue.PullRequest.APIFormat(), | |||
Repository: issue.Repo.APIFormat(mode), | |||
Sender: doer.APIFormat(), | |||
}) | |||
} else { | |||
err = models.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | |||
Action: api.HookIssueLabelCleared, | |||
Index: issue.Index, | |||
Issue: issue.APIFormat(), | |||
Repository: issue.Repo.APIFormat(mode), | |||
Sender: doer.APIFormat(), | |||
}) | |||
} | |||
if err != nil { | |||
log.Error("PrepareWebhooks [is_pull: %v]: %v", issue.IsPull, err) | |||
} else { | |||
go models.HookQueue.Add(issue.RepoID) | |||
} | |||
} |
@@ -9,6 +9,7 @@ import ( | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/context" | |||
api "code.gitea.io/gitea/modules/structs" | |||
issue_service "code.gitea.io/gitea/services/issue" | |||
) | |||
// ListIssueLabels list all the labels of an issue | |||
@@ -314,7 +315,7 @@ func ClearIssueLabels(ctx *context.APIContext) { | |||
return | |||
} | |||
if err := issue.ClearLabels(ctx.User); err != nil { | |||
if err := issue_service.ClearLabels(issue, ctx.User); err != nil { | |||
ctx.Error(500, "ClearLabels", err) | |||
return | |||
} |
@@ -10,6 +10,7 @@ import ( | |||
"code.gitea.io/gitea/modules/base" | |||
"code.gitea.io/gitea/modules/context" | |||
"code.gitea.io/gitea/modules/log" | |||
issue_service "code.gitea.io/gitea/services/issue" | |||
) | |||
const ( | |||
@@ -132,7 +133,7 @@ func UpdateIssueLabel(ctx *context.Context) { | |||
switch action := ctx.Query("action"); action { | |||
case "clear": | |||
for _, issue := range issues { | |||
if err := issue.ClearLabels(ctx.User); err != nil { | |||
if err := issue_service.ClearLabels(issue, ctx.User); err != nil { | |||
ctx.ServerError("ClearLabels", err) | |||
return | |||
} |
@@ -0,0 +1,21 @@ | |||
// Copyright 2019 The Gitea Authors. All rights reserved. | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package issue | |||
import ( | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/notification" | |||
) | |||
// ClearLabels clears all of an issue's labels | |||
func ClearLabels(issue *models.Issue, doer *models.User) (err error) { | |||
if err = issue.ClearLabels(doer); err != nil { | |||
return | |||
} | |||
notification.NotifyIssueClearLabels(doer, issue) | |||
return nil | |||
} |