summaryrefslogtreecommitdiffstats
path: root/models/migrations/v156.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2022-11-02 16:54:36 +0800
committerGitHub <noreply@github.com>2022-11-02 16:54:36 +0800
commite72acd5e5b2d043fcf0a0182a1eedaed8120c155 (patch)
tree77e4c341bef6450e5dfa7a1f61c9693527a133d0 /models/migrations/v156.go
parent4827f42f56bcc70d40e073a8502930d9cce39798 (diff)
downloadgitea-e72acd5e5b2d043fcf0a0182a1eedaed8120c155.tar.gz
gitea-e72acd5e5b2d043fcf0a0182a1eedaed8120c155.zip
Split migrations folder (#21549)
There are too many files in `models/migrations` folder so that I split them into sub folders.
Diffstat (limited to 'models/migrations/v156.go')
-rw-r--r--models/migrations/v156.go178
1 files changed, 0 insertions, 178 deletions
diff --git a/models/migrations/v156.go b/models/migrations/v156.go
deleted file mode 100644
index 2c146892d2..0000000000
--- a/models/migrations/v156.go
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2020 The Gitea Authors. All rights reserved.
-// Use of this source code is governed by a MIT-style
-// license that can be found in the LICENSE file.
-
-package migrations
-
-import (
- "fmt"
- "path/filepath"
- "strings"
-
- "code.gitea.io/gitea/modules/git"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
-
- "xorm.io/xorm"
-)
-
-// Copy paste from models/repo.go because we cannot import models package
-func repoPath(userName, repoName string) string {
- return filepath.Join(userPath(userName), strings.ToLower(repoName)+".git")
-}
-
-func userPath(userName string) string {
- return filepath.Join(setting.RepoRootPath, strings.ToLower(userName))
-}
-
-func fixPublisherIDforTagReleases(x *xorm.Engine) error {
- type Release struct {
- ID int64
- RepoID int64
- Sha1 string
- TagName string
- PublisherID int64
- }
-
- type Repository struct {
- ID int64
- OwnerID int64
- OwnerName string
- Name string
- }
-
- type User struct {
- ID int64
- Name string
- Email string
- }
-
- const batchSize = 100
- sess := x.NewSession()
- defer sess.Close()
-
- var (
- repo *Repository
- gitRepo *git.Repository
- user *User
- )
- defer func() {
- if gitRepo != nil {
- gitRepo.Close()
- }
- }()
- for start := 0; ; start += batchSize {
- releases := make([]*Release, 0, batchSize)
-
- if err := sess.Begin(); err != nil {
- return err
- }
-
- if err := sess.Limit(batchSize, start).
- Where("publisher_id = 0 OR publisher_id is null").
- Asc("repo_id", "id").Where("is_tag=?", true).
- Find(&releases); err != nil {
- return err
- }
-
- if len(releases) == 0 {
- break
- }
-
- for _, release := range releases {
- if repo == nil || repo.ID != release.RepoID {
- if gitRepo != nil {
- gitRepo.Close()
- gitRepo = nil
- }
- repo = new(Repository)
- has, err := sess.ID(release.RepoID).Get(repo)
- if err != nil {
- log.Error("Error whilst loading repository[%d] for release[%d] with tag name %s. Error: %v", release.RepoID, release.ID, release.TagName, err)
- return err
- } else if !has {
- log.Warn("Release[%d] is orphaned and refers to non-existing repository %d", release.ID, release.RepoID)
- log.Warn("This release should be deleted")
- continue
- }
-
- if repo.OwnerName == "" {
- // v120.go migration may not have been run correctly - we'll just replicate it here
- // because this appears to be a common-ish problem.
- if _, err := sess.Exec("UPDATE repository SET owner_name = (SELECT name FROM `user` WHERE `user`.id = repository.owner_id)"); err != nil {
- log.Error("Error whilst updating repository[%d] owner name", repo.ID)
- return err
- }
-
- if _, err := sess.ID(release.RepoID).Get(repo); err != nil {
- log.Error("Error whilst loading repository[%d] for release[%d] with tag name %s. Error: %v", release.RepoID, release.ID, release.TagName, err)
- return err
- }
- }
- gitRepo, err = git.OpenRepository(git.DefaultContext, repoPath(repo.OwnerName, repo.Name))
- if err != nil {
- log.Error("Error whilst opening git repo for [%d]%s/%s. Error: %v", repo.ID, repo.OwnerName, repo.Name, err)
- return err
- }
- }
-
- commit, err := gitRepo.GetTagCommit(release.TagName)
- if err != nil {
- if git.IsErrNotExist(err) {
- log.Warn("Unable to find commit %s for Tag: %s in [%d]%s/%s. Cannot update publisher ID.", err.(git.ErrNotExist).ID, release.TagName, repo.ID, repo.OwnerName, repo.Name)
- continue
- }
- log.Error("Error whilst getting commit for Tag: %s in [%d]%s/%s. Error: %v", release.TagName, repo.ID, repo.OwnerName, repo.Name, err)
- return fmt.Errorf("GetTagCommit: %w", err)
- }
-
- if commit.Author.Email == "" {
- log.Warn("Tag: %s in Repo[%d]%s/%s does not have a tagger.", release.TagName, repo.ID, repo.OwnerName, repo.Name)
- commit, err = gitRepo.GetCommit(commit.ID.String())
- if err != nil {
- if git.IsErrNotExist(err) {
- log.Warn("Unable to find commit %s for Tag: %s in [%d]%s/%s. Cannot update publisher ID.", err.(git.ErrNotExist).ID, release.TagName, repo.ID, repo.OwnerName, repo.Name)
- continue
- }
- log.Error("Error whilst getting commit for Tag: %s in [%d]%s/%s. Error: %v", release.TagName, repo.ID, repo.OwnerName, repo.Name, err)
- return fmt.Errorf("GetCommit: %w", err)
- }
- }
-
- if commit.Author.Email == "" {
- log.Warn("Tag: %s in Repo[%d]%s/%s does not have a Tagger and its underlying commit does not have an Author either!", release.TagName, repo.ID, repo.OwnerName, repo.Name)
- continue
- }
-
- if user == nil || !strings.EqualFold(user.Email, commit.Author.Email) {
- user = new(User)
- _, err = sess.Where("email=?", commit.Author.Email).Get(user)
- if err != nil {
- log.Error("Error whilst getting commit author by email: %s for Tag: %s in [%d]%s/%s. Error: %v", commit.Author.Email, release.TagName, repo.ID, repo.OwnerName, repo.Name, err)
- return err
- }
-
- user.Email = commit.Author.Email
- }
-
- if user.ID <= 0 {
- continue
- }
-
- release.PublisherID = user.ID
- if _, err := sess.ID(release.ID).Cols("publisher_id").Update(release); err != nil {
- log.Error("Error whilst updating publisher[%d] for release[%d] with tag name %s. Error: %v", release.PublisherID, release.ID, release.TagName, err)
- return err
- }
- }
- if gitRepo != nil {
- gitRepo.Close()
- }
-
- if err := sess.Commit(); err != nil {
- return err
- }
- }
-
- return nil
-}