Draft: Filter on regular diffs only
Issue: Merge head commit set as `last_commit` in merge... (#578761)
What does this MR do and why?
References
This MR attempts to fix a bug that is related to a RFH.
gitlab-com/request-for-help#3510+
It enforces calls to latest_merge_request_diff to filter for only regular diffs and ignore merge_head diffs. This method is called in two places apart from merge_request_diff:
From the context of its usage (MR comments), this should apply to regular diffs only
This is a cleanup task that cleans up branches. It appears to make Gitaly calls, replacing the old SHA (which could be a merge_head SHA) with a blank new SHA. I think filtering only for regular diffs in latest_merge_request_diff should be fine here as well, since the source_branch_ref should not be pointing to a merge_head commit
Screenshots or screen recordings
| Before | After |
|---|---|
How to set up and validate locally
In rails console run:
MergeRequest.first.latest_merge_request_diff
SQL loading MergeRequestDiff should explicitly filter on "diff_type" = 1 like so:
SELECT "merge_request_diffs"."id", "merge_request_diffs"."state", "merge_request_diffs"."merge_request_id", "merge_request_diffs"."created_at", "merge_request_diffs"."updated_at", "merge_request_diffs"."base_commit_sha", "merge_request_diffs"."real_size", "merge_request_diffs"."head_commit_sha", "merge_request_diffs"."start_commit_sha", "merge_request_diffs"."commits_count", "merge_request_diffs"."external_diff", "merge_request_diffs"."external_diff_store", "merge_request_diffs"."stored_externally", "merge_request_diffs"."files_count", "merge_request_diffs"."sorted", "merge_request_diffs"."diff_type", "merge_request_diffs"."patch_id_sha", "merge_request_diffs"."project_id" FROM "merge_request_diffs" WHERE "merge_request_diffs"."id" = 97 AND "merge_request_diffs"."diff_type" = 1 LIMIT 1
Previously, the query did not take diff_type into account see: https://gitlab.com/gitlab-com/request-for-help/-/issues/3510#note_2832358544.
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.