diff options
author | Unknown <joe2010xtmf@163.com> | 2014-05-12 14:06:42 -0400 |
---|---|---|
committer | Unknown <joe2010xtmf@163.com> | 2014-05-12 14:06:42 -0400 |
commit | 54e95fa367d8f9394522ce1fa6905a38974cbd23 (patch) | |
tree | 9318f670716cad34fe0b7e05e510b492fd4e0839 /models/issue.go | |
parent | f1130ce5e9fa63df5e472a9c5fbd3e875f1ba9f5 (diff) | |
download | gitea-54e95fa367d8f9394522ce1fa6905a38974cbd23.tar.gz gitea-54e95fa367d8f9394522ce1fa6905a38974cbd23.zip |
Finish add new milestone
Diffstat (limited to 'models/issue.go')
-rw-r--r-- | models/issue.go | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/models/issue.go b/models/issue.go index 40d3bab04d..fa9d9427ae 100644 --- a/models/issue.go +++ b/models/issue.go @@ -20,9 +20,9 @@ var ( // Issue represents an issue or pull request of repository. type Issue struct { Id int64 + RepoId int64 `xorm:"INDEX"` Index int64 // Index in one repository. Name string - RepoId int64 `xorm:"INDEX"` Repo *Repository `xorm:"-"` PosterId int64 Poster *User `xorm:"-"` @@ -390,7 +390,7 @@ func UpdateIssueUserPairsByMentions(uids []int64, iid int64) error { // Label represents a label of repository for issues. type Label struct { Id int64 - Rid int64 `xorm:"INDEX"` + RepoId int64 `xorm:"INDEX"` Name string Color string NumIssues int @@ -401,17 +401,53 @@ type Label struct { // Milestone represents a milestone of repository. type Milestone struct { Id int64 - Rid int64 `xorm:"INDEX"` + RepoId int64 `xorm:"INDEX"` + Index int64 Name string Content string + RenderedContent string `xorm:"-"` IsClosed bool NumIssues int NumClosedIssues int + NumOpenIssues int `xorm:"-"` Completeness int // Percentage(1-100). Deadline time.Time ClosedDate time.Time } +// CalOpenIssues calculates the open issues of milestone. +func (m *Milestone) CalOpenIssues() { + m.NumOpenIssues = m.NumIssues - m.NumClosedIssues +} + +// NewMilestone creates new milestone of repository. +func NewMilestone(m *Milestone) (err error) { + sess := orm.NewSession() + defer sess.Close() + if err = sess.Begin(); err != nil { + return err + } + + if _, err = sess.Insert(m); err != nil { + sess.Rollback() + return err + } + + rawSql := "UPDATE `repository` SET num_milestones = num_milestones + 1 WHERE id = ?" + if _, err = sess.Exec(rawSql, m.RepoId); err != nil { + sess.Rollback() + return err + } + return sess.Commit() +} + +// GetMilestones returns a list of milestones of given repository and status. +func GetMilestones(repoId int64, isClosed bool) ([]*Milestone, error) { + miles := make([]*Milestone, 0, 10) + err := orm.Where("repo_id=?", repoId).And("is_closed=?", isClosed).Find(&miles) + return miles, err +} + // Issue types. const ( IT_PLAIN = iota // Pure comment. |