@@ -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 {
@@ -558,29 +556,6 @@ func updateRepoMilestoneNum(e Engine, repoID int64) error {
558
556
return err
559
557
}
560
558
561
- func updateMilestoneTotalNum (e Engine , milestoneID int64 ) (err error ) {
562
- if _ , err = e .Exec ("UPDATE `milestone` SET num_issues=(SELECT count(*) FROM issue WHERE milestone_id=?) WHERE id=?" ,
563
- milestoneID ,
564
- milestoneID ,
565
- ); err != nil {
566
- return
567
- }
568
-
569
- return updateMilestoneCompleteness (e , milestoneID )
570
- }
571
-
572
- func updateMilestoneClosedNum (e Engine , milestoneID int64 ) (err error ) {
573
- if _ , err = e .Exec ("UPDATE `milestone` SET num_closed_issues=(SELECT count(*) FROM issue WHERE milestone_id=? AND is_closed=?) WHERE id=?" ,
574
- milestoneID ,
575
- true ,
576
- milestoneID ,
577
- ); err != nil {
578
- return
579
- }
580
-
581
- return updateMilestoneCompleteness (e , milestoneID )
582
- }
583
-
584
559
// _____ _ _ _____ _
585
560
// |_ _| __ __ _ ___| | _____ __| |_ _(_)_ __ ___ ___ ___
586
561
// | || '__/ _` |/ __| |/ / _ \/ _` | | | | | '_ ` _ \ / _ \/ __|
0 commit comments