aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorUnknown <joe2010xtmf@163.com>2014-05-12 14:06:42 -0400
committerUnknown <joe2010xtmf@163.com>2014-05-12 14:06:42 -0400
commit54e95fa367d8f9394522ce1fa6905a38974cbd23 (patch)
tree9318f670716cad34fe0b7e05e510b492fd4e0839 /models
parentf1130ce5e9fa63df5e472a9c5fbd3e875f1ba9f5 (diff)
downloadgitea-54e95fa367d8f9394522ce1fa6905a38974cbd23.tar.gz
gitea-54e95fa367d8f9394522ce1fa6905a38974cbd23.zip
Finish add new milestone
Diffstat (limited to 'models')
-rw-r--r--models/issue.go42
-rw-r--r--models/models.go6
-rw-r--r--models/repo.go47
3 files changed, 68 insertions, 27 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.
diff --git a/models/models.go b/models/models.go
index 02141b7a8f..3adec1a56c 100644
--- a/models/models.go
+++ b/models/models.go
@@ -34,7 +34,8 @@ var (
func init() {
tables = append(tables, new(User), new(PublicKey), new(Repository), new(Watch),
new(Action), new(Access), new(Issue), new(Comment), new(Oauth2), new(Follow),
- new(Mirror), new(Release), new(LoginSource), new(Webhook), new(IssueUser))
+ new(Mirror), new(Release), new(LoginSource), new(Webhook), new(IssueUser),
+ new(Milestone))
}
func LoadModelsConfig() {
@@ -141,7 +142,7 @@ type Statistic struct {
Counter struct {
User, PublicKey, Repo, Watch, Action, Access,
Issue, Comment, Mirror, Oauth, Release,
- LoginSource, Webhook int64
+ LoginSource, Webhook, Milestone int64
}
}
@@ -159,6 +160,7 @@ func GetStatistic() (stats Statistic) {
stats.Counter.Release, _ = orm.Count(new(Release))
stats.Counter.LoginSource, _ = orm.Count(new(LoginSource))
stats.Counter.Webhook, _ = orm.Count(new(Webhook))
+ stats.Counter.Milestone, _ = orm.Count(new(Milestone))
return
}
diff --git a/models/repo.go b/models/repo.go
index 32baf36dae..569c9571b7 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -92,28 +92,31 @@ func NewRepoContext() {
// Repository represents a git repository.
type Repository struct {
- Id int64
- OwnerId int64 `xorm:"unique(s)"`
- Owner *User `xorm:"-"`
- ForkId int64
- LowerName string `xorm:"unique(s) index not null"`
- Name string `xorm:"index not null"`
- Description string
- Website string
- NumWatches int
- NumStars int
- NumForks int
- NumIssues int
- NumClosedIssues int
- NumOpenIssues int `xorm:"-"`
- NumTags int `xorm:"-"`
- IsPrivate bool
- IsMirror bool
- IsBare bool
- IsGoget bool
- DefaultBranch string
- Created time.Time `xorm:"created"`
- Updated time.Time `xorm:"updated"`
+ Id int64
+ OwnerId int64 `xorm:"unique(s)"`
+ Owner *User `xorm:"-"`
+ ForkId int64
+ LowerName string `xorm:"unique(s) index not null"`
+ Name string `xorm:"index not null"`
+ Description string
+ Website string
+ NumWatches int
+ NumStars int
+ NumForks int
+ NumIssues int
+ NumClosedIssues int
+ NumOpenIssues int `xorm:"-"`
+ NumMilestones int `xorm:"NOT NULL DEFAULT 0"`
+ NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"`
+ NumOpenMilestones int `xorm:"-"`
+ NumTags int `xorm:"-"`
+ IsPrivate bool
+ IsMirror bool
+ IsBare bool
+ IsGoget bool
+ DefaultBranch string
+ Created time.Time `xorm:"created"`
+ Updated time.Time `xorm:"updated"`
}
func (repo *Repository) GetOwner() (err error) {