From 4dccac3dbf60521e25e19295cead990c7ef7bacd Mon Sep 17 00:00:00 2001 From: Giteabot Date: Wed, 3 May 2023 08:15:56 -0400 Subject: [PATCH] Fix api error message if fork exists (#24487) (#24493) Backport #24487 by @fnetX On the @Forgejo instance of Codeberg, we discovered that forking a repo which is already forked now returns a 500 Internal Server Error, which is unexpected. This is an attempt at fixing this. The error message in the log: ~~~ 2023/05/02 08:36:30 .../api/v1/repo/fork.go:147:CreateFork() [E] [6450cb8e-113] ForkRepository: repository is already forked by user [uname: ...., repo path: .../..., fork path: .../...] ~~~ The service that is used for forking returns a custom error message which is not checked against. About the order of options: The case that the fork already exists should be more common, followed by the case that a repo with the same name already exists for other reasons. The case that the global repo limit is hit is probably not the likeliest. --------- Co-authored-by: Otto Richter (fnetX) --- routers/api/v1/repo/fork.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/api/v1/repo/fork.go b/routers/api/v1/repo/fork.go index 5b564a8066..e1e79c0e78 100644 --- a/routers/api/v1/repo/fork.go +++ b/routers/api/v1/repo/fork.go @@ -141,7 +141,7 @@ func CreateFork(ctx *context.APIContext) { Description: repo.Description, }) if err != nil { - if repo_model.IsErrReachLimitOfRepo(err) || repo_model.IsErrRepoAlreadyExist(err) { + if repo_service.IsErrForkAlreadyExist(err) || repo_model.IsErrRepoAlreadyExist(err) || repo_model.IsErrReachLimitOfRepo(err) { ctx.Error(http.StatusConflict, "ForkRepository", err) } else { ctx.Error(http.StatusInternalServerError, "ForkRepository", err)