diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 957ab06b0ca..59332c0b100 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -135,6 +135,20 @@ module IssuesHelper can?(current_user, :create_issue, project) end + def create_confidential_merge_request_enabled? + Feature.enabled?(:create_confidential_merge_request, @project) + end + + def show_new_branch_button? + can_create_confidential_merge_request? || !@issue.confidential? + end + + def can_create_confidential_merge_request? + @issue.confidential? && !@project.private? && + create_confidential_merge_request_enabled? && + can?(current_user, :create_merge_request_in, @project) + end + # Required for Banzai::Filter::IssueReferenceFilter module_function :url_for_issue module_function :url_for_internal_issue diff --git a/app/views/projects/issues/_new_branch.html.haml b/app/views/projects/issues/_new_branch.html.haml index 457b2936278..52bb797b5b3 100644 --- a/app/views/projects/issues/_new_branch.html.haml +++ b/app/views/projects/issues/_new_branch.html.haml @@ -2,6 +2,7 @@ - can_create_merge_request = can?(current_user, :create_merge_request_in, @project) - data_action = can_create_merge_request ? 'create-mr' : 'create-branch' - value = can_create_merge_request ? 'Create merge request' : 'Create branch' + - value = can_create_confidential_merge_request? ? _('Create confidential merge request') : value - can_create_path = can_create_branch_project_issue_path(@project, @issue) - create_mr_path = create_merge_request_project_issue_path(@project, @issue, branch_name: @issue.to_branch_name, ref: @project.default_branch) @@ -23,12 +24,15 @@ = icon('caret-down') .droplab-dropdown - %ul#create-merge-request-dropdown.create-merge-request-dropdown-menu.dropdown-menu.dropdown-menu-right.gl-show-field-errors{ data: { dropdown: true } } + %ul#create-merge-request-dropdown.create-merge-request-dropdown-menu.dropdown-menu.dropdown-menu-right.gl-show-field-errors{ class: ("create-confidential-merge-request-dropdown-menu" if can_create_confidential_merge_request?), data: { dropdown: true } } - if can_create_merge_request %li.droplab-item-selected{ role: 'button', data: { value: 'create-mr', text: _('Create merge request') } } .menu-item = icon('check', class: 'icon') - = _('Create merge request and branch') + - if can_create_confidential_merge_request? + = _('Create confidential merge request and branch') + - else + = _('Create merge request and branch') %li{ class: [!can_create_merge_request && 'droplab-item-selected'], role: 'button', data: { value: 'create-branch', text: _('Create branch') } } .menu-item diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index d55afee4523..8ec07dc3bb4 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -91,7 +91,7 @@ = render 'award_emoji/awards_block', awardable: @issue, inline: true .col-md-12.col-lg-6.new-branch-col #js-vue-discussion-filter{ data: { default_filter: current_user&.notes_filter_for(@issue), notes_filters: UserPreference.notes_filters.to_json } } - = render 'new_branch' unless @issue.confidential? + = render 'new_branch' if show_new_branch_button? = render_if_exists 'projects/issues/discussion' diff --git a/locale/gitlab.pot b/locale/gitlab.pot index b04cb999dc3..379f9f88316 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -3056,6 +3056,12 @@ msgstr "" msgid "Create commit" msgstr "" +msgid "Create confidential merge request" +msgstr "" + +msgid "Create confidential merge request and branch" +msgstr "" + msgid "Create directory" msgstr "" diff --git a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb index b69fba0db00..f9103d83ba0 100644 --- a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb +++ b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe 'User creates branch and merge request on issue page', :js do let(:membership_level) { :developer } let(:user) { create(:user) } - let!(:project) { create(:project, :repository) } + let!(:project) { create(:project, :repository, :public) } let(:issue) { create(:issue, project: project, title: 'Cherry-Coloured Funk') } context 'when signed out' do @@ -163,10 +163,21 @@ describe 'User creates branch and merge request on issue page', :js do let(:issue) { create(:issue, :confidential, project: project) } it 'disables the create branch button' do + stub_feature_flags(create_confidential_merge_request: false) + visit project_issue_path(project, issue) expect(page).not_to have_css('.create-mr-dropdown-wrap') end + + it 'enables the create branch button when feature flag is enabled' do + stub_feature_flags(create_confidential_merge_request: true) + + visit project_issue_path(project, issue) + + expect(page).to have_css('.create-mr-dropdown-wrap') + expect(page).to have_button('Create confidential merge request') + end end context 'when related branch exists' do