]> source.dussan.org Git - gitea.git/commitdiff
When updating by rebase we need to set the environment for head repo (#22535) (#22536) v1.18.2
authorzeripath <art27@cantab.net>
Thu, 19 Jan 2023 22:31:20 +0000 (22:31 +0000)
committerGitHub <noreply@github.com>
Thu, 19 Jan 2023 22:31:20 +0000 (17:31 -0500)
Backport #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>
CHANGELOG.md
services/pull/merge.go
services/repository/push.go

index 11904bb09c490eb707de5d8c0aeb8a8382aeea72..bb5920173208da3a53cbf1421e552ecb41d50398 100644 (file)
@@ -7,6 +7,7 @@ been added to each release, please refer to the [blog](https://blog.gitea.io).
 ## [1.18.2](https://github.com/go-gitea/gitea/releases/tag/v1.18.2) - 2023-01-19
 
 * BUGFIXES
+  * When updating by rebase we need to set the environment for head repo (#22535) (#22536)
   * Fix issue not auto-closing when it includes a reference to a branch (#22514) (#22521)
   * Fix invalid issue branch reference if not specified in template (#22513) (#22520)
   * Fix 500 error viewing pull request when fork has pull requests disabled (#22512) (#22515)
index 74f3b17c666564fcb43b935b36b9479d85d0353f..ddfac5a219959113212edeeb3ffd5b4cffc6d99c 100644 (file)
@@ -584,19 +584,25 @@ func rawMerge(ctx context.Context, pr *issues_model.PullRequest, doer *user_mode
                headUser = pr.HeadRepo.Owner
        }
 
-       env = repo_module.FullPushingEnvironment(
-               headUser,
-               doer,
-               pr.BaseRepo,
-               pr.BaseRepo.Name,
-               pr.ID,
-       )
-
        var pushCmd *git.Command
        if mergeStyle == repo_model.MergeStyleRebaseUpdate {
                // 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)
        } 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)
        }
 
index 3a7205d18b6f8bbde386d8388756671a013b7666..dec52224324163eb893eaedc61e5fb8151c111da 100644 (file)
@@ -104,6 +104,8 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
        var pusher *user_model.User
 
        for _, opts := range optsList {
+               log.Trace("pushUpdates: %-v %s %s %s", repo, opts.OldCommitID, opts.NewCommitID, opts.RefFullName)
+
                if opts.IsNewRef() && opts.IsDelRef() {
                        return fmt.Errorf("old and new revisions are both %s", git.EmptySHA)
                }
@@ -129,7 +131,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
                        } else { // is new tag
                                newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
                                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()
@@ -162,7 +164,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error {
 
                                newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
                                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()