Skip to content
This repository has been archived by the owner on May 8, 2024. It is now read-only.

Commit

Permalink
Fall back to checking out HEAD (#250)
Browse files Browse the repository at this point in the history
* Fall back to checking out HEAD

In case merge ref is not available. These edge cases were cauhgt by integration tests in Cirrus CI:

1. Cloning a PR with conflicts.
2. Cloning a closed PR.

Related to #247 and #249

* Use FetchContext
  • Loading branch information
fkorotkov authored Sep 25, 2022
1 parent 8ff4962 commit 7db20cf
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions internal/executor/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -591,11 +591,11 @@ func (executor *Executor) CloneRepository(
return false
}

refSpec := fmt.Sprintf("+refs/pull/%s/merge:refs/remotes/origin/pull/%[1]s", pr_number)
logUploader.Write([]byte(fmt.Sprintf("\nFetching %s...\n", refSpec)))
mergeRefSpec := fmt.Sprintf("+refs/pull/%s/merge:refs/remotes/origin/pull/%[1]s", pr_number)
logUploader.Write([]byte(fmt.Sprintf("\nFetching %s...\n", mergeRefSpec)))
fetchOptions := &git.FetchOptions{
RemoteName: remoteConfig.Name,
RefSpecs: []config.RefSpec{config.RefSpec(refSpec)},
RefSpecs: []config.RefSpec{config.RefSpec(mergeRefSpec)},
Tags: git.NoTags,
Progress: logUploader,
}
Expand All @@ -604,10 +604,16 @@ func (executor *Executor) CloneRepository(
fetchOptions.Depth = clone_depth + 1
}
err = repo.FetchContext(ctx, fetchOptions)
if err != nil && strings.Contains(err.Error(), "couldn't find remote ref") {
logUploader.Write([]byte("\nFailed to fetch merge ref! PR might not be mergable. Falling back to head ref..."))
headRefSpec := fmt.Sprintf("+refs/pull/%s/head:refs/remotes/origin/pull/%[1]s", pr_number)
fetchOptions.RefSpecs = []config.RefSpec{config.RefSpec(headRefSpec)}
err = repo.FetchContext(ctx, fetchOptions)
}
if err != nil && retryableCloneError(err) {
logUploader.Write([]byte(fmt.Sprintf("\nFetch failed: %s!", err)))
logUploader.Write([]byte("\nRe-trying to fetch..."))
err = repo.Fetch(fetchOptions)
err = repo.FetchContext(ctx, fetchOptions)
}
if err != nil {
logUploader.Write([]byte(fmt.Sprintf("\nFailed fetch: %s!", err)))
Expand Down

0 comments on commit 7db20cf

Please sign in to comment.