diff --git a/modules/repository/fork.go b/modules/repository/fork.go index cdd08e3d3..f8cb74bcb 100644 --- a/modules/repository/fork.go +++ b/modules/repository/fork.go @@ -64,6 +64,12 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name, return err } + // copy lfs files failure should not be ignored + if err := models.CopyLFS(ctx, repo, oldRepo); err != nil { + rollbackRemoveFn() + return err + } + repoPath := models.RepoPath(owner.Name, repo.Name) if stdout, err := git.NewCommand( "clone", "--bare", oldRepoPath, repoPath). @@ -92,6 +98,7 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name, return nil, err } + // even if below operations failed, it could be ignored. And they will be retried ctx := models.DefaultDBContext() if err = repo.UpdateSize(ctx); err != nil { log.Error("Failed to update size for repository: %v", err) @@ -100,11 +107,5 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name, log.Error("Copy language stat from oldRepo failed") } - if err := models.CopyLFS(ctx, repo, oldRepo); err != nil { - if errDelete := models.DeleteRepository(doer, owner.ID, repo.ID); errDelete != nil { - log.Error("Rollback deleteRepository: %v", errDelete) - } - return nil, err - } return repo, nil }