mirror of
https://github.com/go-gitea/gitea
synced 2024-06-03 03:46:51 +02:00
Support updating milestones
This commit is contained in:
parent
5ffadebac6
commit
6d242993c7
|
@ -39,6 +39,48 @@ func InsertMilestones(ms ...*issues_model.Milestone) (err error) {
|
||||||
return committer.Commit()
|
return committer.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateMilestones updates milestones of repository.
|
||||||
|
func UpdateMilestones(ms ...*issues_model.Milestone) (err error) {
|
||||||
|
if len(ms) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, committer, err := db.TxContext()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer committer.Close()
|
||||||
|
sess := db.GetEngine(ctx)
|
||||||
|
|
||||||
|
// check if milestone exists, if not create it
|
||||||
|
// milestones are considered as unique by RepoID and CreatedUnix
|
||||||
|
for _, m := range ms {
|
||||||
|
var existingMilestone *issues_model.Milestone
|
||||||
|
has, err := sess.Where("repo_id = ? AND created_unix = ?", m.RepoID, m.CreatedUnix).Get(&existingMilestone)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !has {
|
||||||
|
if _, err = sess.NoAutoTime().Insert(m); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else if existingMilestone.Name != m.Name || existingMilestone.Content != m.Content ||
|
||||||
|
existingMilestone.IsClosed != m.IsClosed ||
|
||||||
|
existingMilestone.UpdatedUnix != m.UpdatedUnix || existingMilestone.ClosedDateUnix != m.ClosedDateUnix ||
|
||||||
|
existingMilestone.DeadlineUnix != m.DeadlineUnix {
|
||||||
|
if _, err = sess.NoAutoTime().ID(existingMilestone.ID).Update(m); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err = sess.Exec(ctx, "UPDATE `repository` SET num_milestones = num_milestones + ? WHERE id = ?", len(ms), ms[0].RepoID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return committer.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
// InsertIssues insert issues to database
|
// InsertIssues insert issues to database
|
||||||
func InsertIssues(issues ...*issues_model.Issue) error {
|
func InsertIssues(issues ...*issues_model.Issue) error {
|
||||||
ctx, committer, err := db.TxContext()
|
ctx, committer, err := db.TxContext()
|
||||||
|
|
|
@ -169,8 +169,7 @@ func (g *GiteaLocalUploader) CreateTopics(topics ...string) error {
|
||||||
return repo_model.AddTopics(g.repo.ID, topics...)
|
return repo_model.AddTopics(g.repo.ID, topics...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateMilestones creates milestones
|
func (g *GiteaLocalUploader) prepareMilestones(milestones ...*base.Milestone) []*issues_model.Milestone {
|
||||||
func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) error {
|
|
||||||
mss := make([]*issues_model.Milestone, 0, len(milestones))
|
mss := make([]*issues_model.Milestone, 0, len(milestones))
|
||||||
for _, milestone := range milestones {
|
for _, milestone := range milestones {
|
||||||
var deadline timeutil.TimeStamp
|
var deadline timeutil.TimeStamp
|
||||||
|
@ -195,20 +194,26 @@ func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) err
|
||||||
}
|
}
|
||||||
|
|
||||||
ms := issues_model.Milestone{
|
ms := issues_model.Milestone{
|
||||||
RepoID: g.repo.ID,
|
RepoID: g.repo.ID,
|
||||||
Name: milestone.Title,
|
Name: milestone.Title,
|
||||||
Content: milestone.Description,
|
Content: milestone.Description,
|
||||||
IsClosed: milestone.State == "closed",
|
IsClosed: milestone.State == "closed",
|
||||||
CreatedUnix: timeutil.TimeStamp(milestone.Created.Unix()),
|
CreatedUnix: timeutil.TimeStamp(milestone.Created.Unix()),
|
||||||
UpdatedUnix: timeutil.TimeStamp(milestone.Updated.Unix()),
|
UpdatedUnix: timeutil.TimeStamp(milestone.Updated.Unix()),
|
||||||
DeadlineUnix: deadline,
|
ClosedDateUnix: timeutil.TimeStamp(milestone.Closed.Unix()),
|
||||||
|
DeadlineUnix: deadline,
|
||||||
}
|
}
|
||||||
if ms.IsClosed && milestone.Closed != nil {
|
if ms.IsClosed && milestone.Closed != nil {
|
||||||
ms.ClosedDateUnix = timeutil.TimeStamp(milestone.Closed.Unix())
|
ms.ClosedDateUnix = timeutil.TimeStamp(milestone.Closed.Unix())
|
||||||
}
|
}
|
||||||
mss = append(mss, &ms)
|
mss = append(mss, &ms)
|
||||||
}
|
}
|
||||||
|
return mss
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateMilestones creates milestones
|
||||||
|
func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) error {
|
||||||
|
mss := g.prepareMilestones(milestones...)
|
||||||
err := models.InsertMilestones(mss...)
|
err := models.InsertMilestones(mss...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -833,6 +838,15 @@ func (g *GiteaLocalUploader) UpdateTopics(topics ...string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GiteaLocalUploader) UpdateMilestones(milestones ...*base.Milestone) error {
|
func (g *GiteaLocalUploader) UpdateMilestones(milestones ...*base.Milestone) error {
|
||||||
|
mss := g.prepareMilestones(milestones...)
|
||||||
|
err := models.UpdateMilestones(mss...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ms := range mss {
|
||||||
|
g.milestones[ms.Name] = ms.ID
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user