@@ -129,8 +129,12 @@ func GetMilestoneByRepoIDANDName(repoID int64, name string) (*Milestone, error)
129
129
130
130
// GetMilestoneByID returns the milestone via id .
131
131
func GetMilestoneByID (id int64 ) (* Milestone , error ) {
132
+ return getMilestoneByID (x , id )
133
+ }
134
+
135
+ func getMilestoneByID (e Engine , id int64 ) (* Milestone , error ) {
132
136
var m Milestone
133
- has , err := x .ID (id ).Get (& m )
137
+ has , err := e .ID (id ).Get (& m )
134
138
if err != nil {
135
139
return nil , err
136
140
} else if ! has {
@@ -155,10 +159,6 @@ func UpdateMilestone(m *Milestone, oldIsClosed bool) error {
155
159
return err
156
160
}
157
161
158
- if err := updateMilestoneCompleteness (sess , m .ID ); err != nil {
159
- return err
160
- }
161
-
162
162
// if IsClosed changed, update milestone numbers of repository
163
163
if oldIsClosed != m .IsClosed {
164
164
if err := updateRepoMilestoneNum (sess , m .RepoID ); err != nil {
@@ -171,23 +171,31 @@ func UpdateMilestone(m *Milestone, oldIsClosed bool) error {
171
171
172
172
func updateMilestone (e Engine , m * Milestone ) error {
173
173
m .Name = strings .TrimSpace (m .Name )
174
- _ , err := e .ID (m .ID ).AllCols ().
174
+ _ , err := e .ID (m .ID ).AllCols ().Update (m )
175
+ if err != nil {
176
+ return err
177
+ }
178
+ return updateMilestoneCounters (e , m .ID )
179
+ }
180
+
181
+ // updateMilestoneCounters calculates NumIssues, NumClosesIssues and Completeness
182
+ func updateMilestoneCounters (e Engine , id int64 ) error {
183
+ _ , err := e .ID (id ).
175
184
SetExpr ("num_issues" , builder .Select ("count(*)" ).From ("issue" ).Where (
176
- builder.Eq {"milestone_id" : m . ID },
185
+ builder.Eq {"milestone_id" : id },
177
186
)).
178
187
SetExpr ("num_closed_issues" , builder .Select ("count(*)" ).From ("issue" ).Where (
179
188
builder.Eq {
180
- "milestone_id" : m . ID ,
189
+ "milestone_id" : id ,
181
190
"is_closed" : true ,
182
191
},
183
192
)).
184
- Update (m )
185
- return err
186
- }
187
-
188
- func updateMilestoneCompleteness (e Engine , milestoneID int64 ) error {
189
- _ , err := e .Exec ("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?" ,
190
- milestoneID ,
193
+ Update (& Milestone {})
194
+ if err != nil {
195
+ return err
196
+ }
197
+ _ , err = e .Exec ("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?" ,
198
+ id ,
191
199
)
192
200
return err
193
201
}
@@ -256,25 +264,15 @@ func changeMilestoneAssign(e *xorm.Session, doer *User, issue *Issue, oldMilesto
256
264
}
257
265
258
266
if oldMilestoneID > 0 {
259
- if err := updateMilestoneTotalNum (e , oldMilestoneID ); err != nil {
267
+ if err := updateMilestoneCounters (e , oldMilestoneID ); err != nil {
260
268
return err
261
269
}
262
- if issue .IsClosed {
263
- if err := updateMilestoneClosedNum (e , oldMilestoneID ); err != nil {
264
- return err
265
- }
266
- }
267
270
}
268
271
269
272
if issue .MilestoneID > 0 {
270
- if err := updateMilestoneTotalNum (e , issue .MilestoneID ); err != nil {
273
+ if err := updateMilestoneCounters (e , issue .MilestoneID ); err != nil {
271
274
return err
272
275
}
273
- if issue .IsClosed {
274
- if err := updateMilestoneClosedNum (e , issue .MilestoneID ); err != nil {
275
- return err
276
- }
277
- }
278
276
}
279
277
280
278
if oldMilestoneID > 0 || issue .MilestoneID > 0 {
@@ -622,29 +620,6 @@ func updateRepoMilestoneNum(e Engine, repoID int64) error {
622
620
return err
623
621
}
624
622
625
- func updateMilestoneTotalNum (e Engine , milestoneID int64 ) (err error ) {
626
- if _ , err = e .Exec ("UPDATE `milestone` SET num_issues=(SELECT count(*) FROM issue WHERE milestone_id=?) WHERE id=?" ,
627
- milestoneID ,
628
- milestoneID ,
629
- ); err != nil {
630
- return
631
- }
632
-
633
- return updateMilestoneCompleteness (e , milestoneID )
634
- }
635
-
636
- func updateMilestoneClosedNum (e Engine , milestoneID int64 ) (err error ) {
637
- if _ , err = e .Exec ("UPDATE `milestone` SET num_closed_issues=(SELECT count(*) FROM issue WHERE milestone_id=? AND is_closed=?) WHERE id=?" ,
638
- milestoneID ,
639
- true ,
640
- milestoneID ,
641
- ); err != nil {
642
- return
643
- }
644
-
645
- return updateMilestoneCompleteness (e , milestoneID )
646
- }
647
-
648
623
// _____ _ _ _____ _
649
624
// |_ _| __ __ _ ___| | _____ __| |_ _(_)_ __ ___ ___ ___
650
625
// | || '__/ _` |/ __| |/ / _ \/ _` | | | | | '_ ` _ \ / _ \/ __|
0 commit comments