diff --git a/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js index c9d28bb67a80500b1da0cc4ceb30d9920f8fab37..fae5fe3ad4c0c0ea40e2afba17c74a1d98cea59d 100644 --- a/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js +++ b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js @@ -186,10 +186,8 @@ export default ( tag: '@merge_user', hideNotEqual: true, }; - if (gon.features.mrMergeUserFilter) { - IssuableTokenKeys.tokenKeys.splice(3, 0, mergeUserToken); - IssuableTokenKeys.tokenKeysWithAlternative.splice(3, 0, mergeUserToken); - } + IssuableTokenKeys.tokenKeys.splice(3, 0, mergeUserToken); + IssuableTokenKeys.tokenKeysWithAlternative.splice(3, 0, mergeUserToken); if (!disableEnvironmentFilter) { const environmentToken = { diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index adc77937570c069789592575aba2455ca0af8cbd..c0b42c0374ca6ca55d0f41361a5904007956f4dc 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -19,7 +19,6 @@ class DashboardController < Dashboard::ApplicationController before_action only: :merge_requests do push_frontend_feature_flag(:mr_approved_filter, type: :ops) - push_frontend_feature_flag(:mr_merge_user_filter, type: :development) end respond_to :html diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 251abcc6d84eda5856b1bce65e2dae1a41958ddf..b38db0f95976addf775329ce87e817cbb0a0c3bc 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -47,7 +47,6 @@ class GroupsController < Groups::ApplicationController before_action only: :merge_requests do push_frontend_feature_flag(:mr_approved_filter, type: :ops) - push_frontend_feature_flag(:mr_merge_user_filter, type: :development) end helper_method :captcha_required? diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 91dd4df33abae709a2c8b5d816d58546ff72c4f8..434779da3ca03aefbf5aab9669f74f5fc03572e0 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -35,7 +35,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo before_action only: :index do push_frontend_feature_flag(:mr_approved_filter, type: :ops) - push_frontend_feature_flag(:mr_merge_user_filter, type: :development) end before_action only: [:show, :diffs, :rapid_diffs] do diff --git a/app/finders/concerns/merge_user_filter.rb b/app/finders/concerns/merge_user_filter.rb index bd35f12b5c7454753b9947bafb77dc115d85764a..160f995c240d1a7ff43f30b91a47be746e9cc91e 100644 --- a/app/finders/concerns/merge_user_filter.rb +++ b/app/finders/concerns/merge_user_filter.rb @@ -5,7 +5,6 @@ module MergeUserFilter def by_merge_user(items) return items unless params.merge_user_id? || params.merge_user_username? - return items if Feature.disabled?(:mr_merge_user_filter, type: :development) mr_metrics_scope = MergeRequest::Metrics mr_metrics_scope = mr_metrics_scope.merged_by(params.merge_user) diff --git a/app/views/shared/issuable/_search_bar.html.haml b/app/views/shared/issuable/_search_bar.html.haml index 1ff407677656b970eb9f31025deae521c9dbb98c..29d8e78f30209e744b08fbaf4c5098ef6694b7f4 100644 --- a/app/views/shared/issuable/_search_bar.html.haml +++ b/app/views/shared/issuable/_search_bar.html.haml @@ -93,8 +93,7 @@ avatar: { lazy: true, url: '{{avatar_url}}' } = render_if_exists 'shared/issuable/approver_dropdown' = render_if_exists 'shared/issuable/approved_by_dropdown' - - if ::Feature.enabled?(:mr_merge_user_filter, type: :development) - = render_if_exists 'shared/issuable/merge_user_dropdown' + = render_if_exists 'shared/issuable/merge_user_dropdown' #js-dropdown-milestone.filtered-search-input-dropdown-menu.dropdown-menu %ul{ data: { dropdown: true } } %li.filter-dropdown-item{ data: { value: 'None' } } diff --git a/config/feature_flags/development/mr_merge_user_filter.yml b/config/feature_flags/development/mr_merge_user_filter.yml deleted file mode 100644 index 147de6b0eaa1a72b594fb5a59b73b9386c58b193..0000000000000000000000000000000000000000 --- a/config/feature_flags/development/mr_merge_user_filter.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: mr_merge_user_filter -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/437871 -milestone: '16.9' -type: development -group: group::code review -default_enabled: false diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md index 707aaeaea5ff35cedb360276be78587799a95b07..263c3d9a45c5a5a743326eb06da35c47f775e94a 100644 --- a/doc/api/merge_requests.md +++ b/doc/api/merge_requests.md @@ -69,8 +69,8 @@ Supported attributes: | `environment` | string | No | Returns merge requests deployed to the given environment. | | `in` | string | No | Modify the scope of the `search` attribute. `title`, `description`, or a string joining them with comma. Default is `title,description`. | | `labels` | string | No | Returns merge requests matching a comma-separated list of labels. `None` lists all merge requests with no labels. `Any` lists all merge requests with at least one label. Predefined names are case-insensitive. | -| `merge_user_id` | integer | No | Returns merge requests which have been merged by the user with the given user `id`. Mutually exclusive with `merge_user_username`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 16.9. Available only when the feature flag `mr_merge_user_filter` is enabled. | -| `merge_user_username` | string | No | Returns merge requests which have been merged by the user with the given `username`. Mutually exclusive with `merge_user_id`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 16.9. Available only when the feature flag `mr_merge_user_filter` is enabled. | +| `merge_user_id` | integer | No | Returns merge requests which have been merged by the user with the given user `id`. Mutually exclusive with `merge_user_username`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 17.0. | +| `merge_user_username` | string | No | Returns merge requests which have been merged by the user with the given `username`. Mutually exclusive with `merge_user_id`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 17.0. | | `milestone` | string | No | Returns merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. | | `my_reaction_emoji` | string | No | Returns merge requests reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. | | `not` | Hash | No | Returns merge requests that do not match the parameters supplied. Accepts: `labels`, `milestone`, `author_id`, `author_username`, `assignee_id`, `assignee_username`, `reviewer_id`, `reviewer_username`, `my_reaction_emoji`. | @@ -251,8 +251,8 @@ Supported attributes: | `environment` | string | No | Returns merge requests deployed to the given environment. | | `iids[]` | integer array | No | Returns the request having the given `iid`. | | `labels` | string | No | Returns merge requests matching a comma-separated list of labels. `None` lists all merge requests with no labels. `Any` lists all merge requests with at least one label. Predefined names are case-insensitive. | -| `merge_user_id` | integer | No | Returns merge requests which have been merged by the user with the given user `id`. Mutually exclusive with `merge_user_username`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 16.9. Available only when the feature flag `mr_merge_user_filter` is enabled. | -| `merge_user_username` | string | No | Returns merge requests which have been merged by the user with the given `username`. Mutually exclusive with `merge_user_id`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 16.9. Available only when the feature flag `mr_merge_user_filter` is enabled. | +| `merge_user_id` | integer | No | Returns merge requests which have been merged by the user with the given user `id`. Mutually exclusive with `merge_user_username`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 17.0. | +| `merge_user_username` | string | No | Returns merge requests which have been merged by the user with the given `username`. Mutually exclusive with `merge_user_id`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 17.0. | | `milestone` | string | No | Returns merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. | | `my_reaction_emoji` | string | No | Returns merge requests reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. | | `not` | Hash | No | Returns merge requests that do not match the parameters supplied. Accepts: `labels`, `milestone`, `author_id`, `author_username`, `assignee_id`, `assignee_username`, `reviewer_id`, `reviewer_username`, `my_reaction_emoji`. | @@ -437,8 +437,8 @@ Supported attributes: | `created_after` | datetime | No | Returns merge requests created on or after the given time. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). | | `created_before` | datetime | No | Returns merge requests created on or before the given time. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). | | `labels` | string | No | Returns merge requests matching a comma-separated list of labels. `None` lists all merge requests with no labels. `Any` lists all merge requests with at least one label. Predefined names are case-insensitive. | -| `merge_user_id` | integer | No | Returns merge requests which have been merged by the user with the given user `id`. Mutually exclusive with `merge_user_username`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 16.9. Available only when the feature flag `mr_merge_user_filter` is enabled. | -| `merge_user_username` | string | No | Returns merge requests which have been merged by the user with the given `username`. Mutually exclusive with `merge_user_id`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 16.9. Available only when the feature flag `mr_merge_user_filter` is enabled. | +| `merge_user_id` | integer | No | Returns merge requests which have been merged by the user with the given user `id`. Mutually exclusive with `merge_user_username`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 17.0. | +| `merge_user_username` | string | No | Returns merge requests which have been merged by the user with the given `username`. Mutually exclusive with `merge_user_id`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 17.0. | | `milestone` | string | No | Returns merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. | | `my_reaction_emoji` | string | No | Returns merge requests reacted by the authenticated user by the given `emoji`. `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. | | `non_archived` | boolean | No | Returns merge requests from non archived projects only. Default is `true`. | diff --git a/doc/user/project/merge_requests/index.md b/doc/user/project/merge_requests/index.md index fb01be4c1f722d2ca7b8cc24bd1ec0e4e4a06902..6781937bcdf5629a4f07a8b1d2eb63d7bb807d4b 100644 --- a/doc/user/project/merge_requests/index.md +++ b/doc/user/project/merge_requests/index.md @@ -84,6 +84,7 @@ or: > - Filtering by `source-branch` [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/134555) in GitLab 16.6. > - Filtering by `merged-by` [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/140002) in GitLab 16.9. Available only when the feature flag `mr_merge_user_filter` is enabled. +> - Filtering by `merged-by` [generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142666) in GitLab 17.0. Feature flag `mr_merge_user_filter` removed. To filter the list of merge requests: diff --git a/ee/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js b/ee/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js index b272737b824763814f3cde0d68a0a586e9fe03ba..5f93f38dc9a3fdecf41d737030030c4fc8795440 100644 --- a/ee/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js +++ b/ee/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js @@ -49,7 +49,7 @@ const approvers = { export default (IssuableTokenKeys, disableBranchFilter = false) => { addExtraTokensForMergeRequests(IssuableTokenKeys, disableBranchFilter); - const tokenPosition = gon.features.mrMergeUserFilter ? 4 : 3; + const tokenPosition = 4; IssuableTokenKeys.tokenKeys.splice(tokenPosition, 0, ...[approvers.token]); IssuableTokenKeys.tokenKeysWithAlternative.splice( diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb index b3576da07d8813b563bc185442400ff80656c94b..4af4d863b1999761a6cb9d8bf641b889cd0068cb 100644 --- a/spec/finders/merge_requests_finder_spec.rb +++ b/spec/finders/merge_requests_finder_spec.rb @@ -182,56 +182,30 @@ subject { described_class.new(user, params).execute } - context 'when flag `mr_merge_user_filter` is disabled' do - before do - stub_feature_flags(mr_merge_user_filter: false) - end - - describe 'by merge_user_id' do - let(:params) { { merge_user_id: user.id } } - let(:expected_mr) { [merge_request1, merge_request2, merge_request3, merge_request4, merge_request5] } - - it { is_expected.to contain_exactly(*expected_mr) } - end - - describe 'by merge_user_username' do - let(:params) { { merge_user_username: user.username } } - let(:expected_mr) { [merge_request1, merge_request2, merge_request3, merge_request4, merge_request5] } + describe 'by merge_user_id' do + let(:params) { { merge_user_id: user.id } } + let(:expected_mr) { [merge_request1, merge_request2] } - it { is_expected.to contain_exactly(*expected_mr) } - end + it { is_expected.to contain_exactly(*expected_mr) } end - context 'when flag `mr_merge_user_filter` is enabled' do - before do - stub_feature_flags(mr_merge_user_filter: true) - end - - describe 'by merge_user_id' do - let(:params) { { merge_user_id: user.id } } - let(:expected_mr) { [merge_request1, merge_request2] } - - it { is_expected.to contain_exactly(*expected_mr) } - end - - describe 'by merge_user_username' do - let(:params) { { merge_user_username: user.username } } - let(:expected_mr) { [merge_request1, merge_request2] } + describe 'by merge_user_username' do + let(:params) { { merge_user_username: user.username } } + let(:expected_mr) { [merge_request1, merge_request2] } - it { is_expected.to contain_exactly(*expected_mr) } - end + it { is_expected.to contain_exactly(*expected_mr) } + end - describe 'by merge_user_id with unknown user id' do - let(:params) { { merge_user_id: 99999 } } + describe 'by merge_user_id with unknown user id' do + let(:params) { { merge_user_id: 99999 } } - it { is_expected.to be_empty } - end + it { is_expected.to be_empty } + end - describe 'by merge_user_username with unknown user name' do - let(:params) { { merge_user_username: 'does-not-exist' } } + describe 'by merge_user_username with unknown user name' do + let(:params) { { merge_user_username: 'does-not-exist' } } - it { is_expected.to be_empty } - end + it { is_expected.to be_empty } end end diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index b231ee35ba7c3453dfc1c6f2ecbee5d631980bb3..0ced13b4a7921ea0f5a31771f7c5eb78b1db2bc3 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -936,78 +936,34 @@ context 'filter by merge_user' do let(:params) { { scope: :all } } - context 'when flag `mr_merge_user_filter` is disabled' do - before do - stub_feature_flags(mr_merge_user_filter: false) - end - - context 'with merge_user_id' do - let(:params) { super().merge(merge_user_id: user.id) } + context 'with merge_user_id' do + let(:params) { super().merge(merge_user_id: user.id) } - it 'returns merged merge requests for the given user' do - get api('/merge_requests', user), params: params - - expect_response_contain_exactly( - merge_request.id, - merge_request_closed.id, - merge_request_merged.id, - merge_request_locked.id, - merge_request2.id - ) - end - end - - context 'with merge_user_username' do - let(:params) { super().merge(merge_user_username: user.username) } - - it 'returns merged merge requests for the given user' do - get api('/merge_requests', user), params: params + it 'returns merged merge requests for the given user' do + get api('/merge_requests', user), params: params - expect_response_contain_exactly( - merge_request.id, - merge_request_closed.id, - merge_request_merged.id, - merge_request_locked.id, - merge_request2.id - ) - end + expect_response_contain_exactly(merge_request_merged.id) end end - context 'when flag `mr_merge_user_filter` is enabled' do - before do - stub_feature_flags(mr_merge_user_filter: true) - end - - context 'with merge_user_id' do - let(:params) { super().merge(merge_user_id: user.id) } - - it 'returns merged merge requests for the given user' do - get api('/merge_requests', user), params: params - - expect_response_contain_exactly(merge_request_merged.id) - end - end - - context 'with merge_user_username' do - let(:params) { super().merge(merge_user_username: user.username) } + context 'with merge_user_username' do + let(:params) { super().merge(merge_user_username: user.username) } - it 'returns merged merge requests for the given user' do - get api('/merge_requests', user), params: params + it 'returns merged merge requests for the given user' do + get api('/merge_requests', user), params: params - expect_response_contain_exactly(merge_request_merged.id) - end + expect_response_contain_exactly(merge_request_merged.id) end + end - context 'with both merge_user_id and merge_user_username' do - let(:params) { super().merge(merge_user_id: user.id, merge_user_username: user.username) } + context 'with both merge_user_id and merge_user_username' do + let(:params) { super().merge(merge_user_id: user.id, merge_user_username: user.username) } - it 'returns a 400' do - get api('/merge_requests', user), params: params + it 'returns a 400' do + get api('/merge_requests', user), params: params - expect(response).to have_gitlab_http_status(:bad_request) - expect(json_response['error']).to eq('merge_user_id, merge_user_username are mutually exclusive') - end + expect(response).to have_gitlab_http_status(:bad_request) + expect(json_response['error']).to eq('merge_user_id, merge_user_username are mutually exclusive') end end end