diff --git a/app/graphql/resolvers/merge_requests_resolver.rb b/app/graphql/resolvers/merge_requests_resolver.rb index 4761be1cf92f31b10d0310b7e8c29224001f1b3d..ebbb68611b3d0b609fc996b495208c69e214ce86 100644 --- a/app/graphql/resolvers/merge_requests_resolver.rb +++ b/app/graphql/resolvers/merge_requests_resolver.rb @@ -176,6 +176,13 @@ def self.accept_reviewer argument :reviewer_username, GraphQL::Types::String, required: false, description: 'Username of the reviewer to exclude.' + argument :source_branches, [GraphQL::Types::String], + required: false, + as: :source_branch, + description: <<~DESC + Array of source branch names. + No resolved merge requests will have one of these branches as their source. + DESC end validates mutually_exclusive: [:assignee_username, :assignee_wildcard_id] diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 94e1306c5de7eca1c8305f1aa7d24b7789518240..32adfbd7065cc06d31a29c3a33239d4e8165b763 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -42906,6 +42906,7 @@ Defines which user roles, users, or groups can merge into a protected branch. | `myReactionEmoji` | [`String`](#string) | Filter by reaction emoji to exclude. | | `releaseTag` | [`String`](#string) | Filter by release tag to exclude. | | `reviewerUsername` | [`String`](#string) | Username of the reviewer to exclude. | +| `sourceBranches` | [`[String!]`](#string) | Array of source branch names. No resolved merge requests will have one of these branches as their source. | ### `MonthSelectionInput` diff --git a/spec/graphql/resolvers/merge_requests_resolver_spec.rb b/spec/graphql/resolvers/merge_requests_resolver_spec.rb index b586e8c4f5b97e155ed2d6f78a85061fe66516f3..15f3ca47becd579d307825e3c38cb7b3ea5cf719 100644 --- a/spec/graphql/resolvers/merge_requests_resolver_spec.rb +++ b/spec/graphql/resolvers/merge_requests_resolver_spec.rb @@ -149,6 +149,16 @@ end end + context 'with negated source branches argument' do + it 'excludes merge requests with given source branches from selection' do + mrs = [merge_request_3, merge_request_4] + branches = mrs.map(&:source_branch) + result = resolve_mr(project, not: { source_branches: branches }) + + expect(result).not_to include(merge_request_3, merge_request_4) + end + end + context 'with target branches argument' do it 'takes one argument' do result = resolve_mr(project, target_branches: [merge_request_3.target_branch])