loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request 'chore(refactor): split repo_service.ForkRepository in two' (#4879) from earl-warren/forgejo:wip-fork-split into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4879
Reviewed-by: Gusted <gusted@noreply.codeberg.org>

+25 -15
+3 -3
routers/api/v1/repo/fork.go
··· 148 148 name = *form.Name 149 149 } 150 150 151 - fork, err := repo_service.ForkRepository(ctx, ctx.Doer, forker, repo_service.ForkRepoOptions{ 151 + fork, err := repo_service.ForkRepositoryAndUpdates(ctx, ctx.Doer, forker, repo_service.ForkRepoOptions{ 152 152 BaseRepo: repo, 153 153 Name: name, 154 154 Description: repo.Description, 155 155 }) 156 156 if err != nil { 157 157 if errors.Is(err, util.ErrAlreadyExist) || repo_model.IsErrReachLimitOfRepo(err) { 158 - ctx.Error(http.StatusConflict, "ForkRepository", err) 158 + ctx.Error(http.StatusConflict, "ForkRepositoryAndUpdates", err) 159 159 } else { 160 - ctx.Error(http.StatusInternalServerError, "ForkRepository", err) 160 + ctx.Error(http.StatusInternalServerError, "ForkRepositoryAndUpdates", err) 161 161 } 162 162 return 163 163 }
+1 -1
routers/web/repo/pull.go
··· 294 294 } 295 295 } 296 296 297 - repo, err := repo_service.ForkRepository(ctx, ctx.Doer, ctxUser, repo_service.ForkRepoOptions{ 297 + repo, err := repo_service.ForkRepositoryAndUpdates(ctx, ctx.Doer, ctxUser, repo_service.ForkRepoOptions{ 298 298 BaseRepo: forkRepo, 299 299 Name: form.RepoName, 300 300 Description: form.Description,
+1 -1
services/f3/driver/project.go
··· 155 155 panic(fmt.Errorf("LoadOwner %v %w", o.forgejoProject.BaseRepo, err)) 156 156 } 157 157 158 - repo, err := repo_service.ForkRepository(ctx, doer, owner, repo_service.ForkRepoOptions{ 158 + repo, err := repo_service.ForkRepositoryIfNotExists(ctx, doer, owner, repo_service.ForkRepoOptions{ 159 159 BaseRepo: o.forgejoProject.BaseRepo, 160 160 Name: o.forgejoProject.Name, 161 161 Description: o.forgejoProject.Description,
+14 -4
services/repository/fork.go
··· 51 51 SingleBranch string 52 52 } 53 53 54 - // ForkRepository forks a repository 55 - func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts ForkRepoOptions) (*repo_model.Repository, error) { 54 + // ForkRepositoryIfNotExists creates a fork of a repository if it does not already exists and fails otherwise 55 + func ForkRepositoryIfNotExists(ctx context.Context, doer, owner *user_model.User, opts ForkRepoOptions) (*repo_model.Repository, error) { 56 56 // Fork is prohibited, if user has reached maximum limit of repositories 57 57 if !doer.IsAdmin && !owner.CanForkRepo() { 58 58 return nil, repo_model.ErrReachLimitOfRepo{ ··· 147 147 } 148 148 repoPath := repo_model.RepoPath(owner.Name, repo.Name) 149 149 if stdout, _, err := cloneCmd.AddDynamicArguments(oldRepoPath, repoPath). 150 - SetDescription(fmt.Sprintf("ForkRepository(git clone): %s to %s", opts.BaseRepo.FullName(), repo.FullName())). 150 + SetDescription(fmt.Sprintf("ForkRepositoryIfNotExists(git clone): %s to %s", opts.BaseRepo.FullName(), repo.FullName())). 151 151 RunStdBytes(&git.RunOpts{Timeout: 10 * time.Minute}); err != nil { 152 152 log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, opts.BaseRepo, stdout, err) 153 153 return fmt.Errorf("git clone: %w", err) ··· 158 158 } 159 159 160 160 if stdout, _, err := git.NewCommand(txCtx, "update-server-info"). 161 - SetDescription(fmt.Sprintf("ForkRepository(git update-server-info): %s", repo.FullName())). 161 + SetDescription(fmt.Sprintf("ForkRepositoryIfNotExists(git update-server-info): %s", repo.FullName())). 162 162 RunStdString(&git.RunOpts{Dir: repoPath}); err != nil { 163 163 log.Error("Fork Repository (git update-server-info) failed for %v:\nStdout: %s\nError: %v", repo, stdout, err) 164 164 return fmt.Errorf("git update-server-info: %w", err) ··· 180 180 needsRollbackInPanic = false 181 181 if err != nil { 182 182 rollbackFn() 183 + return nil, err 184 + } 185 + 186 + return repo, nil 187 + } 188 + 189 + // ForkRepositoryAndUpdates forks a repository. On success it updates metadata (size, stats, etc.) and send a notification. 190 + func ForkRepositoryAndUpdates(ctx context.Context, doer, owner *user_model.User, opts ForkRepoOptions) (*repo_model.Repository, error) { 191 + repo, err := ForkRepositoryIfNotExists(ctx, doer, owner, opts) 192 + if err != nil { 183 193 return nil, err 184 194 } 185 195
+2 -2
services/repository/fork_test.go
··· 23 23 user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 13}) 24 24 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10}) 25 25 26 - fork, err := ForkRepository(git.DefaultContext, user, user, ForkRepoOptions{ 26 + fork, err := ForkRepositoryAndUpdates(git.DefaultContext, user, user, ForkRepoOptions{ 27 27 BaseRepo: repo, 28 28 Name: "test", 29 29 Description: "test", ··· 39 39 setting.Repository.AllowForkWithoutMaximumLimit = false 40 40 // user has reached maximum limit of repositories 41 41 user.MaxRepoCreation = 0 42 - fork2, err := ForkRepository(git.DefaultContext, user, user, ForkRepoOptions{ 42 + fork2, err := ForkRepositoryAndUpdates(git.DefaultContext, user, user, ForkRepoOptions{ 43 43 BaseRepo: repo, 44 44 Name: "test", 45 45 Description: "test",
+1 -1
tests/integration/actions_trigger_test.go
··· 46 46 defer f() 47 47 48 48 // create the forked repo 49 - forkedRepo, err := repo_service.ForkRepository(git.DefaultContext, user2, org3, repo_service.ForkRepoOptions{ 49 + forkedRepo, err := repo_service.ForkRepositoryAndUpdates(git.DefaultContext, user2, org3, repo_service.ForkRepoOptions{ 50 50 BaseRepo: baseRepo, 51 51 Name: "forked-repo-pull-request-target", 52 52 Description: "test pull-request-target event",
+1 -1
tests/integration/pull_reopen_test.go
··· 70 70 require.NoError(t, err) 71 71 72 72 // Create an head repository. 73 - headRepo, err := repo_service.ForkRepository(git.DefaultContext, user2, org26, repo_service.ForkRepoOptions{ 73 + headRepo, err := repo_service.ForkRepositoryAndUpdates(git.DefaultContext, user2, org26, repo_service.ForkRepoOptions{ 74 74 BaseRepo: baseRepo, 75 75 Name: "reopen-head", 76 76 })
+1 -1
tests/integration/pull_review_test.go
··· 376 376 377 377 t.Run("Forked Repo Pull Request", func(t *testing.T) { 378 378 user5 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}) 379 - forkedRepo, err := repo_service.ForkRepository(db.DefaultContext, user2, user5, repo_service.ForkRepoOptions{ 379 + forkedRepo, err := repo_service.ForkRepositoryAndUpdates(db.DefaultContext, user2, user5, repo_service.ForkRepoOptions{ 380 380 BaseRepo: repo, 381 381 Name: "test_codeowner_fork", 382 382 })
+1 -1
tests/integration/pull_update_test.go
··· 85 85 func createOutdatedPR(t *testing.T, actor, forkOrg *user_model.User) *issues_model.PullRequest { 86 86 baseRepo, _, _ := CreateDeclarativeRepo(t, actor, "repo-pr-update", nil, nil, nil) 87 87 88 - headRepo, err := repo_service.ForkRepository(git.DefaultContext, actor, forkOrg, repo_service.ForkRepoOptions{ 88 + headRepo, err := repo_service.ForkRepositoryAndUpdates(git.DefaultContext, actor, forkOrg, repo_service.ForkRepoOptions{ 89 89 BaseRepo: baseRepo, 90 90 Name: "repo-pr-update", 91 91 Description: "desc",