| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // Copyright 2022 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package v1_18
-
- import (
- "fmt"
-
- "code.gitea.io/gitea/models/issues"
-
- "xorm.io/builder"
- "xorm.io/xorm"
- )
-
- func UpdateOpenMilestoneCounts(x *xorm.Engine) error {
- var openMilestoneIDs []int64
- err := x.Table("milestone").Select("id").Where(builder.Neq{"is_closed": 1}).Find(&openMilestoneIDs)
- if err != nil {
- return fmt.Errorf("error selecting open milestone IDs: %w", err)
- }
-
- for _, id := range openMilestoneIDs {
- _, err := x.ID(id).
- SetExpr("num_issues", builder.Select("count(*)").From("issue").Where(
- builder.Eq{"milestone_id": id},
- )).
- SetExpr("num_closed_issues", builder.Select("count(*)").From("issue").Where(
- builder.Eq{
- "milestone_id": id,
- "is_closed": true,
- },
- )).
- Update(&issues.Milestone{})
- if err != nil {
- return fmt.Errorf("error updating issue counts in milestone %d: %w", id, err)
- }
- _, err = x.Exec("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?",
- id,
- )
- if err != nil {
- return fmt.Errorf("error setting completeness on milestone %d: %w", id, err)
- }
- }
-
- return nil
- }
|