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:
parent
f215e015df
commit
3f522cdaad
3 changed files with 22 additions and 15 deletions
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in a new issue