diff --git a/routers/web/repo/migrate.go b/routers/web/repo/migrate.go index 7ccc288d528..8b0d0e31788 100644 --- a/routers/web/repo/migrate.go +++ b/routers/web/repo/migrate.go @@ -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) { diff --git a/routers/web/web.go b/routers/web/web.go index b1dfec9aea7..fa65209d8d1 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -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 diff --git a/templates/repo/migrate/codebase.tmpl b/templates/repo/migrate/codebase.tmpl index 1efcd50da7b..0ce6c59ef47 100644 --- a/templates/repo/migrate/codebase.tmpl +++ b/templates/repo/migrate/codebase.tmpl @@ -6,50 +6,48 @@