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:

https://gitlab.com/gitlab-org/gitlab/-/blob/a3fb104027915bc405875b04eac3f555835086db/ee/app/services/vulnerabilities/remediations/note_service.rb#L54-56

From the context of its usage (MR comments), this should apply to regular diffs only

https://gitlab.com/gitlab-org/gitlab/-/blob/a3fb104027915bc405875b04eac3f555835086db/lib/tasks/gitlab/cleanup.rake#L235-235

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.

bug

Edited by Safwan Ahmed

Merge request reports

Loading