aboutsummaryrefslogtreecommitdiff
path: root/models/issue.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2014-05-15 09:55:16 +0800
committerLunny Xiao <xiaolunwen@gmail.com>2014-05-15 09:55:16 +0800
commit839a9bb054618c7f3b04dae0b4f5b5b0fbcf1ee2 (patch)
tree1d47a111c869a6130fd092c1fb683d1ac89251bd /models/issue.go
parent9d5e827a1e29fb62a0152867a7e1072fd018e1b4 (diff)
parentb70db618547b2167cac7e35be5405fb385512f30 (diff)
Merge branch 'dev' of github.com:gogits/gogs into dev
Diffstat (limited to 'models/issue.go')
-rw-r--r--models/issue.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/models/issue.go b/models/issue.go
index e708e543..7dd69267 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -167,6 +167,8 @@ type IssueUser struct {
Uid int64 // User ID.
IssueId int64
RepoId int64
+ MilestoneId int64
+ Labels string `xorm:"TEXT"`
IsRead bool
IsAssigned bool
IsMentioned bool
@@ -446,6 +448,18 @@ func NewMilestone(m *Milestone) (err error) {
return sess.Commit()
}
+// GetMilestoneById returns the milestone by given ID.
+func GetMilestoneById(id int64) (*Milestone, error) {
+ m := &Milestone{Id: id}
+ has, err := orm.Get(m)
+ if err != nil {
+ return nil, err
+ } else if !has {
+ return nil, ErrMilestoneNotExist
+ }
+ return m, nil
+}
+
// GetMilestoneByIndex returns the milestone of given repository and index.
func GetMilestoneByIndex(repoId, idx int64) (*Milestone, error) {
m := &Milestone{RepoId: repoId, Index: idx}
@@ -502,6 +516,53 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
return sess.Commit()
}
+// ChangeMilestoneAssign changes assignment of milestone for issue.
+func ChangeMilestoneAssign(oldMid, mid int64, isIssueClosed bool) (err error) {
+ sess := orm.NewSession()
+ defer sess.Close()
+ if err = sess.Begin(); err != nil {
+ return err
+ }
+
+ if oldMid > 0 {
+ m, err := GetMilestoneById(oldMid)
+ if err != nil {
+ return err
+ }
+
+ m.NumIssues--
+ if isIssueClosed {
+ m.NumClosedIssues--
+ }
+ if m.NumIssues > 0 {
+ m.Completeness = m.NumClosedIssues * 100 / m.NumIssues
+ } else {
+ m.Completeness = 0
+ }
+ if _, err = sess.Id(m.Id).Update(m); err != nil {
+ sess.Rollback()
+ return err
+ }
+ }
+
+ if mid > 0 {
+ m, err := GetMilestoneById(mid)
+ if err != nil {
+ return err
+ }
+ m.NumIssues++
+ if isIssueClosed {
+ m.NumClosedIssues++
+ }
+ m.Completeness = m.NumClosedIssues * 100 / m.NumIssues
+ if _, err = sess.Id(m.Id).Update(m); err != nil {
+ sess.Rollback()
+ return err
+ }
+ }
+ return sess.Commit()
+}
+
// DeleteMilestone deletes a milestone.
func DeleteMilestone(m *Milestone) (err error) {
sess := orm.NewSession()