aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--models/issue.go6
-rw-r--r--routers/api/v1/repo/milestone.go8
2 files changed, 13 insertions, 1 deletions
diff --git a/models/issue.go b/models/issue.go
index cc3e4ad0..dbe01f6f 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -1405,6 +1405,10 @@ func (m *Milestone) State() api.StateType {
return api.STATE_OPEN
}
+func (m *Milestone) ChangeStatus(isClosed bool) error {
+ return ChangeMilestoneStatus(m, isClosed)
+}
+
func (m *Milestone) APIFormat() *api.Milestone {
apiMilestone := &api.Milestone{
ID: m.ID,
@@ -1513,6 +1517,8 @@ func MilestoneStats(repoID int64) (open int64, closed int64) {
}
// ChangeMilestoneStatus changes the milestone open/closed status.
+// If milestone passes with changed values, those values will be
+// updated to database as well.
func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
repo, err := GetRepositoryByID(m.RepoID)
if err != nil {
diff --git a/routers/api/v1/repo/milestone.go b/routers/api/v1/repo/milestone.go
index 2dcc3a52..bd408f63 100644
--- a/routers/api/v1/repo/milestone.go
+++ b/routers/api/v1/repo/milestone.go
@@ -81,10 +81,16 @@ func EditMilestone(ctx *context.APIContext, form api.EditMilestoneOption) {
milestone.Deadline = *form.Deadline
}
- if err := models.UpdateMilestone(milestone); err != nil {
+ if form.State != nil {
+ if err = milestone.ChangeStatus(api.STATE_CLOSED == api.StateType(*form.State)); err != nil {
+ ctx.Error(500, "ChangeStatus", err)
+ return
+ }
+ } else if err = models.UpdateMilestone(milestone); err != nil {
ctx.Handle(500, "UpdateMilestone", err)
return
}
+
ctx.JSON(200, milestone.APIFormat())
}