mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09: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:
		| @@ -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() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user