mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-01 23:29:12 +01:00
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
|
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
package pull
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
repo_model "code.gitea.io/gitea/models/repo"
|
||
|
"code.gitea.io/gitea/modules/git"
|
||
|
"code.gitea.io/gitea/modules/log"
|
||
|
)
|
||
|
|
||
|
// doMergeStyleRebase rebaases the tracking branch on the base branch as the current HEAD with or with a merge commit to the original pr branch
|
||
|
func doMergeStyleRebase(ctx *mergeContext, mergeStyle repo_model.MergeStyle, message string) error {
|
||
|
if err := rebaseTrackingOnToBase(ctx, mergeStyle); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Checkout base branch again
|
||
|
if err := git.NewCommand(ctx, "checkout").AddDynamicArguments(baseBranch).
|
||
|
Run(ctx.RunOpts()); err != nil {
|
||
|
log.Error("git checkout base prior to merge post staging rebase %-v: %v\n%s\n%s", ctx.pr, err, ctx.outbuf.String(), ctx.errbuf.String())
|
||
|
return fmt.Errorf("git checkout base prior to merge post staging rebase %v: %w\n%s\n%s", ctx.pr, err, ctx.outbuf.String(), ctx.errbuf.String())
|
||
|
}
|
||
|
ctx.outbuf.Reset()
|
||
|
ctx.errbuf.Reset()
|
||
|
|
||
|
cmd := git.NewCommand(ctx, "merge")
|
||
|
if mergeStyle == repo_model.MergeStyleRebase {
|
||
|
cmd.AddArguments("--ff-only")
|
||
|
} else {
|
||
|
cmd.AddArguments("--no-ff", "--no-commit")
|
||
|
}
|
||
|
cmd.AddDynamicArguments(stagingBranch)
|
||
|
|
||
|
// Prepare merge with commit
|
||
|
if err := runMergeCommand(ctx, mergeStyle, cmd); err != nil {
|
||
|
log.Error("Unable to merge staging into base: %v", err)
|
||
|
return err
|
||
|
}
|
||
|
if mergeStyle == repo_model.MergeStyleRebaseMerge {
|
||
|
if err := commitAndSignNoAuthor(ctx, message); err != nil {
|
||
|
log.Error("Unable to make final commit: %v", err)
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|