Skip to content

Commit 7a3a90a

Browse files
authored
Fix wrong original git service type on a migrated repository (#9693)
1 parent 3143bb1 commit 7a3a90a

File tree

7 files changed

+76
-44
lines changed

7 files changed

+76
-44
lines changed

models/migrations/migrations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ var migrations = []Migration{
292292
NewMigration("Add block on rejected reviews branch protection", addBlockOnRejectedReviews),
293293
// v118 -> v119
294294
NewMigration("Add commit id and stale to reviews", addReviewCommitAndStale),
295+
// v119 -> v120
296+
NewMigration("Fix migrated repositories' git service type", fixMigratedRepositoryServiceType),
295297
}
296298

297299
// Migrate database to current version

models/migrations/v119.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package migrations
6+
7+
import (
8+
"code.gitea.io/gitea/modules/structs"
9+
10+
"xorm.io/xorm"
11+
)
12+
13+
func fixMigratedRepositoryServiceType(x *xorm.Engine) error {
14+
_, err := x.Exec("UPDATE repository SET original_service_type = ? WHERE original_url LIKE 'https://github.com/%'", structs.GithubService)
15+
return err
16+
}

models/repo.go

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,17 +1071,18 @@ func initRepoCommit(tmpPath string, repo *Repository, u *User) (err error) {
10711071

10721072
// CreateRepoOptions contains the create repository options
10731073
type CreateRepoOptions struct {
1074-
Name string
1075-
Description string
1076-
OriginalURL string
1077-
Gitignores string
1078-
IssueLabels string
1079-
License string
1080-
Readme string
1081-
IsPrivate bool
1082-
IsMirror bool
1083-
AutoInit bool
1084-
Status RepositoryStatus
1074+
Name string
1075+
Description string
1076+
OriginalURL string
1077+
GitServiceType structs.GitServiceType
1078+
Gitignores string
1079+
IssueLabels string
1080+
License string
1081+
Readme string
1082+
IsPrivate bool
1083+
IsMirror bool
1084+
AutoInit bool
1085+
Status RepositoryStatus
10851086
}
10861087

10871088
func getRepoInitFile(tp, name string) ([]byte, error) {
@@ -1369,6 +1370,7 @@ func CreateRepository(doer, u *User, opts CreateRepoOptions) (_ *Repository, err
13691370
LowerName: strings.ToLower(opts.Name),
13701371
Description: opts.Description,
13711372
OriginalURL: opts.OriginalURL,
1373+
OriginalServiceType: opts.GitServiceType,
13721374
IsPrivate: opts.IsPrivate,
13731375
IsFsckEnabled: !opts.IsMirror,
13741376
CloseIssuesViaCommitInAnyBranch: setting.Repository.DefaultCloseIssuesViaCommitsInAnyBranch,

models/task.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,13 @@ func CreateMigrateTask(doer, u *User, opts base.MigrateOptions) (*Task, error) {
194194
}
195195

196196
repo, err := CreateRepository(doer, u, CreateRepoOptions{
197-
Name: opts.RepoName,
198-
Description: opts.Description,
199-
OriginalURL: opts.OriginalURL,
200-
IsPrivate: opts.Private,
201-
IsMirror: opts.Mirror,
202-
Status: RepositoryBeingMigrated,
197+
Name: opts.RepoName,
198+
Description: opts.Description,
199+
OriginalURL: opts.OriginalURL,
200+
GitServiceType: opts.GitServiceType,
201+
IsPrivate: opts.Private,
202+
IsMirror: opts.Mirror,
203+
Status: RepositoryBeingMigrated,
203204
})
204205
if err != nil {
205206
task.EndTime = timeutil.TimeStampNow()

modules/migrations/gitea.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,13 @@ func (g *GiteaLocalUploader) CreateRepo(repo *base.Repository, opts base.Migrate
101101
var r *models.Repository
102102
if opts.MigrateToRepoID <= 0 {
103103
r, err = models.CreateRepository(g.doer, owner, models.CreateRepoOptions{
104-
Name: g.repoName,
105-
Description: repo.Description,
106-
OriginalURL: repo.OriginalURL,
107-
IsPrivate: opts.Private,
108-
IsMirror: opts.Mirror,
109-
Status: models.RepositoryBeingMigrated,
104+
Name: g.repoName,
105+
Description: repo.Description,
106+
OriginalURL: repo.OriginalURL,
107+
GitServiceType: opts.GitServiceType,
108+
IsPrivate: opts.Private,
109+
IsMirror: opts.Mirror,
110+
Status: models.RepositoryBeingMigrated,
110111
})
111112
} else {
112113
r, err = models.GetRepositoryByID(opts.MigrateToRepoID)

routers/api/v1/repo/repo.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -485,12 +485,13 @@ func Migrate(ctx *context.APIContext, form auth.MigrateRepoForm) {
485485
}
486486

487487
repo, err := models.CreateRepository(ctx.User, ctxUser, models.CreateRepoOptions{
488-
Name: opts.RepoName,
489-
Description: opts.Description,
490-
OriginalURL: form.CloneAddr,
491-
IsPrivate: opts.Private,
492-
IsMirror: opts.Mirror,
493-
Status: models.RepositoryBeingMigrated,
488+
Name: opts.RepoName,
489+
Description: opts.Description,
490+
OriginalURL: form.CloneAddr,
491+
GitServiceType: gitServiceType,
492+
IsPrivate: opts.Private,
493+
IsMirror: opts.Mirror,
494+
Status: models.RepositoryBeingMigrated,
494495
})
495496
if err != nil {
496497
handleMigrateError(ctx, ctxUser, remoteAddr, err)

routers/repo/repo.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package repo
66

77
import (
88
"fmt"
9+
"net/url"
910
"os"
1011
"path"
1112
"strings"
@@ -18,6 +19,7 @@ import (
1819
"code.gitea.io/gitea/modules/log"
1920
"code.gitea.io/gitea/modules/migrations"
2021
"code.gitea.io/gitea/modules/setting"
22+
"code.gitea.io/gitea/modules/structs"
2123
"code.gitea.io/gitea/modules/task"
2224
"code.gitea.io/gitea/modules/util"
2325
repo_service "code.gitea.io/gitea/services/repository"
@@ -330,22 +332,29 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
330332
return
331333
}
332334

335+
var gitServiceType = structs.PlainGitService
336+
u, err := url.Parse(form.CloneAddr)
337+
if err == nil && strings.EqualFold(u.Host, "github.com") {
338+
gitServiceType = structs.GithubService
339+
}
340+
333341
var opts = migrations.MigrateOptions{
334-
OriginalURL: form.CloneAddr,
335-
CloneAddr: remoteAddr,
336-
RepoName: form.RepoName,
337-
Description: form.Description,
338-
Private: form.Private || setting.Repository.ForcePrivate,
339-
Mirror: form.Mirror,
340-
AuthUsername: form.AuthUsername,
341-
AuthPassword: form.AuthPassword,
342-
Wiki: form.Wiki,
343-
Issues: form.Issues,
344-
Milestones: form.Milestones,
345-
Labels: form.Labels,
346-
Comments: true,
347-
PullRequests: form.PullRequests,
348-
Releases: form.Releases,
342+
OriginalURL: form.CloneAddr,
343+
GitServiceType: gitServiceType,
344+
CloneAddr: remoteAddr,
345+
RepoName: form.RepoName,
346+
Description: form.Description,
347+
Private: form.Private || setting.Repository.ForcePrivate,
348+
Mirror: form.Mirror,
349+
AuthUsername: form.AuthUsername,
350+
AuthPassword: form.AuthPassword,
351+
Wiki: form.Wiki,
352+
Issues: form.Issues,
353+
Milestones: form.Milestones,
354+
Labels: form.Labels,
355+
Comments: true,
356+
PullRequests: form.PullRequests,
357+
Releases: form.Releases,
349358
}
350359
if opts.Mirror {
351360
opts.Issues = false

0 commit comments

Comments
 (0)