CE port for Group bulk edit merge requests
Add bulk update sidebar to merge requests template Add js to toggle sidebar Fix bulk update button in issues template Add specs for merge requests in bulk update service
This commit is contained in:
parent
4435cdde49
commit
89d5663e78
|
@ -1,11 +1,15 @@
|
||||||
import projectSelect from '~/project_select';
|
import projectSelect from '~/project_select';
|
||||||
import initFilteredSearch from '~/pages/search/init_filtered_search';
|
import initFilteredSearch from '~/pages/search/init_filtered_search';
|
||||||
|
import issuableInitBulkUpdateSidebar from '~/issuable_init_bulk_update_sidebar';
|
||||||
import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys';
|
import IssuableFilteredSearchTokenKeys from '~/filtered_search/issuable_filtered_search_token_keys';
|
||||||
import addExtraTokensForMergeRequests from 'ee_else_ce/filtered_search/add_extra_tokens_for_merge_requests';
|
import addExtraTokensForMergeRequests from 'ee_else_ce/filtered_search/add_extra_tokens_for_merge_requests';
|
||||||
import { FILTERED_SEARCH } from '~/pages/constants';
|
import { FILTERED_SEARCH } from '~/pages/constants';
|
||||||
|
|
||||||
|
const ISSUABLE_BULK_UPDATE_PREFIX = 'merge_request_';
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
addExtraTokensForMergeRequests(IssuableFilteredSearchTokenKeys);
|
addExtraTokensForMergeRequests(IssuableFilteredSearchTokenKeys);
|
||||||
|
issuableInitBulkUpdateSidebar.init(ISSUABLE_BULK_UPDATE_PREFIX);
|
||||||
|
|
||||||
initFilteredSearch({
|
initFilteredSearch({
|
||||||
page: FILTERED_SEARCH.MERGE_REQUESTS,
|
page: FILTERED_SEARCH.MERGE_REQUESTS,
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
= render 'shared/issuable/feed_buttons'
|
= render 'shared/issuable/feed_buttons'
|
||||||
|
|
||||||
- if @can_bulk_update
|
- if @can_bulk_update
|
||||||
= render_if_exists 'shared/issuable/bulk_update_button'
|
= render_if_exists 'shared/issuable/bulk_update_button', type: :issues
|
||||||
|
|
||||||
= render 'shared/new_project_item_select', path: 'issues/new', label: "New issue", type: :issues, with_feature_enabled: 'issues', with_shared: false, include_projects_in_subgroups: true
|
= render 'shared/new_project_item_select', path: 'issues/new', label: "New issue", type: :issues, with_feature_enabled: 'issues', with_shared: false, include_projects_in_subgroups: true
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
- @can_bulk_update = can?(current_user, :admin_merge_request, @group)
|
||||||
|
|
||||||
- page_title "Merge Requests"
|
- page_title "Merge Requests"
|
||||||
|
|
||||||
- if group_merge_requests_count(state: 'all').zero?
|
- if group_merge_requests_count(state: 'all').zero?
|
||||||
|
@ -7,8 +9,14 @@
|
||||||
= render 'shared/issuable/nav', type: :merge_requests
|
= render 'shared/issuable/nav', type: :merge_requests
|
||||||
- if current_user
|
- if current_user
|
||||||
.nav-controls
|
.nav-controls
|
||||||
|
- if @can_bulk_update
|
||||||
|
= render_if_exists 'shared/issuable/bulk_update_button', type: :merge_requests
|
||||||
|
|
||||||
= render 'shared/new_project_item_select', path: 'merge_requests/new', label: "New merge request", type: :merge_requests, with_feature_enabled: 'merge_requests', with_shared: false, include_projects_in_subgroups: true
|
= render 'shared/new_project_item_select', path: 'merge_requests/new', label: "New merge request", type: :merge_requests, with_feature_enabled: 'merge_requests', with_shared: false, include_projects_in_subgroups: true
|
||||||
|
|
||||||
= render 'shared/issuable/search_bar', type: :merge_requests
|
= render 'shared/issuable/search_bar', type: :merge_requests
|
||||||
|
|
||||||
|
- if @can_bulk_update
|
||||||
|
= render_if_exists 'shared/issuable/group_bulk_update_sidebar', group: @group, type: :merge_requests
|
||||||
|
|
||||||
= render 'shared/merge_requests'
|
= render 'shared/merge_requests'
|
||||||
|
|
|
@ -1,22 +1,26 @@
|
||||||
# Bulk editing issue milestones **(PREMIUM)**
|
# Bulk editing issue and merge request milestones **(PREMIUM)**
|
||||||
|
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/7249) in
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/7249) for issues in
|
||||||
[GitLab Ultimate](https://about.gitlab.com/pricing/) 12.1.
|
[GitLab Premium](https://about.gitlab.com/pricing/) 12.1.
|
||||||
|
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/12719) for merge
|
||||||
|
requests in GitLab [GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
|
||||||
|
|
||||||
NOTE: **Note:**
|
> NOTE: **Note:**
|
||||||
A permission level of `Reporter` or higher is required in order to manage issues.
|
>
|
||||||
|
> - A permission level of `Reporter` or higher is required in order to manage issues.
|
||||||
|
> - A permission level of `Developer` or higher is required in order to manage merge requests.
|
||||||
|
|
||||||
Milestones can be updated simultaneously across multiple issues by using the bulk editing feature.
|
Milestones can be updated simultaneously across multiple issues or merge requests by using the bulk editing feature.
|
||||||
|
|
||||||
![Bulk editing](img/bulk-editing.png)
|
![Bulk editing](img/bulk-editing.png)
|
||||||
|
|
||||||
To bulk update group issue milestones:
|
To bulk update group issue or merge request milestones:
|
||||||
|
|
||||||
1. Navigate to the issues list.
|
1. Navigate to the issues or merge requests list.
|
||||||
1. Click **Edit issues**.
|
1. Click the **Edit issues** or **Edit merge requests** button.
|
||||||
- This will open a sidebar on the right-hand side of your screen where an editable field
|
- This will open a sidebar on the right-hand side of your screen where an editable field
|
||||||
for milestones will be displayed.
|
for milestones will be displayed.
|
||||||
- Checkboxes will also appear beside each issue.
|
- Checkboxes will also appear beside each issue or merge request.
|
||||||
1. Check the checkbox beside each issue to be edited.
|
1. Check the checkbox beside each issue to be edited.
|
||||||
1. Select the desired milestone from the sidebar.
|
1. Select the desired milestone from the sidebar.
|
||||||
1. Click **Update all**.
|
1. Click **Update all**.
|
||||||
|
|
|
@ -78,9 +78,9 @@ Issues and merge requests are part of projects. For a given group, you can view
|
||||||
[issues](../project/issues/index.md#issues-list) and [merge requests](../project/merge_requests/index.md#merge-requests-per-group) across all projects in that group,
|
[issues](../project/issues/index.md#issues-list) and [merge requests](../project/merge_requests/index.md#merge-requests-per-group) across all projects in that group,
|
||||||
together in a single list view.
|
together in a single list view.
|
||||||
|
|
||||||
### Bulk editing issues
|
### Bulk editing issues and merge requests
|
||||||
|
|
||||||
For details, see [bulk editing issues](../group/bulk_editing/index.md).
|
For details, see [bulk editing issues and merge requests](../group/bulk_editing/index.md).
|
||||||
|
|
||||||
## Create a new group
|
## Create a new group
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@ by using the bulk editing feature.
|
||||||
![Bulk editing](img/bulk-editing.png)
|
![Bulk editing](img/bulk-editing.png)
|
||||||
|
|
||||||
NOTE: **Note:**
|
NOTE: **Note:**
|
||||||
Bulk editing of merge requests is only available at the project level.
|
Bulk editing issues and merge requests is also available at the group level.
|
||||||
For more details, see [bulk editing group issues](../group/bulk_editing/index.md).
|
For more details, see [bulk editing group issues and merge requests](../group/bulk_editing/index.md).
|
||||||
|
|
||||||
To update multiple project issues or merge requests at the same time:
|
To update multiple project issues or merge requests at the same time:
|
||||||
|
|
||||||
|
|
|
@ -16,22 +16,22 @@ describe Issuable::BulkUpdateService do
|
||||||
|
|
||||||
shared_examples 'updates milestones' do
|
shared_examples 'updates milestones' do
|
||||||
it 'succeeds' do
|
it 'succeeds' do
|
||||||
result = bulk_update(issues, milestone_id: milestone.id)
|
result = bulk_update(issuables, milestone_id: milestone.id)
|
||||||
|
|
||||||
expect(result[:success]).to be_truthy
|
expect(result[:success]).to be_truthy
|
||||||
expect(result[:count]).to eq(issues.count)
|
expect(result[:count]).to eq(issuables.count)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'updates the issues milestone' do
|
it 'updates the issuables milestone' do
|
||||||
bulk_update(issues, milestone_id: milestone.id)
|
bulk_update(issuables, milestone_id: milestone.id)
|
||||||
|
|
||||||
issues.each do |issue|
|
issuables.each do |issuable|
|
||||||
expect(issue.reload.milestone).to eq(milestone)
|
expect(issuable.reload.milestone).to eq(milestone)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with project issues' do
|
context 'with project issuables' do
|
||||||
describe 'close issues' do
|
describe 'close issues' do
|
||||||
let(:issues) { create_list(:issue, 2, project: project) }
|
let(:issues) { create_list(:issue, 2, project: project) }
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ describe Issuable::BulkUpdateService do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'updating milestones' do
|
describe 'updating milestones' do
|
||||||
let(:issues) { [create(:issue, project: project)] }
|
let(:issuables) { [create(:issue, project: project)] }
|
||||||
let(:milestone) { create(:milestone, project: project) }
|
let(:milestone) { create(:milestone, project: project) }
|
||||||
|
|
||||||
it_behaves_like 'updates milestones'
|
it_behaves_like 'updates milestones'
|
||||||
|
@ -360,22 +360,32 @@ describe Issuable::BulkUpdateService do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with group issues' do
|
context 'with group issuables ' do
|
||||||
let(:group) { create(:group) }
|
let(:group) { create(:group) }
|
||||||
|
|
||||||
context 'updating milestone' do
|
describe 'updating milestones' do
|
||||||
let(:milestone) { create(:milestone, group: group) }
|
let(:milestone) { create(:milestone, group: group) }
|
||||||
let(:project1) { create(:project, :repository, group: group) }
|
let(:project) { create(:project, :repository, group: group) }
|
||||||
let(:project2) { create(:project, :repository, group: group) }
|
|
||||||
let(:issue1) { create(:issue, project: project1) }
|
|
||||||
let(:issue2) { create(:issue, project: project2) }
|
|
||||||
let(:issues) { [issue1, issue2] }
|
|
||||||
|
|
||||||
before do
|
before do
|
||||||
group.add_maintainer(user)
|
group.add_maintainer(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when issues' do
|
||||||
|
let(:issue1) { create(:issue, project: project) }
|
||||||
|
let(:issue2) { create(:issue, project: project) }
|
||||||
|
let(:issuables) { [issue1, issue2] }
|
||||||
|
|
||||||
|
it_behaves_like 'updates milestones'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when merge requests' do
|
||||||
|
let(:merge_request1) { create(:merge_request, source_project: project, source_branch: 'branch-1') }
|
||||||
|
let(:merge_request2) { create(:merge_request, source_project: project, source_branch: 'branch-2') }
|
||||||
|
let(:issuables) { [merge_request1, merge_request2] }
|
||||||
|
|
||||||
it_behaves_like 'updates milestones'
|
it_behaves_like 'updates milestones'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue