Merge request version linking to incorrect diff
Summary
I clicked on the "version 4 of the diff" link in a merge request I was reviewing and was brought to a page with a gigantic diff that was completely unrelated to the merge request.
Steps to reproduce
- Visit this particular MR diff: !136797 (diffs)
- Change the comparison base to a prior version of the MR.
Example Project
It's happening on the gitlab project, on gitlab.com.
What is the current bug behavior?
We see the normal diff when comparing the target and latest MR version:
But if I try to see what changed between the second-to-latest version and the latest version, as if the author made changes after my last review, the diff just explodes:
What is the expected correct behavior?
A much smaller diff should be rendered, for the MR author's specific push to the open MR. The diff should be a subset of the current MR diff.
Possible fixes
I believe that we're selecting a very old commit to compare with a merged results pipeline, probably the git most-recent-common-commit, by using triple-dot in the diff logic.
If we're using pipelines for merged results, we should be comparing the MR head commit to the direct parent of the merge commit from the target branch, not the one way back where the source branch diverged from the target.
I've written a much more extensive explanation, with accompanying diagrams, of the implementation problem in MergeRequest#base_pipeline does not work with p... (#238399)