Fix wrong original git service type on a migrated repository (#9693)
This commit is contained in:
parent
3143bb10da
commit
7a3a90aca3
7 changed files with 76 additions and 44 deletions
|
@ -292,6 +292,8 @@ var migrations = []Migration{
|
||||||
NewMigration("Add block on rejected reviews branch protection", addBlockOnRejectedReviews),
|
NewMigration("Add block on rejected reviews branch protection", addBlockOnRejectedReviews),
|
||||||
// v118 -> v119
|
// v118 -> v119
|
||||||
NewMigration("Add commit id and stale to reviews", addReviewCommitAndStale),
|
NewMigration("Add commit id and stale to reviews", addReviewCommitAndStale),
|
||||||
|
// v119 -> v120
|
||||||
|
NewMigration("Fix migrated repositories' git service type", fixMigratedRepositoryServiceType),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Migrate database to current version
|
// Migrate database to current version
|
||||||
|
|
16
models/migrations/v119.go
Normal file
16
models/migrations/v119.go
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// 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 (
|
||||||
|
"code.gitea.io/gitea/modules/structs"
|
||||||
|
|
||||||
|
"xorm.io/xorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func fixMigratedRepositoryServiceType(x *xorm.Engine) error {
|
||||||
|
_, err := x.Exec("UPDATE repository SET original_service_type = ? WHERE original_url LIKE 'https://github.com/%'", structs.GithubService)
|
||||||
|
return err
|
||||||
|
}
|
|
@ -1071,17 +1071,18 @@ func initRepoCommit(tmpPath string, repo *Repository, u *User) (err error) {
|
||||||
|
|
||||||
// CreateRepoOptions contains the create repository options
|
// CreateRepoOptions contains the create repository options
|
||||||
type CreateRepoOptions struct {
|
type CreateRepoOptions struct {
|
||||||
Name string
|
Name string
|
||||||
Description string
|
Description string
|
||||||
OriginalURL string
|
OriginalURL string
|
||||||
Gitignores string
|
GitServiceType structs.GitServiceType
|
||||||
IssueLabels string
|
Gitignores string
|
||||||
License string
|
IssueLabels string
|
||||||
Readme string
|
License string
|
||||||
IsPrivate bool
|
Readme string
|
||||||
IsMirror bool
|
IsPrivate bool
|
||||||
AutoInit bool
|
IsMirror bool
|
||||||
Status RepositoryStatus
|
AutoInit bool
|
||||||
|
Status RepositoryStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRepoInitFile(tp, name string) ([]byte, error) {
|
func getRepoInitFile(tp, name string) ([]byte, error) {
|
||||||
|
@ -1369,6 +1370,7 @@ func CreateRepository(doer, u *User, opts CreateRepoOptions) (_ *Repository, err
|
||||||
LowerName: strings.ToLower(opts.Name),
|
LowerName: strings.ToLower(opts.Name),
|
||||||
Description: opts.Description,
|
Description: opts.Description,
|
||||||
OriginalURL: opts.OriginalURL,
|
OriginalURL: opts.OriginalURL,
|
||||||
|
OriginalServiceType: opts.GitServiceType,
|
||||||
IsPrivate: opts.IsPrivate,
|
IsPrivate: opts.IsPrivate,
|
||||||
IsFsckEnabled: !opts.IsMirror,
|
IsFsckEnabled: !opts.IsMirror,
|
||||||
CloseIssuesViaCommitInAnyBranch: setting.Repository.DefaultCloseIssuesViaCommitsInAnyBranch,
|
CloseIssuesViaCommitInAnyBranch: setting.Repository.DefaultCloseIssuesViaCommitsInAnyBranch,
|
||||||
|
|
|
@ -194,12 +194,13 @@ func CreateMigrateTask(doer, u *User, opts base.MigrateOptions) (*Task, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
repo, err := CreateRepository(doer, u, CreateRepoOptions{
|
repo, err := CreateRepository(doer, u, CreateRepoOptions{
|
||||||
Name: opts.RepoName,
|
Name: opts.RepoName,
|
||||||
Description: opts.Description,
|
Description: opts.Description,
|
||||||
OriginalURL: opts.OriginalURL,
|
OriginalURL: opts.OriginalURL,
|
||||||
IsPrivate: opts.Private,
|
GitServiceType: opts.GitServiceType,
|
||||||
IsMirror: opts.Mirror,
|
IsPrivate: opts.Private,
|
||||||
Status: RepositoryBeingMigrated,
|
IsMirror: opts.Mirror,
|
||||||
|
Status: RepositoryBeingMigrated,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
task.EndTime = timeutil.TimeStampNow()
|
task.EndTime = timeutil.TimeStampNow()
|
||||||
|
|
|
@ -101,12 +101,13 @@ func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.Migrate
|
||||||
var r *models.Repository
|
var r *models.Repository
|
||||||
if opts.MigrateToRepoID <= 0 {
|
if opts.MigrateToRepoID <= 0 {
|
||||||
r, err = models.CreateRepository(g.doer, owner, models.CreateRepoOptions{
|
r, err = models.CreateRepository(g.doer, owner, models.CreateRepoOptions{
|
||||||
Name: g.repoName,
|
Name: g.repoName,
|
||||||
Description: repo.Description,
|
Description: repo.Description,
|
||||||
OriginalURL: repo.OriginalURL,
|
OriginalURL: repo.OriginalURL,
|
||||||
IsPrivate: opts.Private,
|
GitServiceType: opts.GitServiceType,
|
||||||
IsMirror: opts.Mirror,
|
IsPrivate: opts.Private,
|
||||||
Status: models.RepositoryBeingMigrated,
|
IsMirror: opts.Mirror,
|
||||||
|
Status: models.RepositoryBeingMigrated,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
r, err = models.GetRepositoryByID(opts.MigrateToRepoID)
|
r, err = models.GetRepositoryByID(opts.MigrateToRepoID)
|
||||||
|
|
|
@ -485,12 +485,13 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
|
||||||
}
|
}
|
||||||
|
|
||||||
repo, err := models.CreateRepository(ctx.User, ctxUser, models.CreateRepoOptions{
|
repo, err := models.CreateRepository(ctx.User, ctxUser, models.CreateRepoOptions{
|
||||||
Name: opts.RepoName,
|
Name: opts.RepoName,
|
||||||
Description: opts.Description,
|
Description: opts.Description,
|
||||||
OriginalURL: form.CloneAddr,
|
OriginalURL: form.CloneAddr,
|
||||||
IsPrivate: opts.Private,
|
GitServiceType: gitServiceType,
|
||||||
IsMirror: opts.Mirror,
|
IsPrivate: opts.Private,
|
||||||
Status: models.RepositoryBeingMigrated,
|
IsMirror: opts.Mirror,
|
||||||
|
Status: models.RepositoryBeingMigrated,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handleMigrateError(ctx, ctxUser, remoteAddr, err)
|
handleMigrateError(ctx, ctxUser, remoteAddr, err)
|
||||||
|
|
|
@ -6,6 +6,7 @@ package repo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -18,6 +19,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/migrations"
|
"code.gitea.io/gitea/modules/migrations"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/task"
|
"code.gitea.io/gitea/modules/task"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
repo_service "code.gitea.io/gitea/services/repository"
|
repo_service "code.gitea.io/gitea/services/repository"
|
||||||
|
@ -330,22 +332,29 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var gitServiceType = structs.PlainGitService
|
||||||
|
u, err := url.Parse(form.CloneAddr)
|
||||||
|
if err == nil && strings.EqualFold(u.Host, "github.com") {
|
||||||
|
gitServiceType = structs.GithubService
|
||||||
|
}
|
||||||
|
|
||||||
var opts = migrations.MigrateOptions{
|
var opts = migrations.MigrateOptions{
|
||||||
OriginalURL: form.CloneAddr,
|
OriginalURL: form.CloneAddr,
|
||||||
CloneAddr: remoteAddr,
|
GitServiceType: gitServiceType,
|
||||||
RepoName: form.RepoName,
|
CloneAddr: remoteAddr,
|
||||||
Description: form.Description,
|
RepoName: form.RepoName,
|
||||||
Private: form.Private || setting.Repository.ForcePrivate,
|
Description: form.Description,
|
||||||
Mirror: form.Mirror,
|
Private: form.Private || setting.Repository.ForcePrivate,
|
||||||
AuthUsername: form.AuthUsername,
|
Mirror: form.Mirror,
|
||||||
AuthPassword: form.AuthPassword,
|
AuthUsername: form.AuthUsername,
|
||||||
Wiki: form.Wiki,
|
AuthPassword: form.AuthPassword,
|
||||||
Issues: form.Issues,
|
Wiki: form.Wiki,
|
||||||
Milestones: form.Milestones,
|
Issues: form.Issues,
|
||||||
Labels: form.Labels,
|
Milestones: form.Milestones,
|
||||||
Comments: true,
|
Labels: form.Labels,
|
||||||
PullRequests: form.PullRequests,
|
Comments: true,
|
||||||
Releases: form.Releases,
|
PullRequests: form.PullRequests,
|
||||||
|
Releases: form.Releases,
|
||||||
}
|
}
|
||||||
if opts.Mirror {
|
if opts.Mirror {
|
||||||
opts.Issues = false
|
opts.Issues = false
|
||||||
|
|
Reference in a new issue