code.gitea.io/gitea@v1.21.7/models/migrations/v1_21/v263.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_21 //nolint 5 6 import ( 7 "fmt" 8 9 "xorm.io/xorm" 10 ) 11 12 // AddGitSizeAndLFSSizeToRepositoryTable: add GitSize and LFSSize columns to Repository 13 func AddGitSizeAndLFSSizeToRepositoryTable(x *xorm.Engine) error { 14 type Repository struct { 15 GitSize int64 `xorm:"NOT NULL DEFAULT 0"` 16 LFSSize int64 `xorm:"NOT NULL DEFAULT 0"` 17 } 18 19 sess := x.NewSession() 20 defer sess.Close() 21 22 if err := sess.Begin(); err != nil { 23 return err 24 } 25 26 if err := sess.Sync(new(Repository)); err != nil { 27 return fmt.Errorf("Sync: %w", err) 28 } 29 30 _, 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)`) 31 if err != nil { 32 return err 33 } 34 35 _, err = sess.Exec(`UPDATE repository SET size = 0 WHERE size IS NULL`) 36 if err != nil { 37 return err 38 } 39 40 _, err = sess.Exec(`UPDATE repository SET git_size = size - lfs_size WHERE size > lfs_size`) 41 if err != nil { 42 return err 43 } 44 45 return sess.Commit() 46 }