@@ -129,8 +129,12 @@ func GetMilestoneByRepoIDANDName(repoID int64, name string) (*Milestone, error)
129129
130130// GetMilestoneByID returns the milestone via id .
131131func GetMilestoneByID (id int64 ) (* Milestone , error ) {
132+ return getMilestoneByID (x , id )
133+ }
134+
135+ func getMilestoneByID (e Engine , id int64 ) (* Milestone , error ) {
132136 var m Milestone
133- has , err := x .ID (id ).Get (& m )
137+ has , err := e .ID (id ).Get (& m )
134138 if err != nil {
135139 return nil , err
136140 } else if ! has {
@@ -155,10 +159,6 @@ func UpdateMilestone(m *Milestone, oldIsClosed bool) error {
155159 return err
156160 }
157161
158- if err := updateMilestoneCompleteness (sess , m .ID ); err != nil {
159- return err
160- }
161-
162162 // if IsClosed changed, update milestone numbers of repository
163163 if oldIsClosed != m .IsClosed {
164164 if err := updateRepoMilestoneNum (sess , m .RepoID ); err != nil {
@@ -171,23 +171,31 @@ func UpdateMilestone(m *Milestone, oldIsClosed bool) error {
171171
172172func updateMilestone (e Engine , m * Milestone ) error {
173173 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 ).
175184 SetExpr ("num_issues" , builder .Select ("count(*)" ).From ("issue" ).Where (
176- builder.Eq {"milestone_id" : m . ID },
185+ builder.Eq {"milestone_id" : id },
177186 )).
178187 SetExpr ("num_closed_issues" , builder .Select ("count(*)" ).From ("issue" ).Where (
179188 builder.Eq {
180- "milestone_id" : m . ID ,
189+ "milestone_id" : id ,
181190 "is_closed" : true ,
182191 },
183192 )).
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 ,
191199 )
192200 return err
193201}
@@ -256,25 +264,15 @@ func changeMilestoneAssign(e *xorm.Session, doer *User, issue *Issue, oldMilesto
256264 }
257265
258266 if oldMilestoneID > 0 {
259- if err := updateMilestoneTotalNum (e , oldMilestoneID ); err != nil {
267+ if err := updateMilestoneCounters (e , oldMilestoneID ); err != nil {
260268 return err
261269 }
262- if issue .IsClosed {
263- if err := updateMilestoneClosedNum (e , oldMilestoneID ); err != nil {
264- return err
265- }
266- }
267270 }
268271
269272 if issue .MilestoneID > 0 {
270- if err := updateMilestoneTotalNum (e , issue .MilestoneID ); err != nil {
273+ if err := updateMilestoneCounters (e , issue .MilestoneID ); err != nil {
271274 return err
272275 }
273- if issue .IsClosed {
274- if err := updateMilestoneClosedNum (e , issue .MilestoneID ); err != nil {
275- return err
276- }
277- }
278276 }
279277
280278 if oldMilestoneID > 0 || issue .MilestoneID > 0 {
@@ -622,29 +620,6 @@ func updateRepoMilestoneNum(e Engine, repoID int64) error {
622620 return err
623621}
624622
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-
648623// _____ _ _ _____ _
649624// |_ _| __ __ _ ___| | _____ __| |_ _(_)_ __ ___ ___ ___
650625// | || '__/ _` |/ __| |/ / _ \/ _` | | | | | '_ ` _ \ / _ \/ __|
0 commit comments