@@ -292,6 +292,8 @@ var migrations = []Migration{ | |||
NewMigration("Add block on rejected reviews branch protection", addBlockOnRejectedReviews), | |||
// v118 -> v119 | |||
NewMigration("Add commit id and stale to reviews", addReviewCommitAndStale), | |||
// v119 -> v120 | |||
NewMigration("Fix migrated repositories' git service type", fixMigratedRepositoryServiceType), | |||
} | |||
// Migrate database to current version | |||
@@ -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 | |||
type CreateRepoOptions struct { | |||
Name string | |||
Description string | |||
OriginalURL string | |||
Gitignores string | |||
IssueLabels string | |||
License string | |||
Readme string | |||
IsPrivate bool | |||
IsMirror bool | |||
AutoInit bool | |||
Status RepositoryStatus | |||
Name string | |||
Description string | |||
OriginalURL string | |||
GitServiceType structs.GitServiceType | |||
Gitignores string | |||
IssueLabels string | |||
License string | |||
Readme string | |||
IsPrivate bool | |||
IsMirror bool | |||
AutoInit bool | |||
Status RepositoryStatus | |||
} | |||
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), | |||
Description: opts.Description, | |||
OriginalURL: opts.OriginalURL, | |||
OriginalServiceType: opts.GitServiceType, | |||
IsPrivate: opts.IsPrivate, | |||
IsFsckEnabled: !opts.IsMirror, | |||
CloseIssuesViaCommitInAnyBranch: setting.Repository.DefaultCloseIssuesViaCommitsInAnyBranch, | |||
@@ -194,12 +194,13 @@ func CreateMigrateTask(doer, u *User, opts base.MigrateOptions) (*Task, error) { | |||
} | |||
repo, err := CreateRepository(doer, u, CreateRepoOptions{ | |||
Name: opts.RepoName, | |||
Description: opts.Description, | |||
OriginalURL: opts.OriginalURL, | |||
IsPrivate: opts.Private, | |||
IsMirror: opts.Mirror, | |||
Status: RepositoryBeingMigrated, | |||
Name: opts.RepoName, | |||
Description: opts.Description, | |||
OriginalURL: opts.OriginalURL, | |||
GitServiceType: opts.GitServiceType, | |||
IsPrivate: opts.Private, | |||
IsMirror: opts.Mirror, | |||
Status: RepositoryBeingMigrated, | |||
}) | |||
if err != nil { | |||
task.EndTime = timeutil.TimeStampNow() | |||
@@ -101,12 +101,13 @@ func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.Migrate | |||
var r *models.Repository | |||
if opts.MigrateToRepoID <= 0 { | |||
r, err = models.CreateRepository(g.doer, owner, models.CreateRepoOptions{ | |||
Name: g.repoName, | |||
Description: repo.Description, | |||
OriginalURL: repo.OriginalURL, | |||
IsPrivate: opts.Private, | |||
IsMirror: opts.Mirror, | |||
Status: models.RepositoryBeingMigrated, | |||
Name: g.repoName, | |||
Description: repo.Description, | |||
OriginalURL: repo.OriginalURL, | |||
GitServiceType: opts.GitServiceType, | |||
IsPrivate: opts.Private, | |||
IsMirror: opts.Mirror, | |||
Status: models.RepositoryBeingMigrated, | |||
}) | |||
} else { | |||
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{ | |||
Name: opts.RepoName, | |||
Description: opts.Description, | |||
OriginalURL: form.CloneAddr, | |||
IsPrivate: opts.Private, | |||
IsMirror: opts.Mirror, | |||
Status: models.RepositoryBeingMigrated, | |||
Name: opts.RepoName, | |||
Description: opts.Description, | |||
OriginalURL: form.CloneAddr, | |||
GitServiceType: gitServiceType, | |||
IsPrivate: opts.Private, | |||
IsMirror: opts.Mirror, | |||
Status: models.RepositoryBeingMigrated, | |||
}) | |||
if err != nil { | |||
handleMigrateError(ctx, ctxUser, remoteAddr, err) | |||
@@ -6,6 +6,7 @@ package repo | |||
import ( | |||
"fmt" | |||
"net/url" | |||
"os" | |||
"path" | |||
"strings" | |||
@@ -18,6 +19,7 @@ import ( | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/migrations" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/modules/structs" | |||
"code.gitea.io/gitea/modules/task" | |||
"code.gitea.io/gitea/modules/util" | |||
repo_service "code.gitea.io/gitea/services/repository" | |||
@@ -330,22 +332,29 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { | |||
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{ | |||
OriginalURL: form.CloneAddr, | |||
CloneAddr: remoteAddr, | |||
RepoName: form.RepoName, | |||
Description: form.Description, | |||
Private: form.Private || setting.Repository.ForcePrivate, | |||
Mirror: form.Mirror, | |||
AuthUsername: form.AuthUsername, | |||
AuthPassword: form.AuthPassword, | |||
Wiki: form.Wiki, | |||
Issues: form.Issues, | |||
Milestones: form.Milestones, | |||
Labels: form.Labels, | |||
Comments: true, | |||
PullRequests: form.PullRequests, | |||
Releases: form.Releases, | |||
OriginalURL: form.CloneAddr, | |||
GitServiceType: gitServiceType, | |||
CloneAddr: remoteAddr, | |||
RepoName: form.RepoName, | |||
Description: form.Description, | |||
Private: form.Private || setting.Repository.ForcePrivate, | |||
Mirror: form.Mirror, | |||
AuthUsername: form.AuthUsername, | |||
AuthPassword: form.AuthPassword, | |||
Wiki: form.Wiki, | |||
Issues: form.Issues, | |||
Milestones: form.Milestones, | |||
Labels: form.Labels, | |||
Comments: true, | |||
PullRequests: form.PullRequests, | |||
Releases: form.Releases, | |||
} | |||
if opts.Mirror { | |||
opts.Issues = false | |||