@ -311,71 +311,74 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
return sess . Commit ( )
}
func changeMilestoneIssueStats ( e * xorm . Session , issue * Issue ) error {
if issue . MilestoneID == 0 {
return nil
func updateMilestoneTotalNum ( e Engine , milestoneID int64 ) ( err error ) {
if _ , err = e . Exec ( "UPDATE `milestone` SET num_issues=(SELECT count(*) FROM issue WHERE milestone_id=?) WHERE id=?" ,
milestoneID ,
milestoneID ,
) ; err != nil {
return
}
m , err := getMilestoneByRepoID ( e , issue . RepoID , issue . MilestoneID )
if err != nil {
return err
}
_ , err = e . Exec ( "UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?" ,
milestoneID ,
)
if issue . IsClosed {
m . NumOpenIssues --
m . NumClosedIssues ++
} else {
m . NumOpenIssues ++
m . NumClosedIssues --
return
}
func updateMilestoneClosedNum ( e Engine , milestoneID int64 ) ( err error ) {
if _ , err = e . Exec ( "UPDATE `milestone` SET num_closed_issues=(SELECT count(*) FROM issue WHERE milestone_id=? AND is_closed=?) WHERE id=?" ,
milestoneID ,
true ,
milestoneID ,
) ; err != nil {
return
}
return updateMilestone ( e , m )
_ , err = e . Exec ( "UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?" ,
milestoneID ,
)
return
}
func changeMilestoneAssign ( e * xorm . Session , doer * User , issue * Issue , oldMilestoneID int64 ) error {
if err := updateIssueCols ( e , issue , "milestone_id" ) ; err != nil {
return err
}
if oldMilestoneID > 0 {
m , err := getMilestoneByRepoID ( e , issue . RepoID , oldMilestoneID )
if err != nil {
if err := updateMilestoneTotalNum ( e , oldMilestoneID ) ; err != nil {
return err
}
m . NumIssues --
if issue . IsClosed {
m . NumClosedIssues --
}
if err = updateMilestone ( e , m ) ; err != nil {
return err
if err := updateMilestoneClosedNum ( e , oldMilestoneID ) ; err != nil {
return err
}
}
}
if issue . MilestoneID > 0 {
m , err := getMilestoneByRepoID ( e , issue . RepoID , issue . MilestoneID )
if err != nil {
if err := updateMilestoneTotalNum ( e , issue . MilestoneID ) ; err != nil {
return err
}
m . NumIssues ++
if issue . IsClosed {
m . NumClosedIssues ++
if err := updateMilestoneClosedNum ( e , issue . MilestoneID ) ; err != nil {
return err
}
}
}
if err = updateMilestone ( e , m ) ; err != nil {
if oldMilestoneID > 0 || issue . MilestoneID > 0 {
if err := issue . loadRepo ( e ) ; err != nil {
return err
}
}
if err := issue . loadRepo ( e ) ; err != nil {
return err
}
if oldMilestoneID > 0 || issue . MilestoneID > 0 {
if _ , err := createMilestoneComment ( e , doer , issue . Repo , issue , oldMilestoneID , issue . MilestoneID ) ; err != nil {
return err
}
}
return updateIssueCols ( e , issue , "milestone_id" )
return nil
}
// ChangeMilestoneAssign changes assignment of milestone for issue.