mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-30 19:08:37 +00:00 
			
		
		
		
	Add support for forking single branch (#25821)
Fixes #25117 Add UI for choosing branch to fork Change default branch on single-branch forks  --------- Co-authored-by: Denys Konovalov <kontakt@denyskon.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							e8840e7e2b
						
					
				
				
					commit
					5e02e3b7ee
				
			| @@ -44,9 +44,10 @@ func (err ErrForkAlreadyExist) Unwrap() error { | ||||
|  | ||||
| // ForkRepoOptions contains the fork repository options | ||||
| type ForkRepoOptions struct { | ||||
| 	BaseRepo    *repo_model.Repository | ||||
| 	Name        string | ||||
| 	Description string | ||||
| 	BaseRepo     *repo_model.Repository | ||||
| 	Name         string | ||||
| 	Description  string | ||||
| 	SingleBranch string | ||||
| } | ||||
|  | ||||
| // ForkRepository forks a repository | ||||
| @@ -70,6 +71,10 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	defaultBranch := opts.BaseRepo.DefaultBranch | ||||
| 	if opts.SingleBranch != "" { | ||||
| 		defaultBranch = opts.SingleBranch | ||||
| 	} | ||||
| 	repo := &repo_model.Repository{ | ||||
| 		OwnerID:       owner.ID, | ||||
| 		Owner:         owner, | ||||
| @@ -77,7 +82,7 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork | ||||
| 		Name:          opts.Name, | ||||
| 		LowerName:     strings.ToLower(opts.Name), | ||||
| 		Description:   opts.Description, | ||||
| 		DefaultBranch: opts.BaseRepo.DefaultBranch, | ||||
| 		DefaultBranch: defaultBranch, | ||||
| 		IsPrivate:     opts.BaseRepo.IsPrivate || opts.BaseRepo.Owner.Visibility == structs.VisibleTypePrivate, | ||||
| 		IsEmpty:       opts.BaseRepo.IsEmpty, | ||||
| 		IsFork:        true, | ||||
| @@ -134,9 +139,12 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork | ||||
|  | ||||
| 		needsRollback = true | ||||
|  | ||||
| 		cloneCmd := git.NewCommand(txCtx, "clone", "--bare") | ||||
| 		if opts.SingleBranch != "" { | ||||
| 			cloneCmd.AddArguments("--single-branch", "--branch").AddDynamicArguments(opts.SingleBranch) | ||||
| 		} | ||||
| 		repoPath := repo_model.RepoPath(owner.Name, repo.Name) | ||||
| 		if stdout, _, err := git.NewCommand(txCtx, | ||||
| 			"clone", "--bare").AddDynamicArguments(oldRepoPath, repoPath). | ||||
| 		if stdout, _, err := cloneCmd.AddDynamicArguments(oldRepoPath, repoPath). | ||||
| 			SetDescription(fmt.Sprintf("ForkRepository(git clone): %s to %s", opts.BaseRepo.FullName(), repo.FullName())). | ||||
| 			RunStdBytes(&git.RunOpts{Timeout: 10 * time.Minute}); err != nil { | ||||
| 			log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, opts.BaseRepo, stdout, err) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user