mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 21:16:26 +01:00 
			
		
		
		
	When updating by rebase we need to set the environment for head repo (#22535)
The update by rebase code reuses the merge code but shortcircuits and pushes back up to the head. However, it doesn't set the correct pushing environment - and just uses the same environment as the base repo. This leads to the push update failing and thence the PR becomes out-of-sync with the head. This PR fixes this and adjusts the trace logging elsewhere to help make this clearer. Fix #18802 Signed-off-by: Andrew Thornton <art27@cantab.net> Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: John Olheiser <john.olheiser@gmail.com>
This commit is contained in:
		
							parent
							
								
									b383652e02
								
							
						
					
					
						commit
						4199d28053
					
				@ -595,19 +595,25 @@ func rawMerge(ctx context.Context, pr *issues_model.PullRequest, doer *user_mode
 | 
				
			|||||||
		headUser = pr.HeadRepo.Owner
 | 
							headUser = pr.HeadRepo.Owner
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	env = repo_module.FullPushingEnvironment(
 | 
					 | 
				
			||||||
		headUser,
 | 
					 | 
				
			||||||
		doer,
 | 
					 | 
				
			||||||
		pr.BaseRepo,
 | 
					 | 
				
			||||||
		pr.BaseRepo.Name,
 | 
					 | 
				
			||||||
		pr.ID,
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var pushCmd *git.Command
 | 
						var pushCmd *git.Command
 | 
				
			||||||
	if mergeStyle == repo_model.MergeStyleRebaseUpdate {
 | 
						if mergeStyle == repo_model.MergeStyleRebaseUpdate {
 | 
				
			||||||
		// force push the rebase result to head branch
 | 
							// force push the rebase result to head branch
 | 
				
			||||||
 | 
							env = repo_module.FullPushingEnvironment(
 | 
				
			||||||
 | 
								headUser,
 | 
				
			||||||
 | 
								doer,
 | 
				
			||||||
 | 
								pr.HeadRepo,
 | 
				
			||||||
 | 
								pr.HeadRepo.Name,
 | 
				
			||||||
 | 
								pr.ID,
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
		pushCmd = git.NewCommand(ctx, "push", "-f", "head_repo").AddDynamicArguments(stagingBranch + ":" + git.BranchPrefix + pr.HeadBranch)
 | 
							pushCmd = git.NewCommand(ctx, "push", "-f", "head_repo").AddDynamicArguments(stagingBranch + ":" + git.BranchPrefix + pr.HeadBranch)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
 | 
							env = repo_module.FullPushingEnvironment(
 | 
				
			||||||
 | 
								headUser,
 | 
				
			||||||
 | 
								doer,
 | 
				
			||||||
 | 
								pr.BaseRepo,
 | 
				
			||||||
 | 
								pr.BaseRepo.Name,
 | 
				
			||||||
 | 
								pr.ID,
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
		pushCmd = git.NewCommand(ctx, "push", "origin").AddDynamicArguments(baseBranch + ":" + git.BranchPrefix + pr.BaseBranch)
 | 
							pushCmd = git.NewCommand(ctx, "push", "origin").AddDynamicArguments(baseBranch + ":" + git.BranchPrefix + pr.BaseBranch)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -103,6 +103,8 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
	var pusher *user_model.User
 | 
						var pusher *user_model.User
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, opts := range optsList {
 | 
						for _, opts := range optsList {
 | 
				
			||||||
 | 
							log.Trace("pushUpdates: %-v %s %s %s", repo, opts.OldCommitID, opts.NewCommitID, opts.RefFullName)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if opts.IsNewRef() && opts.IsDelRef() {
 | 
							if opts.IsNewRef() && opts.IsDelRef() {
 | 
				
			||||||
			return fmt.Errorf("old and new revisions are both %s", git.EmptySHA)
 | 
								return fmt.Errorf("old and new revisions are both %s", git.EmptySHA)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -128,7 +130,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
			} else { // is new tag
 | 
								} else { // is new tag
 | 
				
			||||||
				newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
 | 
									newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					return fmt.Errorf("gitRepo.GetCommit: %w", err)
 | 
										return fmt.Errorf("gitRepo.GetCommit(%s) in %s/%s[%d]: %w", opts.NewCommitID, repo.OwnerName, repo.Name, repo.ID, err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				commits := repo_module.NewPushCommits()
 | 
									commits := repo_module.NewPushCommits()
 | 
				
			||||||
@ -161,7 +163,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
 | 
									newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					return fmt.Errorf("gitRepo.GetCommit: %w", err)
 | 
										return fmt.Errorf("gitRepo.GetCommit(%s) in %s/%s[%d]: %w", opts.NewCommitID, repo.OwnerName, repo.Name, repo.ID, err)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				refName := opts.RefName()
 | 
									refName := opts.RefName()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user