Skip to content

Commit 290e06d

Browse files
committed
Refactor the fork service slightly to take ForkRepoOptions
This reduces the number of places we need to change if we want to add other options during fork time. Signed-off-by: Kyle Evans <[email protected]>
1 parent 0393789 commit 290e06d

File tree

5 files changed

+36
-21
lines changed

5 files changed

+36
-21
lines changed

models/repo.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,6 +1004,13 @@ type CreateRepoOptions struct {
10041004
MirrorInterval string
10051005
}
10061006

1007+
// ForkRepoOptions contains the fork repository options
1008+
type ForkRepoOptions struct {
1009+
OldRepo *Repository
1010+
Name string
1011+
Description string
1012+
}
1013+
10071014
// GetRepoInitFile returns repository init files
10081015
func GetRepoInitFile(tp, name string) ([]byte, error) {
10091016
cleanedName := strings.TrimLeft(path.Clean("/"+name), "/")

modules/repository/fork.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ import (
1616
)
1717

1818
// ForkRepository forks a repository
19-
func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name, desc string) (_ *models.Repository, err error) {
20-
forkedRepo, err := oldRepo.GetUserFork(owner.ID)
19+
func ForkRepository(doer, owner *models.User, opts models.ForkRepoOptions) (_ *models.Repository, err error) {
20+
forkedRepo, err := opts.OldRepo.GetUserFork(owner.ID)
2121
if err != nil {
2222
return nil, err
2323
}
2424
if forkedRepo != nil {
2525
return nil, models.ErrForkAlreadyExist{
2626
Uname: owner.Name,
27-
RepoName: oldRepo.FullName(),
27+
RepoName: opts.OldRepo.FullName(),
2828
ForkName: forkedRepo.FullName(),
2929
}
3030
}
@@ -33,17 +33,17 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
3333
OwnerID: owner.ID,
3434
Owner: owner,
3535
OwnerName: owner.Name,
36-
Name: name,
37-
LowerName: strings.ToLower(name),
38-
Description: desc,
39-
DefaultBranch: oldRepo.DefaultBranch,
40-
IsPrivate: oldRepo.IsPrivate || oldRepo.Owner.Visibility == structs.VisibleTypePrivate,
41-
IsEmpty: oldRepo.IsEmpty,
36+
Name: opts.Name,
37+
LowerName: strings.ToLower(opts.Name),
38+
Description: opts.Description,
39+
DefaultBranch: opts.OldRepo.DefaultBranch,
40+
IsPrivate: opts.OldRepo.IsPrivate || opts.OldRepo.Owner.Visibility == structs.VisibleTypePrivate,
41+
IsEmpty: opts.OldRepo.IsEmpty,
4242
IsFork: true,
43-
ForkID: oldRepo.ID,
43+
ForkID: opts.OldRepo.ID,
4444
}
4545

46-
oldRepoPath := oldRepo.RepoPath()
46+
oldRepoPath := opts.OldRepo.RepoPath()
4747

4848
err = models.WithTx(func(ctx models.DBContext) error {
4949
if err = models.CreateRepository(ctx, doer, owner, repo, false); err != nil {
@@ -59,23 +59,23 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
5959
}
6060
}
6161

62-
if err = models.IncrementRepoForkNum(ctx, oldRepo.ID); err != nil {
62+
if err = models.IncrementRepoForkNum(ctx, opts.OldRepo.ID); err != nil {
6363
rollbackRemoveFn()
6464
return err
6565
}
6666

6767
// copy lfs files failure should not be ignored
68-
if err := models.CopyLFS(ctx, repo, oldRepo); err != nil {
68+
if err := models.CopyLFS(ctx, repo, opts.OldRepo); err != nil {
6969
rollbackRemoveFn()
7070
return err
7171
}
7272

7373
repoPath := models.RepoPath(owner.Name, repo.Name)
7474
if stdout, err := git.NewCommand(
7575
"clone", "--bare", oldRepoPath, repoPath).
76-
SetDescription(fmt.Sprintf("ForkRepository(git clone): %s to %s", oldRepo.FullName(), repo.FullName())).
76+
SetDescription(fmt.Sprintf("ForkRepository(git clone): %s to %s", opts.OldRepo.FullName(), repo.FullName())).
7777
RunInDirTimeout(10*time.Minute, ""); err != nil {
78-
log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, oldRepo, stdout, err)
78+
log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, opts.OldRepo, stdout, err)
7979
rollbackRemoveFn()
8080
return fmt.Errorf("git clone: %v", err)
8181
}
@@ -103,7 +103,7 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
103103
if err = repo.UpdateSize(ctx); err != nil {
104104
log.Error("Failed to update size for repository: %v", err)
105105
}
106-
if err := models.CopyLanguageStat(oldRepo, repo); err != nil {
106+
if err := models.CopyLanguageStat(opts.OldRepo, repo); err != nil {
107107
log.Error("Copy language stat from oldRepo failed")
108108
}
109109

routers/api/v1/repo/fork.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,11 @@ func CreateFork(ctx *context.APIContext) {
123123
forker = org
124124
}
125125

126-
fork, err := repo_service.ForkRepository(ctx.User, forker, repo, repo.Name, repo.Description)
126+
fork, err := repo_service.ForkRepository(ctx.User, forker, models.ForkRepoOptions{
127+
OldRepo: repo,
128+
Name: repo.Name,
129+
Description: repo.Description,
130+
})
127131
if err != nil {
128132
ctx.Error(http.StatusInternalServerError, "ForkRepository", err)
129133
return

routers/web/repo/pull.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,11 @@ func ForkPost(ctx *context.Context) {
225225
}
226226
}
227227

228-
repo, err := repo_service.ForkRepository(ctx.User, ctxUser, forkRepo, form.RepoName, form.Description)
228+
repo, err := repo_service.ForkRepository(ctx.User, ctxUser, models.ForkRepoOptions{
229+
OldRepo: forkRepo,
230+
Name: form.RepoName,
231+
Description: form.Description,
232+
})
229233
if err != nil {
230234
ctx.Data["Err_RepoName"] = true
231235
switch {

services/repository/repository.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ func DeleteUnadoptedRepository(doer, owner *models.User, name string) error {
4747
}
4848

4949
// ForkRepository forks a repository
50-
func ForkRepository(doer, u *models.User, oldRepo *models.Repository, name, desc string) (*models.Repository, error) {
51-
repo, err := repo_module.ForkRepository(doer, u, oldRepo, name, desc)
50+
func ForkRepository(doer, u *models.User, opts models.ForkRepoOptions) (*models.Repository, error) {
51+
repo, err := repo_module.ForkRepository(doer, u, opts)
5252
if err != nil {
5353
return nil, err
5454
}
5555

56-
notification.NotifyForkRepository(doer, oldRepo, repo)
56+
notification.NotifyForkRepository(doer, opts.OldRepo, repo)
5757

5858
return repo, nil
5959
}

0 commit comments

Comments
 (0)