Skip to content

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 by Nicolò Maria Mezzopera