Skip to content

Commit

Permalink
Refactor MergeAndCheckout to reuse other client calls
Browse files Browse the repository at this point in the history
Signed-off-by: Steve Kuznetsov <skuznets@redhat.com>
  • Loading branch information
stevekuznetsov committed Oct 21, 2019
1 parent bc176b8 commit 34ca2aa
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 20 deletions.
43 changes: 23 additions & 20 deletions prow/git/git.go
Expand Up @@ -258,8 +258,23 @@ func (r *Repo) CheckoutNewBranch(branch string) error {
// Merge attempts to merge commitlike into the current branch. It returns true
// if the merge completes. It returns an error if the abort fails.
func (r *Repo) Merge(commitlike string) (bool, error) {
return r.MergeWithStrategy(commitlike, prowgithub.MergeMerge)
}

// MergeWithStrategy attempts to merge commitlike into the current branch given the merge strategy.
// It returns true if the merge completes. It returns an error if the abort fails.
func (r *Repo) MergeWithStrategy(commitlike string, mergeStrategy prowgithub.PullRequestMergeType) (bool, error) {
r.logger.Infof("Merging %s.", commitlike)
co := r.gitCommand("merge", "--no-ff", "--no-stat", "-m merge", commitlike)
mergeFlag := ""
switch mergeStrategy {
case prowgithub.MergeMerge:
mergeFlag = "--no-ff"
case prowgithub.MergeSquash:
mergeFlag = "--squash"
default:
return false, fmt.Errorf("merge strategy %q is not supported", mergeStrategy)
}
co := r.gitCommand("merge", mergeFlag, "--no-stat", "-m merge", commitlike)

b, err := co.CombinedOutput()
if err == nil {
Expand All @@ -284,29 +299,17 @@ func (r *Repo) MergeAndCheckout(baseSHA string, headSHAs []string, mergeStrategy
return errors.New("at least one headSHA must be provided")
}
r.logger.Infof("Merging headSHAs %v onto base %s using strategy %s", headSHAs, baseSHA, mergeStrategy)

mergeFlag := ""
switch mergeStrategy {
case prowgithub.MergeMerge:
mergeFlag = "--no-ff"
case prowgithub.MergeSquash:
mergeFlag = "--squash"
default:
return fmt.Errorf("merge strategy %q is not supported", mergeStrategy)
}

if b, err := r.gitCommand("checkout", baseSHA).CombinedOutput(); err != nil {
return fmt.Errorf("git checkout failed for revision %q: %v. output: %s", baseSHA, err, string(b))
}
if b, err := r.gitCommand("config", "user.email", "denna@protonmail.com").CombinedOutput(); err != nil {
return fmt.Errorf("failed to set email prior to merging: %v. output: %s", err, string(b))
if err := r.Checkout(baseSHA); err != nil {
return err
}
for _, headSHA := range headSHAs {
if b, err := r.gitCommand("merge", mergeFlag, "--no-stat", "-m merge", headSHA).CombinedOutput(); err != nil {
return fmt.Errorf("merge failed with error %v. output: %s", err, string(b))
ok, err := r.MergeWithStrategy(headSHA, mergeStrategy)
if err != nil {
return err
} else if !ok {
return fmt.Errorf("failed to merge %q", headSHA)
}
}

return nil
}

Expand Down
6 changes: 6 additions & 0 deletions prow/git/git_test.go
Expand Up @@ -372,6 +372,12 @@ func TestMergeAndCheckout(t *testing.T) {
if err != nil {
t.Fatalf("Cloning failed: %v", err)
}
if err := clonedRepo.Config("user.name", "prow"); err != nil {
t.Fatalf("failed to set name for test repo: %v", err)
}
if err := clonedRepo.Config("user.email", "prow@localhost"); err != nil {
t.Fatalf("failed to set email for test repo: %v", err)
}
if err := clonedRepo.Config("commit.gpgsign", "false"); err != nil {
t.Fatalf("failed to disable gpg signing for test repo: %v", err)
}
Expand Down

0 comments on commit 34ca2aa

Please sign in to comment.