gitea源码

v229.go 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package v1_18
  4. import (
  5. "fmt"
  6. "code.gitea.io/gitea/models/issues"
  7. "xorm.io/builder"
  8. "xorm.io/xorm"
  9. )
  10. func UpdateOpenMilestoneCounts(x *xorm.Engine) error {
  11. var openMilestoneIDs []int64
  12. err := x.Table("milestone").Select("id").Where(builder.Neq{"is_closed": 1}).Find(&openMilestoneIDs)
  13. if err != nil {
  14. return fmt.Errorf("error selecting open milestone IDs: %w", err)
  15. }
  16. for _, id := range openMilestoneIDs {
  17. _, err := x.ID(id).
  18. SetExpr("num_issues", builder.Select("count(*)").From("issue").Where(
  19. builder.Eq{"milestone_id": id},
  20. )).
  21. SetExpr("num_closed_issues", builder.Select("count(*)").From("issue").Where(
  22. builder.Eq{
  23. "milestone_id": id,
  24. "is_closed": true,
  25. },
  26. )).
  27. Update(&issues.Milestone{})
  28. if err != nil {
  29. return fmt.Errorf("error updating issue counts in milestone %d: %w", id, err)
  30. }
  31. _, err = x.Exec("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?",
  32. id,
  33. )
  34. if err != nil {
  35. return fmt.Errorf("error setting completeness on milestone %d: %w", id, err)
  36. }
  37. }
  38. return nil
  39. }