mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-24 16:34:58 +02:00
refactor: clean up git migration forms (#39672)
Only extracted shared code, removed unnecessary code, and use form-fetch-action to replace RenderWithErrDeprecated, slightly refactored JS to use data-global-init Nothing else is changed, although there are still many problems. Written by AI Diff with hiding spaces: https://github.com/go-gitea/gitea/pull/39672/changes?w=1
This commit is contained in:
1 parent
89ec271d9c
commit
cc623c5f2f
18 files changed
+274
-724
No files matched your search
+30
-53
@@ -22,7 +22,6 @@ import (
|
||||
"gitea.dev/modules/structs"
|
||||
"gitea.dev/modules/templates"
|
||||
"gitea.dev/modules/util"
|
||||
"gitea.dev/modules/web"
|
||||
"gitea.dev/services/context"
|
||||
"gitea.dev/services/forms"
|
||||
"gitea.dev/services/migrations"
|
||||
@@ -54,14 +53,7 @@ func Migrate(ctx *context.Context) {
|
||||
}
|
||||
|
||||
ctx.Data["private"] = getRepoPrivate(ctx)
|
||||
ctx.Data["mirror"] = ctx.FormString("mirror") == "1"
|
||||
ctx.Data["lfs"] = ctx.FormString("lfs") == "1"
|
||||
ctx.Data["wiki"] = ctx.FormString("wiki") == "1"
|
||||
ctx.Data["milestones"] = ctx.FormString("milestones") == "1"
|
||||
ctx.Data["labels"] = ctx.FormString("labels") == "1"
|
||||
ctx.Data["issues"] = ctx.FormString("issues") == "1"
|
||||
ctx.Data["pull_requests"] = ctx.FormString("pull_requests") == "1"
|
||||
ctx.Data["releases"] = ctx.FormString("releases") == "1"
|
||||
ctx.Data["mirror"] = ctx.FormBool("mirror") // from "gogs#2037": "new mirror" button on org's home page
|
||||
|
||||
ctxUser := checkContextUser(ctx, ctx.FormInt64("org"))
|
||||
if ctx.Written() {
|
||||
@@ -72,7 +64,7 @@ func Migrate(ctx *context.Context) {
|
||||
ctx.HTML(http.StatusOK, templates.TplName("repo/migrate/"+serviceType.Name()))
|
||||
}
|
||||
|
||||
func handleMigrateError(ctx *context.Context, owner *user_model.User, err error, name string, tpl templates.TplName, form *forms.MigrateRepoForm) {
|
||||
func handleMigrateError(ctx *context.Context, owner *user_model.User, err error) {
|
||||
if setting.Repository.DisableMigrations {
|
||||
ctx.HTTPError(http.StatusForbidden, "MigrateError: the site administrator has disabled migrations")
|
||||
return
|
||||
@@ -84,67 +76,65 @@ func handleMigrateError(ctx *context.Context, owner *user_model.User, err error,
|
||||
case repo_model.IsErrReachLimitOfRepo(err):
|
||||
maxCreationLimit := owner.MaxCreationLimit()
|
||||
msg := ctx.TrN(maxCreationLimit, "repo.form.reach_limit_of_creation_1", "repo.form.reach_limit_of_creation_n", maxCreationLimit)
|
||||
ctx.RenderWithErrDeprecated(msg, tpl, form)
|
||||
ctx.JSONError(msg)
|
||||
case repo_model.IsErrRepoAlreadyExist(err):
|
||||
ctx.Data["Err_RepoName"] = true
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.repo_name_been_taken"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.repo_name_been_taken"), "repo_name")
|
||||
case repo_model.IsErrRepoFilesAlreadyExist(err):
|
||||
ctx.Data["Err_RepoName"] = true
|
||||
switch {
|
||||
case ctx.IsUserSiteAdmin() || (setting.Repository.AllowAdoptionOfUnadoptedRepositories && setting.Repository.AllowDeleteOfUnadoptedRepositories):
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.repository_files_already_exist.adopt_or_delete"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.repository_files_already_exist.adopt_or_delete"), "repo_name")
|
||||
case setting.Repository.AllowAdoptionOfUnadoptedRepositories:
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.repository_files_already_exist.adopt"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.repository_files_already_exist.adopt"), "repo_name")
|
||||
case setting.Repository.AllowDeleteOfUnadoptedRepositories:
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.repository_files_already_exist.delete"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.repository_files_already_exist.delete"), "repo_name")
|
||||
default:
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.repository_files_already_exist"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.repository_files_already_exist"), "repo_name")
|
||||
}
|
||||
case errors.As(err, &errNameReserved):
|
||||
ctx.Data["Err_RepoName"] = true
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.form.name_reserved", errNameReserved.Name), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.form.name_reserved", errNameReserved.Name), "repo_name")
|
||||
case errors.As(err, &errNamePatternNotAllowed):
|
||||
ctx.Data["Err_RepoName"] = true
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.form.name_pattern_not_allowed", errNamePatternNotAllowed.Pattern), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.form.name_pattern_not_allowed", errNamePatternNotAllowed.Pattern), "repo_name")
|
||||
default:
|
||||
err = util.SanitizeErrorCredentialURLs(err)
|
||||
if _, fromGit := gitcmd.ErrorAsStderr(err); fromGit {
|
||||
ctx.Data["Err_CloneAddr"] = true
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.migrate.failed", err.Error()), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.migrate.failed", err.Error()), "clone_addr")
|
||||
} else {
|
||||
ctx.ServerError(name, err)
|
||||
ctx.JSONErrorAuto(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func handleMigrateRemoteAddrError(ctx *context.Context, err error, tpl templates.TplName, form *forms.MigrateRepoForm) {
|
||||
func handleMigrateRemoteAddrError(ctx *context.Context, err error, field string) {
|
||||
if addrErr, ok := err.(*git.ErrInvalidCloneAddr); ok {
|
||||
switch {
|
||||
case addrErr.IsProtocolInvalid:
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.mirror_address_protocol_invalid"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.mirror_address_protocol_invalid"), field)
|
||||
case addrErr.IsURLError:
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.url_error", addrErr.Host), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.url_error", addrErr.Host), field)
|
||||
case addrErr.IsPermissionDenied:
|
||||
if addrErr.LocalPath {
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.migrate.permission_denied"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.migrate.permission_denied"), field)
|
||||
} else {
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.migrate.permission_denied_blocked"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.migrate.permission_denied_blocked"), field)
|
||||
}
|
||||
case addrErr.IsInvalidPath:
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.migrate.invalid_local_path"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.migrate.invalid_local_path"), field)
|
||||
default:
|
||||
log.Error("Error whilst updating url: %v", err)
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.url_error", "unknown"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.url_error", "unknown"), field)
|
||||
}
|
||||
} else {
|
||||
log.Error("Error whilst updating url: %v", err)
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("form.url_error", "unknown"), tpl, form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("form.url_error", "unknown"), field)
|
||||
}
|
||||
}
|
||||
|
||||
// MigratePost response for migrating from external git repository
|
||||
func MigratePost(ctx *context.Context) {
|
||||
form := web.GetForm[*forms.MigrateRepoForm](ctx)
|
||||
form := context.GetFetchActionForm[*forms.MigrateRepoForm](ctx)
|
||||
if form == nil {
|
||||
return
|
||||
}
|
||||
if setting.Repository.DisableMigrations {
|
||||
ctx.HTTPError(http.StatusForbidden, "MigratePost: the site administrator has disabled migrations")
|
||||
return
|
||||
@@ -155,28 +145,17 @@ func MigratePost(ctx *context.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
setMigrationContextData(ctx, form.Service)
|
||||
|
||||
ctxUser := checkContextUser(ctx, form.UID)
|
||||
if ctx.Written() {
|
||||
return
|
||||
}
|
||||
ctx.Data["ContextUser"] = ctxUser
|
||||
|
||||
tpl := templates.TplName("repo/migrate/" + form.Service.Name())
|
||||
|
||||
if ctx.HasError() {
|
||||
ctx.HTML(http.StatusOK, tpl)
|
||||
return
|
||||
}
|
||||
|
||||
remoteAddr, err := git.ParseRemoteAddr(form.CloneAddr, form.AuthUsername, form.AuthPassword)
|
||||
if err == nil {
|
||||
err = migrations.IsMigrateURLAllowed(remoteAddr, ctx.Doer)
|
||||
}
|
||||
if err != nil {
|
||||
ctx.Data["Err_CloneAddr"] = true
|
||||
handleMigrateRemoteAddrError(ctx, err, tpl, form)
|
||||
handleMigrateRemoteAddrError(ctx, err, "clone_addr")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -185,14 +164,12 @@ func MigratePost(ctx *context.Context) {
|
||||
if form.LFS && len(form.LFSEndpoint) > 0 {
|
||||
ep := lfs.DetermineEndpoint("", form.LFSEndpoint)
|
||||
if ep == nil {
|
||||
ctx.Data["Err_LFSEndpoint"] = true
|
||||
ctx.RenderWithErrDeprecated(ctx.Tr("repo.migrate.invalid_lfs_endpoint"), tpl, &form)
|
||||
ctx.JSONErrorWithField(ctx.Tr("repo.migrate.invalid_lfs_endpoint"), "lfs_endpoint")
|
||||
return
|
||||
}
|
||||
err = migrations.IsMigrateURLAllowed(ep.String(), ctx.Doer)
|
||||
if err != nil {
|
||||
ctx.Data["Err_LFSEndpoint"] = true
|
||||
handleMigrateRemoteAddrError(ctx, err, tpl, form)
|
||||
handleMigrateRemoteAddrError(ctx, err, "lfs_endpoint")
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -233,17 +210,17 @@ func MigratePost(ctx *context.Context) {
|
||||
|
||||
err = repo_service.CheckCreateRepository(ctx, ctx.Doer, ctxUser, opts.RepoName, false)
|
||||
if err != nil {
|
||||
handleMigrateError(ctx, ctxUser, err, "MigratePost", tpl, form)
|
||||
handleMigrateError(ctx, ctxUser, err)
|
||||
return
|
||||
}
|
||||
|
||||
err = task.MigrateRepository(ctx, ctx.Doer, ctxUser, opts)
|
||||
if err == nil {
|
||||
ctx.Redirect(ctxUser.HomeLink() + "/" + url.PathEscape(opts.RepoName))
|
||||
ctx.JSONRedirect(ctxUser.HomeLink() + "/" + url.PathEscape(opts.RepoName))
|
||||
return
|
||||
}
|
||||
|
||||
handleMigrateError(ctx, ctxUser, err, "MigratePost", tpl, form)
|
||||
handleMigrateError(ctx, ctxUser, err)
|
||||
}
|
||||
|
||||
func setMigrationContextData(ctx *context.Context, serviceType structs.GitServiceType) {
|
||||
|
||||
+1
-1
@@ -1092,7 +1092,7 @@ func registerWebRoutes(m *web.Router, webAuth *AuthMiddleware) {
|
||||
m.Get("/create", repo.Create)
|
||||
m.Post("/create", web.Bind[*forms.CreateRepoForm](), repo.CreatePost)
|
||||
m.Get("/migrate", repo.Migrate)
|
||||
m.Post("/migrate", web.Bind[*forms.MigrateRepoForm](), repo.MigratePost)
|
||||
m.Post("/migrate", repo.MigratePost)
|
||||
m.Get("/search", repo.SearchRepo)
|
||||
}, reqSignIn)
|
||||
// end "/repo": create, migrate, search
|
||||
|
||||
Reference in new issue
Block a user