@@ -311,71 +311,74 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
311
311
return sess .Commit ()
312
312
}
313
313
314
- func changeMilestoneIssueStats (e * xorm.Session , issue * Issue ) error {
315
- if issue .MilestoneID == 0 {
316
- return nil
314
+ func updateMilestoneTotalNum (e Engine , milestoneID int64 ) (err error ) {
315
+ if _ , err = e .Exec ("UPDATE `milestone` SET num_issues=(SELECT count(*) FROM issue WHERE milestone_id=?) WHERE id=?" ,
316
+ milestoneID ,
317
+ milestoneID ,
318
+ ); err != nil {
319
+ return
317
320
}
318
321
319
- m , err := getMilestoneByRepoID (e , issue .RepoID , issue .MilestoneID )
320
- if err != nil {
321
- return err
322
- }
322
+ _ , err = e .Exec ("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?" ,
323
+ milestoneID ,
324
+ )
323
325
324
- if issue .IsClosed {
325
- m .NumOpenIssues --
326
- m .NumClosedIssues ++
327
- } else {
328
- m .NumOpenIssues ++
329
- m .NumClosedIssues --
326
+ return
327
+ }
328
+
329
+ func updateMilestoneClosedNum (e Engine , milestoneID int64 ) (err error ) {
330
+ if _ , err = e .Exec ("UPDATE `milestone` SET num_closed_issues=(SELECT count(*) FROM issue WHERE milestone_id=? AND is_closed=?) WHERE id=?" ,
331
+ milestoneID ,
332
+ true ,
333
+ milestoneID ,
334
+ ); err != nil {
335
+ return
330
336
}
331
337
332
- return updateMilestone (e , m )
338
+ _ , err = e .Exec ("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?" ,
339
+ milestoneID ,
340
+ )
341
+ return
333
342
}
334
343
335
344
func changeMilestoneAssign (e * xorm.Session , doer * User , issue * Issue , oldMilestoneID int64 ) error {
345
+ if err := updateIssueCols (e , issue , "milestone_id" ); err != nil {
346
+ return err
347
+ }
348
+
336
349
if oldMilestoneID > 0 {
337
- m , err := getMilestoneByRepoID (e , issue .RepoID , oldMilestoneID )
338
- if err != nil {
350
+ if err := updateMilestoneTotalNum (e , oldMilestoneID ); err != nil {
339
351
return err
340
352
}
341
-
342
- m .NumIssues --
343
353
if issue .IsClosed {
344
- m .NumClosedIssues --
345
- }
346
-
347
- if err = updateMilestone (e , m ); err != nil {
348
- return err
354
+ if err := updateMilestoneClosedNum (e , oldMilestoneID ); err != nil {
355
+ return err
356
+ }
349
357
}
350
358
}
351
359
352
360
if issue .MilestoneID > 0 {
353
- m , err := getMilestoneByRepoID (e , issue .RepoID , issue .MilestoneID )
354
- if err != nil {
361
+ if err := updateMilestoneTotalNum (e , issue .MilestoneID ); err != nil {
355
362
return err
356
363
}
357
-
358
- m .NumIssues ++
359
364
if issue .IsClosed {
360
- m .NumClosedIssues ++
365
+ if err := updateMilestoneClosedNum (e , issue .MilestoneID ); err != nil {
366
+ return err
367
+ }
361
368
}
369
+ }
362
370
363
- if err = updateMilestone (e , m ); err != nil {
371
+ if oldMilestoneID > 0 || issue .MilestoneID > 0 {
372
+ if err := issue .loadRepo (e ); err != nil {
364
373
return err
365
374
}
366
- }
367
-
368
- if err := issue .loadRepo (e ); err != nil {
369
- return err
370
- }
371
375
372
- if oldMilestoneID > 0 || issue .MilestoneID > 0 {
373
376
if _ , err := createMilestoneComment (e , doer , issue .Repo , issue , oldMilestoneID , issue .MilestoneID ); err != nil {
374
377
return err
375
378
}
376
379
}
377
380
378
- return updateIssueCols ( e , issue , "milestone_id" )
381
+ return nil
379
382
}
380
383
381
384
// ChangeMilestoneAssign changes assignment of milestone for issue.
0 commit comments