Look for merge request replacements during pre-release merges
A merge request processed during pre-release testing may apply cleanly to its original target branch while not applying cleanly to some alternative target branch that it will eventually be included in. This possibility is currently limited to open source changes that will eventually be included in the Subscription Edition.
Some conflicts like this cannot be resolved by modifying the alternative target branch in a way that eliminates the conflict. For example, if some API is modified in the alternative target branch, such a merge conflict needs to be resolved manually at some point.
Since the goal of pre-release testing is to enable testing the results of applying all of the filtered merge requests into all target branches they will eventually end up in, pre_release_merge.py needs to handle this situation gracefully.
Extend pre_release_merge.py so that, for each merge request qualified for merging, it looks for a replacement branch that should be merged instead of the merge request's original source branch. This enables preparing an appropriately-named branch with the relevant merge conflicts manually resolved and testing that branch instead of the merge request's original source branch.
Case in point:
- isc-private/bind9!678
- https://gitlab.isc.org/isc-private/bind9/-/jobs/4287061