gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package v1_21
  4. import (
  5. "fmt"
  6. "xorm.io/xorm"
  7. )
  8. // AddGitSizeAndLFSSizeToRepositoryTable: add GitSize and LFSSize columns to Repository
  9. func AddGitSizeAndLFSSizeToRepositoryTable(x *xorm.Engine) error {
  10. type Repository struct {
  11. GitSize int64 `xorm:"NOT NULL DEFAULT 0"`
  12. LFSSize int64 `xorm:"NOT NULL DEFAULT 0"`
  13. }
  14. sess := x.NewSession()
  15. defer sess.Close()
  16. if err := sess.Begin(); err != nil {
  17. return err
  18. }
  19. if err := sess.Sync(new(Repository)); err != nil {
  20. return fmt.Errorf("Sync: %w", err)
  21. }
  22. _, err := sess.Exec(`UPDATE repository SET lfs_size=(SELECT SUM(size) FROM lfs_meta_object WHERE lfs_meta_object.repository_id=repository.ID) WHERE EXISTS (SELECT 1 FROM lfs_meta_object WHERE lfs_meta_object.repository_id=repository.ID)`)
  23. if err != nil {
  24. return err
  25. }
  26. _, err = sess.Exec(`UPDATE repository SET size = 0 WHERE size IS NULL`)
  27. if err != nil {
  28. return err
  29. }
  30. _, err = sess.Exec(`UPDATE repository SET git_size = size - lfs_size WHERE size > lfs_size`)
  31. if err != nil {
  32. return err
  33. }
  34. return sess.Commit()
  35. }