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  }