Unable to query API for merge_requests if Fast-forward merge is enabled in settings

Summary

Users are unable to query the API for merge requests if they have Fast-forward merge checked in Settings > Merge Requests. For example https://gitlab.com/api/v4/projects/<project_id>/deployments/<deployment_id>/merge_requests will return blank json in a browser, but will return merge requests if Merge commit is checked instead.

Steps to reproduce

  • Create a project
  • Add a merge request
  • check Fast-forward merge
  • Query API for /merge_requests
  • Empty json
  • Check Merge commit
  • Returns results

Example Project

https://gitlab.com/gitlab-gold/jfarmiloe-agent-test2/spring-test

What is the current bug behavior?

The API is not picking up merge requests if Fast-forward merge is enabled

What is the expected correct behavior?

The API should return merge requests when queried, regardless if Fast-forward merge is enabled or not

Relevant logs and/or screenshots

Output of checks

Results of GitLab environment info

Expand for output related to GitLab environment info

(For installations with omnibus-gitlab package run and paste the output of:
`sudo gitlab-rake gitlab:env:info`)

(For installations from source run and paste the output of:
`sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)

Results of GitLab application Check

Expand for output related to the GitLab application check

(For installations with omnibus-gitlab package run and paste the output of: sudo gitlab-rake gitlab:check SANITIZE=true)

(For installations from source run and paste the output of: sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production SANITIZE=true)

(we will only investigate if the tests are passing)

Possible fixes

Deployments::LinkMergeRequestsService, which is a service to associate deployments with merge requests, seeks a merge request by merge_commit_sha. However, when FF-merge enabled, the merge_commit_sha doesn't exist, so we need to find by diff_head_sha instead.

Release Notes

When Fast Forward merge is enabled use the diff_head_sha to determine if a merge request is associated with a deployment, this allows to be able to link Merge Request to deployments regardless if Fast Forward merge is enabled or not

Edited Mar 05, 2024 by Nicolò Maria Mezzopera
Assignee Loading
Time tracking Loading