@ -16,15 +16,15 @@ import (
)
// ForkRepository forks a repository
func ForkRepository ( doer , owner * models . User , o ldRepo * models . Repository , name , desc string ) ( _ * models . Repository , err error ) {
forkedRepo , err := o ld Repo. GetUserFork ( owner . ID )
func ForkRepository ( doer , owner * models . User , o pts models . ForkRepoOptions ) ( _ * models . Repository , err error ) {
forkedRepo , err := o pts. Base Repo. GetUserFork ( owner . ID )
if err != nil {
return nil , err
}
if forkedRepo != nil {
return nil , models . ErrForkAlreadyExist {
Uname : owner . Name ,
RepoName : o ld Repo. FullName ( ) ,
RepoName : o pts. Base Repo. FullName ( ) ,
ForkName : forkedRepo . FullName ( ) ,
}
}
@ -33,17 +33,17 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
OwnerID : owner . ID ,
Owner : owner ,
OwnerName : owner . Name ,
Name : n ame,
LowerName : strings . ToLower ( n ame) ,
Description : desc ,
DefaultBranch : o ld Repo. DefaultBranch ,
IsPrivate : o ldRepo. IsPrivate || old Repo. Owner . Visibility == structs . VisibleTypePrivate ,
IsEmpty : o ld Repo. IsEmpty ,
Name : opts. N ame,
LowerName : strings . ToLower ( opts. N ame) ,
Description : opts. Description ,
DefaultBranch : o pts. Base Repo. DefaultBranch ,
IsPrivate : o pts. BaseRepo . IsPrivate || opts . Base Repo. Owner . Visibility == structs . VisibleTypePrivate ,
IsEmpty : o pts. Base Repo. IsEmpty ,
IsFork : true ,
ForkID : o ld Repo. ID ,
ForkID : o pts. Base Repo. ID ,
}
oldRepoPath := o ld Repo. RepoPath ( )
oldRepoPath := o pts. Base Repo. RepoPath ( )
err = models . WithTx ( func ( ctx models . DBContext ) error {
if err = models . CreateRepository ( ctx , doer , owner , repo , false ) ; err != nil {
@ -59,13 +59,13 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
}
}
if err = models . IncrementRepoForkNum ( ctx , o ld Repo. ID ) ; err != nil {
if err = models . IncrementRepoForkNum ( ctx , o pts. Base Repo. ID ) ; err != nil {
rollbackRemoveFn ( )
return err
}
// copy lfs files failure should not be ignored
if err := models . CopyLFS ( ctx , repo , o ld Repo) ; err != nil {
if err := models . CopyLFS ( ctx , repo , o pts. Base Repo) ; err != nil {
rollbackRemoveFn ( )
return err
}
@ -73,9 +73,9 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
repoPath := models . RepoPath ( owner . Name , repo . Name )
if stdout , err := git . NewCommand (
"clone" , "--bare" , oldRepoPath , repoPath ) .
SetDescription ( fmt . Sprintf ( "ForkRepository(git clone): %s to %s" , o ld Repo. FullName ( ) , repo . FullName ( ) ) ) .
SetDescription ( fmt . Sprintf ( "ForkRepository(git clone): %s to %s" , o pts. Base Repo. FullName ( ) , repo . FullName ( ) ) ) .
RunInDirTimeout ( 10 * time . Minute , "" ) ; err != nil {
log . Error ( "Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v" , repo , o ld Repo, stdout , err )
log . Error ( "Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v" , repo , o pts. Base Repo, stdout , err )
rollbackRemoveFn ( )
return fmt . Errorf ( "git clone: %v" , err )
}
@ -103,7 +103,7 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
if err = repo . UpdateSize ( ctx ) ; err != nil {
log . Error ( "Failed to update size for repository: %v" , err )
}
if err := models . CopyLanguageStat ( o ld Repo, repo ) ; err != nil {
if err := models . CopyLanguageStat ( o pts. Base Repo, repo ) ; err != nil {
log . Error ( "Copy language stat from oldRepo failed" )
}