code.gitea.io/gitea@v1.21.7/models/migrations/v1_13/v140.go (about)

     1  // Copyright 2020 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package v1_13 //nolint
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"code.gitea.io/gitea/models/migrations/base"
    10  	"code.gitea.io/gitea/modules/setting"
    11  
    12  	"xorm.io/xorm"
    13  )
    14  
    15  func FixLanguageStatsToSaveSize(x *xorm.Engine) error {
    16  	// LanguageStat see models/repo_language_stats.go
    17  	type LanguageStat struct {
    18  		Size int64 `xorm:"NOT NULL DEFAULT 0"`
    19  	}
    20  
    21  	// RepoIndexerType specifies the repository indexer type
    22  	type RepoIndexerType int
    23  
    24  	const (
    25  		// RepoIndexerTypeCode code indexer - 0
    26  		RepoIndexerTypeCode RepoIndexerType = iota //nolint:unused
    27  		// RepoIndexerTypeStats repository stats indexer - 1
    28  		RepoIndexerTypeStats
    29  	)
    30  
    31  	// RepoIndexerStatus see models/repo_indexer.go
    32  	type RepoIndexerStatus struct {
    33  		IndexerType RepoIndexerType `xorm:"INDEX(s) NOT NULL DEFAULT 0"`
    34  	}
    35  
    36  	if err := x.Sync(new(LanguageStat)); err != nil {
    37  		return fmt.Errorf("Sync: %w", err)
    38  	}
    39  
    40  	x.Delete(&RepoIndexerStatus{IndexerType: RepoIndexerTypeStats})
    41  
    42  	// Delete language stat statuses
    43  	truncExpr := "TRUNCATE TABLE"
    44  	if setting.Database.Type.IsSQLite3() {
    45  		truncExpr = "DELETE FROM"
    46  	}
    47  
    48  	// Delete language stats
    49  	if _, err := x.Exec(fmt.Sprintf("%s language_stat", truncExpr)); err != nil {
    50  		return err
    51  	}
    52  
    53  	sess := x.NewSession()
    54  	defer sess.Close()
    55  	return base.DropTableColumns(sess, "language_stat", "percentage")
    56  }