fix: avoid resetting fetch head when doing branch fetch unshallow
When doing merge strategy with shallow clones, git will set FETCH_HEAD to base branch when doing unshallow. This fetches another time to reset it back, as we depend on the value later.
what
When using merge strategy with a checkout-depth and the shallow branch can't find a common base with the base branch, a full branch must be fetched with --unshallow. This PR does another fetch from the feature branch after doing this, to keep the FETCH_HEAD as expected for future operations.
why
When doing merge strategy with shallow clones, git will set FETCH_HEAD to base branch when doing unshallow. FETCH_HEAD is later used as the ref when doing a merge to base branch, effectively merging it with itself. This in turn causes Atlantis to plan/apply against the base branch and presenting "no changes", even when there should be changes.
tests
We have been running a fork with this fix for a few month, using a merge strategy with a checkout-depth value that triggers a full clone relatively often. We have not experienced plans against the base branch since this fix, while we experienced them quite often before.
references
While the original issue seems to be referring to a different situation, there is as issue comment describing this situation. The bug being fixed would also present errors like the ones in the issue, though I don't think this PR fixes that specific issue.
Could someone suggest why the CI check (tester/e2e-github) might be failing? The output is unclear:
Error: Process completed with exit code 1.
and the tests passed for me locally, so I can't understand what the issue might be.
Can you update this PR from the main branch? You haven't given permission for maintainers to update it.
@X-Guardian Thanks for taking a look at this. I've rebased the branch.
Thanks for this @0x0013. Can you test on one of these container images: dev-debian-d4247bc or dev-alpine-d4247bc
Tested with dev-debian-d4247bc and Atlantis still shows changes after PR branch tail exceeds ATLANTIS_CHECKOUT_DEPTH - as expected.