diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2017-01-30 20:46:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-30 20:46:45 +0800 |
commit | f94869d2d19afd7110a0b996a7e6da339fb4e161 (patch) | |
tree | 8fe91beb0dcfce8e78515ebd525ee1decb633e68 /models/issue_label.go | |
parent | d078aa30d6e6f40978ea68e9ae6eee53dc028ada (diff) | |
download | gitea-f94869d2d19afd7110a0b996a7e6da339fb4e161.tar.gz gitea-f94869d2d19afd7110a0b996a7e6da339fb4e161.zip |
Track labels changed on issue view & resolved #542 (#788)
* track labels changed on issue view & resolved #542
* add missing head comment & sort & fix refresh
Diffstat (limited to 'models/issue_label.go')
-rw-r--r-- | models/issue_label.go | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/models/issue_label.go b/models/issue_label.go index 0e1c6d6c4e..02397f146f 100644 --- a/models/issue_label.go +++ b/models/issue_label.go @@ -276,7 +276,7 @@ func HasIssueLabel(issueID, labelID int64) bool { return hasIssueLabel(x, issueID, labelID) } -func newIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { +func newIssueLabel(e *xorm.Session, issue *Issue, label *Label, doer *User) (err error) { if _, err = e.Insert(&IssueLabel{ IssueID: issue.ID, LabelID: label.ID, @@ -284,6 +284,14 @@ func newIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { return err } + if err = issue.loadRepo(e); err != nil { + return + } + + if _, err = createLabelComment(e, doer, issue.Repo, issue, label, true); err != nil { + return err + } + label.NumIssues++ if issue.IsClosed { label.NumClosedIssues++ @@ -292,7 +300,7 @@ func newIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { } // NewIssueLabel creates a new issue-label relation. -func NewIssueLabel(issue *Issue, label *Label) (err error) { +func NewIssueLabel(issue *Issue, label *Label, doer *User) (err error) { if HasIssueLabel(issue.ID, label.ID) { return nil } @@ -303,20 +311,20 @@ func NewIssueLabel(issue *Issue, label *Label) (err error) { return err } - if err = newIssueLabel(sess, issue, label); err != nil { + if err = newIssueLabel(sess, issue, label, doer); err != nil { return err } return sess.Commit() } -func newIssueLabels(e *xorm.Session, issue *Issue, labels []*Label) (err error) { +func newIssueLabels(e *xorm.Session, issue *Issue, labels []*Label, doer *User) (err error) { for i := range labels { if hasIssueLabel(e, issue.ID, labels[i].ID) { continue } - if err = newIssueLabel(e, issue, labels[i]); err != nil { + if err = newIssueLabel(e, issue, labels[i], doer); err != nil { return fmt.Errorf("newIssueLabel: %v", err) } } @@ -325,14 +333,14 @@ func newIssueLabels(e *xorm.Session, issue *Issue, labels []*Label) (err error) } // NewIssueLabels creates a list of issue-label relations. -func NewIssueLabels(issue *Issue, labels []*Label) (err error) { +func NewIssueLabels(issue *Issue, labels []*Label, doer *User) (err error) { sess := x.NewSession() defer sessionRelease(sess) if err = sess.Begin(); err != nil { return err } - if err = newIssueLabels(sess, issue, labels); err != nil { + if err = newIssueLabels(sess, issue, labels, doer); err != nil { return err } @@ -352,7 +360,7 @@ func GetIssueLabels(issueID int64) ([]*IssueLabel, error) { return getIssueLabels(x, issueID) } -func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { +func deleteIssueLabel(e *xorm.Session, doer *User, issue *Issue, label *Label) (err error) { if _, err = e.Delete(&IssueLabel{ IssueID: issue.ID, LabelID: label.ID, @@ -360,6 +368,14 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { return err } + if err = issue.loadRepo(e); err != nil { + return + } + + if _, err = createLabelComment(e, doer, issue.Repo, issue, label, false); err != nil { + return err + } + label.NumIssues-- if issue.IsClosed { label.NumClosedIssues-- @@ -368,14 +384,14 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label) (err error) { } // DeleteIssueLabel deletes issue-label relation. -func DeleteIssueLabel(issue *Issue, label *Label) (err error) { +func DeleteIssueLabel(issue *Issue, doer *User, label *Label) (err error) { sess := x.NewSession() defer sessionRelease(sess) if err = sess.Begin(); err != nil { return err } - if err = deleteIssueLabel(sess, issue, label); err != nil { + if err = deleteIssueLabel(sess, doer, issue, label); err != nil { return err } |