From 09f94f5fa7c5863c49b6118612605722dbe1b64f Mon Sep 17 00:00:00 2001 From: Marc Shaw <mshaw@gitlab.com> Date: Wed, 14 Feb 2024 20:51:40 +0900 Subject: [PATCH] Check every mergeability checks for detailed_merge_status MR: gitlab.com/gitlab-org/gitlab/-/merge_requests/144729 --- .../detailed_merge_status_enum.rb | 6 ++++++ .../detailed_merge_status_service.rb | 4 ++-- doc/api/graphql/reference/index.md | 2 ++ .../detailed_merge_status_service_spec.rb | 20 +++++++++---------- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/graphql/types/merge_requests/detailed_merge_status_enum.rb b/app/graphql/types/merge_requests/detailed_merge_status_enum.rb index ada572f45e82..2d32bbe9148e 100644 --- a/app/graphql/types/merge_requests/detailed_merge_status_enum.rb +++ b/app/graphql/types/merge_requests/detailed_merge_status_enum.rb @@ -54,6 +54,12 @@ class DetailedMergeStatusEnum < BaseEnum value 'JIRA_ASSOCIATION', value: :jira_association_missing, description: 'Either the title or description must reference a Jira issue.' + value 'CONFLICT', + value: :conflict, + description: 'There are conflicts between the source and target branches.' + value 'NEED_REBASE', + value: :need_rebase, + description: 'Merge request needs to be rebased.' end end end diff --git a/app/services/merge_requests/mergeability/detailed_merge_status_service.rb b/app/services/merge_requests/mergeability/detailed_merge_status_service.rb index 2e28ffc43639..e4444fdaea9e 100644 --- a/app/services/merge_requests/mergeability/detailed_merge_status_service.rb +++ b/app/services/merge_requests/mergeability/detailed_merge_status_service.rb @@ -33,7 +33,7 @@ def execute attr_reader :merge_request, :checks, :ci_check def preparing? - merge_request.preparing? && !merge_request.merge_request_diff.persisted? + merge_request.preparing? end def checking? @@ -48,7 +48,7 @@ def check_results strong_memoize(:check_results) do merge_request .execute_merge_checks( - MergeRequest.mergeable_state_checks, + MergeRequest.all_mergeability_checks, params: { skip_ci_check: true } ) end diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 41e227a1c0b2..ef7d2e1b27b5 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -31203,11 +31203,13 @@ Detailed representation of whether a GitLab merge request can be merged. | <a id="detailedmergestatusci_must_pass"></a>`CI_MUST_PASS` | Pipeline must succeed before merging. | | <a id="detailedmergestatusci_still_running"></a>`CI_STILL_RUNNING` | Pipeline is still running. | | <a id="detailedmergestatuscommits_status"></a>`COMMITS_STATUS` | Source branch exists and contains commits. | +| <a id="detailedmergestatusconflict"></a>`CONFLICT` | There are conflicts between the source and target branches. | | <a id="detailedmergestatusdiscussions_not_resolved"></a>`DISCUSSIONS_NOT_RESOLVED` | Discussions must be resolved before merging. | | <a id="detailedmergestatusdraft_status"></a>`DRAFT_STATUS` | Merge request must not be draft before merging. | | <a id="detailedmergestatusexternal_status_checks"></a>`EXTERNAL_STATUS_CHECKS` | Status checks must pass. | | <a id="detailedmergestatusjira_association"></a>`JIRA_ASSOCIATION` | Either the title or description must reference a Jira issue. | | <a id="detailedmergestatusmergeable"></a>`MERGEABLE` | Branch can be merged. | +| <a id="detailedmergestatusneed_rebase"></a>`NEED_REBASE` | Merge request needs to be rebased. | | <a id="detailedmergestatusnot_approved"></a>`NOT_APPROVED` | Merge request must be approved before merging. | | <a id="detailedmergestatusnot_open"></a>`NOT_OPEN` | Merge request must be open before merging. | | <a id="detailedmergestatuspolicies_denied"></a>`POLICIES_DENIED` | There are denied policies for the merge request. | diff --git a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb index a3c5427ee825..3d0b341b1fae 100644 --- a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb +++ b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb @@ -5,6 +5,16 @@ RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, feature_category: :code_review_workflow do subject(:detailed_merge_status) { described_class.new(merge_request: merge_request).execute } + let(:merge_request) { create(:merge_request) } + + it 'calls every mergeability check' do + expect(merge_request).to receive(:execute_merge_checks) + .with(MergeRequest.all_mergeability_checks, any_args) + .and_call_original + + detailed_merge_status + end + context 'when merge status is cannot_be_merged_rechecking' do let(:merge_request) { create(:merge_request, merge_status: :cannot_be_merged_rechecking) } @@ -23,16 +33,6 @@ end end - context 'when merge status is preparing and merge request diff is persisted' do - let(:merge_request) { create(:merge_request, merge_status: :preparing) } - - it 'returns :checking' do - allow(merge_request.merge_request_diff).to receive(:persisted?).and_return(true) - - expect(detailed_merge_status).to eq(:mergeable) - end - end - context 'when merge status is checking' do let(:merge_request) { create(:merge_request, merge_status: :checking) } -- GitLab