code.gitea.io/gitea@v1.21.7/models/migrations/v1_10/v100.go (about)

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package v1_10 //nolint
     5  
     6  import (
     7  	"net/url"
     8  	"strings"
     9  	"time"
    10  
    11  	"xorm.io/xorm"
    12  )
    13  
    14  func UpdateMigrationServiceTypes(x *xorm.Engine) error {
    15  	type Repository struct {
    16  		ID                  int64
    17  		OriginalServiceType int    `xorm:"index default(0)"`
    18  		OriginalURL         string `xorm:"VARCHAR(2048)"`
    19  	}
    20  
    21  	if err := x.Sync(new(Repository)); err != nil {
    22  		return err
    23  	}
    24  
    25  	var last int
    26  	const batchSize = 50
    27  	for {
    28  		results := make([]Repository, 0, batchSize)
    29  		err := x.Where("original_url <> '' AND original_url IS NOT NULL").
    30  			And("original_service_type = 0 OR original_service_type IS NULL").
    31  			OrderBy("id").
    32  			Limit(batchSize, last).
    33  			Find(&results)
    34  		if err != nil {
    35  			return err
    36  		}
    37  		if len(results) == 0 {
    38  			break
    39  		}
    40  		last += len(results)
    41  
    42  		const PlainGitService = 1 // 1 plain git service
    43  		const GithubService = 2   // 2 github.com
    44  
    45  		for _, res := range results {
    46  			u, err := url.Parse(res.OriginalURL)
    47  			if err != nil {
    48  				return err
    49  			}
    50  			serviceType := PlainGitService
    51  			if strings.EqualFold(u.Host, "github.com") {
    52  				serviceType = GithubService
    53  			}
    54  			_, err = x.Exec("UPDATE repository SET original_service_type = ? WHERE id = ?", serviceType, res.ID)
    55  			if err != nil {
    56  				return err
    57  			}
    58  		}
    59  	}
    60  
    61  	type ExternalLoginUser struct {
    62  		ExternalID        string         `xorm:"pk NOT NULL"`
    63  		UserID            int64          `xorm:"INDEX NOT NULL"`
    64  		LoginSourceID     int64          `xorm:"pk NOT NULL"`
    65  		RawData           map[string]any `xorm:"TEXT JSON"`
    66  		Provider          string         `xorm:"index VARCHAR(25)"`
    67  		Email             string
    68  		Name              string
    69  		FirstName         string
    70  		LastName          string
    71  		NickName          string
    72  		Description       string
    73  		AvatarURL         string
    74  		Location          string
    75  		AccessToken       string
    76  		AccessTokenSecret string
    77  		RefreshToken      string
    78  		ExpiresAt         time.Time
    79  	}
    80  
    81  	return x.Sync(new(ExternalLoginUser))
    82  }