Fix handling of migration errors (#12928)

* Fix handling of migration errors

The migration type selection screen PR did not correctly handle errors
and any user input error on the migration page would simply redirect
back to the selection page. This meant that the error would simply be
lost and the user would be none the wiser as to what happened.

Signed-off-by: Andrew Thornton <art27@cantab.net>

* make gen-swagger

Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
zeripath 2020-09-23 21:25:46 +01:00 committed by GitHub
parent f215e015df
commit 3f522cdaad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 15 deletions

View file

@ -11,6 +11,7 @@ import (
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/routers/utils" "code.gitea.io/gitea/routers/utils"
"gitea.com/macaron/binding" "gitea.com/macaron/binding"
@ -57,11 +58,11 @@ func (f *CreateRepoForm) Validate(ctx *macaron.Context, errs binding.Errors) bin
// this is used to interact with web ui // this is used to interact with web ui
type MigrateRepoForm struct { type MigrateRepoForm struct {
// required: true // required: true
CloneAddr string `json:"clone_addr" binding:"Required"` CloneAddr string `json:"clone_addr" binding:"Required"`
Service int `json:"service"` Service structs.GitServiceType `json:"service"`
AuthUsername string `json:"auth_username"` AuthUsername string `json:"auth_username"`
AuthPassword string `json:"auth_password"` AuthPassword string `json:"auth_password"`
AuthToken string `json:"auth_token"` AuthToken string `json:"auth_token"`
// required: true // required: true
UID int64 `json:"uid" binding:"Required"` UID int64 `json:"uid" binding:"Required"`
// required: true // required: true

View file

@ -94,9 +94,11 @@ func handleMigrateError(ctx *context.Context, owner *models.User, err error, nam
func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
ctx.Data["Title"] = ctx.Tr("new_migrate") ctx.Data["Title"] = ctx.Tr("new_migrate")
// Plain git should be first // Plain git should be first
ctx.Data["service"] = form.Service ctx.Data["service"] = structs.GitServiceType(form.Service)
ctx.Data["Services"] = append([]structs.GitServiceType{structs.PlainGitService}, structs.SupportedFullGitService...) ctx.Data["Services"] = append([]structs.GitServiceType{structs.PlainGitService}, structs.SupportedFullGitService...)
tpl := base.TplName("repo/migrate/" + structs.GitServiceType(form.Service).Name())
ctxUser := checkContextUser(ctx, form.UID) ctxUser := checkContextUser(ctx, form.UID)
if ctx.Written() { if ctx.Written() {
return return
@ -104,7 +106,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
ctx.Data["ContextUser"] = ctxUser ctx.Data["ContextUser"] = ctxUser
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, tplMigrate) ctx.HTML(200, tpl)
return return
} }
@ -115,11 +117,11 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
addrErr := err.(models.ErrInvalidCloneAddr) addrErr := err.(models.ErrInvalidCloneAddr)
switch { switch {
case addrErr.IsURLError: case addrErr.IsURLError:
ctx.RenderWithErr(ctx.Tr("form.url_error"), tplMigrate, &form) ctx.RenderWithErr(ctx.Tr("form.url_error"), tpl, &form)
case addrErr.IsPermissionDenied: case addrErr.IsPermissionDenied:
ctx.RenderWithErr(ctx.Tr("repo.migrate.permission_denied"), tplMigrate, &form) ctx.RenderWithErr(ctx.Tr("repo.migrate.permission_denied"), tpl, &form)
case addrErr.IsInvalidPath: case addrErr.IsInvalidPath:
ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), tplMigrate, &form) ctx.RenderWithErr(ctx.Tr("repo.migrate.invalid_local_path"), tpl, &form)
default: default:
ctx.ServerError("Unknown error", err) ctx.ServerError("Unknown error", err)
} }
@ -159,7 +161,7 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
err = models.CheckCreateRepository(ctx.User, ctxUser, opts.RepoName) err = models.CheckCreateRepository(ctx.User, ctxUser, opts.RepoName)
if err != nil { if err != nil {
handleMigrateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form) handleMigrateError(ctx, ctxUser, err, "MigratePost", tpl, &form)
return return
} }
@ -169,5 +171,5 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) {
return return
} }
handleMigrateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form) handleMigrateError(ctx, ctxUser, err, "MigratePost", tpl, &form)
} }

View file

@ -13231,6 +13231,12 @@
}, },
"x-go-package": "code.gitea.io/gitea/modules/structs" "x-go-package": "code.gitea.io/gitea/modules/structs"
}, },
"GitServiceType": {
"description": "GitServiceType represents a git service",
"type": "integer",
"format": "int64",
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"GitTreeResponse": { "GitTreeResponse": {
"description": "GitTreeResponse returns a git tree", "description": "GitTreeResponse returns a git tree",
"type": "object", "type": "object",
@ -13658,9 +13664,7 @@
"x-go-name": "RepoName" "x-go-name": "RepoName"
}, },
"service": { "service": {
"type": "integer", "$ref": "#/definitions/GitServiceType"
"format": "int64",
"x-go-name": "Service"
}, },
"uid": { "uid": {
"type": "integer", "type": "integer",