Commit aae682a7 authored by John Skarbek's avatar John Skarbek

Merge branch '11-11-stable-patch-1' into '11-11-stable'

Prepare 11.11.2 release

See merge request gitlab-org/gitlab-ce!28679
parents ac0d1491 a25ad6e7
...@@ -280,3 +280,7 @@ label { ...@@ -280,3 +280,7 @@ label {
max-width: $input-lg-width; max-width: $input-lg-width;
width: 100%; width: 100%;
} }
.input-group-text {
max-height: $input-height;
}
...@@ -7,6 +7,7 @@ $secondary: $gray-light; ...@@ -7,6 +7,7 @@ $secondary: $gray-light;
$input-disabled-bg: $gray-light; $input-disabled-bg: $gray-light;
$input-border-color: $gray-200; $input-border-color: $gray-200;
$input-color: $gl-text-color; $input-color: $gl-text-color;
$input-font-size: $gl-font-size;
$font-family-sans-serif: $regular-font; $font-family-sans-serif: $regular-font;
$font-family-monospace: $monospace-font; $font-family-monospace: $monospace-font;
$btn-line-height: 20px; $btn-line-height: 20px;
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
module ImportUrlParams module ImportUrlParams
def import_url_params def import_url_params
return {} unless params.dig(:project, :import_url).present?
{ import_url: import_params_to_full_url(params[:project]) } { import_url: import_params_to_full_url(params[:project]) }
end end
......
...@@ -5,7 +5,7 @@ module LabelsHelper ...@@ -5,7 +5,7 @@ module LabelsHelper
include ActionView::Helpers::TagHelper include ActionView::Helpers::TagHelper
def show_label_issuables_link?(label, issuables_type, current_user: nil, project: nil) def show_label_issuables_link?(label, issuables_type, current_user: nil, project: nil)
return true if label.is_a?(GroupLabel) return true unless label.project_label?
return true unless project return true unless project
project.feature_available?(issuables_type, current_user) project.feature_available?(issuables_type, current_user)
...@@ -159,13 +159,6 @@ module LabelsHelper ...@@ -159,13 +159,6 @@ module LabelsHelper
label.subscribed?(current_user, project) ? 'Unsubscribe' : 'Subscribe' label.subscribed?(current_user, project) ? 'Unsubscribe' : 'Subscribe'
end end
def label_deletion_confirm_text(label)
case label
when GroupLabel then _('Remove this label? This will affect all projects within the group. Are you sure?')
when ProjectLabel then _('Remove this label? Are you sure?')
end
end
def create_label_title(subject) def create_label_title(subject)
case subject case subject
when Group when Group
...@@ -200,7 +193,7 @@ module LabelsHelper ...@@ -200,7 +193,7 @@ module LabelsHelper
end end
def label_status_tooltip(label, status) def label_status_tooltip(label, status)
type = label.is_a?(ProjectLabel) ? 'project' : 'group' type = label.project_label? ? 'project' : 'group'
level = status.unsubscribed? ? type : status.sub('-level', '') level = status.unsubscribed? ? type : status.sub('-level', '')
action = status.unsubscribed? ? 'Subscribe' : 'Unsubscribe' action = status.unsubscribed? ? 'Subscribe' : 'Unsubscribe'
......
...@@ -35,6 +35,14 @@ class LabelPresenter < Gitlab::View::Presenter::Delegated ...@@ -35,6 +35,14 @@ class LabelPresenter < Gitlab::View::Presenter::Delegated
issuable_subject.is_a?(Project) && label.is_a?(GroupLabel) issuable_subject.is_a?(Project) && label.is_a?(GroupLabel)
end end
def project_label?
label.is_a?(ProjectLabel)
end
def subject_name
label.subject.name
end
private private
def context_subject def context_subject
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
.modal-body .modal-body
%p %p
%strong= label.name %strong= label.name
%span will be permanently deleted from #{label.subject.name}. This cannot be undone. %span will be permanently deleted from #{label.subject_name}. This cannot be undone.
.modal-footer .modal-footer
%a{ href: '#', data: { dismiss: 'modal' }, class: 'btn btn-default' } Cancel %a{ href: '#', data: { dismiss: 'modal' }, class: 'btn btn-default' } Cancel
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
= sprite_icon('ellipsis_v') = sprite_icon('ellipsis_v')
.dropdown-menu.dropdown-open-left .dropdown-menu.dropdown-open-left
%ul %ul
- if label.is_a?(ProjectLabel) && label.project.group && can?(current_user, :admin_label, label.project.group) - if label.project_label? && label.project.group && can?(current_user, :admin_label, label.project.group)
%li %li
%button.js-promote-project-label-button.btn.btn-transparent.btn-action{ disabled: true, type: 'button', %button.js-promote-project-label-button.btn.btn-transparent.btn-action{ disabled: true, type: 'button',
data: { url: promote_project_label_path(label.project, label), data: { url: promote_project_label_path(label.project, label),
......
---
title: Fix input group height
merge_request:
author:
type: other
---
title: Fix display of 'Promote to group label' button.
merge_request:
author:
type: fixed
---
title: Update SAST.gitlab-ci.yml - Add SAST_GITLEAKS_ENTROPY_LEVEL
merge_request: 28607
author:
type: fixed
---
title: Fix project settings not being able to update
merge_request: 29097
author:
type: fixed
---
title: Fix migration failure when groups are missing route
merge_request: 29022
author:
type: fixed
---
title: Fix OmniAuth OAuth2Generic strategy not loading
merge_request: 28680
author:
type: fixed
---
title: Use source ref in pipeline webhook
merge_request: 28772
author:
type: fixed
---
title: Stop two-step rebase from hanging when errors occur
merge_request: 29068
author:
type: fixed
...@@ -98,6 +98,7 @@ class GenerateMissingRoutes < ActiveRecord::Migration[4.2] ...@@ -98,6 +98,7 @@ class GenerateMissingRoutes < ActiveRecord::Migration[4.2]
class Namespace < ActiveRecord::Base class Namespace < ActiveRecord::Base
self.table_name = 'namespaces' self.table_name = 'namespaces'
self.inheritance_column = :_type_disabled
include EachBatch include EachBatch
include GenerateMissingRoutes::Routable include GenerateMissingRoutes::Routable
......
...@@ -40,6 +40,7 @@ sast: ...@@ -40,6 +40,7 @@ sast:
SAST_BRAKEMAN_LEVEL \ SAST_BRAKEMAN_LEVEL \
SAST_GOSEC_LEVEL \ SAST_GOSEC_LEVEL \
SAST_FLAWFINDER_LEVEL \ SAST_FLAWFINDER_LEVEL \
SAST_GITLEAKS_ENTROPY_LEVEL \
SAST_DOCKER_CLIENT_NEGOTIATION_TIMEOUT \ SAST_DOCKER_CLIENT_NEGOTIATION_TIMEOUT \
SAST_PULL_ANALYZER_IMAGE_TIMEOUT \ SAST_PULL_ANALYZER_IMAGE_TIMEOUT \
SAST_RUN_ANALYZER_TIMEOUT \ SAST_RUN_ANALYZER_TIMEOUT \
......
...@@ -19,7 +19,7 @@ module Gitlab ...@@ -19,7 +19,7 @@ module Gitlab
def hook_attrs(pipeline) def hook_attrs(pipeline)
{ {
id: pipeline.id, id: pipeline.id,
ref: pipeline.ref, ref: pipeline.source_ref,
tag: pipeline.tag, tag: pipeline.tag,
sha: pipeline.sha, sha: pipeline.sha,
before_sha: pipeline.before_sha, before_sha: pipeline.before_sha,
......
...@@ -36,12 +36,25 @@ module Gitlab ...@@ -36,12 +36,25 @@ module Gitlab
hash_arguments = provider['args'].merge(provider_defaults(provider)) hash_arguments = provider['args'].merge(provider_defaults(provider))
# A Hash from the configuration will be passed as is. # A Hash from the configuration will be passed as is.
provider_arguments << hash_arguments.symbolize_keys provider_arguments << normalize_hash_arguments(hash_arguments)
end end
provider_arguments provider_arguments
end end
def normalize_hash_arguments(args)
args.symbolize_keys!
# Rails 5.1 deprecated the use of string names in the middleware
# (https://github.com/rails/rails/commit/83b767ce), so we need to
# pass in the actual class to Devise.
if args[:strategy_class].is_a?(String)
args[:strategy_class] = args[:strategy_class].constantize
end
args
end
def provider_defaults(provider) def provider_defaults(provider)
case provider['name'] case provider['name']
when 'cas3' when 'cas3'
......
...@@ -7927,12 +7927,6 @@ msgstr "" ...@@ -7927,12 +7927,6 @@ msgstr ""
msgid "Remove spent time" msgid "Remove spent time"
msgstr "" msgstr ""
msgid "Remove this label? Are you sure?"
msgstr ""
msgid "Remove this label? This will affect all projects within the group. Are you sure?"
msgstr ""
msgid "Remove time estimate" msgid "Remove time estimate"
msgstr "" msgstr ""
......
...@@ -8,6 +8,18 @@ describe ImportUrlParams do ...@@ -8,6 +8,18 @@ describe ImportUrlParams do
controller.import_url_params controller.import_url_params
end end
context 'empty URL' do
let(:params) do
ActionController::Parameters.new(project: {
title: 'Test'
})
end
it 'returns empty hash' do
expect(import_url_params).to eq({})
end
end
context 'url and password separately provided' do context 'url and password separately provided' do
let(:params) do let(:params) do
ActionController::Parameters.new(project: { ActionController::Parameters.new(project: {
......
# frozen_string_literal: true
require 'spec_helper'
describe 'User promotes label' do
set(:group) { create(:group) }
set(:user) { create(:user) }
set(:project) { create(:project, namespace: group) }
set(:label) { create(:label, project: project) }
context 'when user can admin group labels' do
before do
group.add_developer(user)
sign_in(user)
visit(project_labels_path(project))
end
it "shows label promote button" do
expect(page).to have_selector('.js-promote-project-label-button')
end
end
context 'when user cannot admin group labels' do
before do
project.add_developer(user)
sign_in(user)
visit(project_labels_path(project))
end
it "does not show label promote button" do
expect(page).not_to have_selector('.js-promote-project-label-button')
end
end
end
...@@ -21,8 +21,11 @@ describe "User removes labels" do ...@@ -21,8 +21,11 @@ describe "User removes labels" do
page.first(".label-list-item") do page.first(".label-list-item") do
first('.js-label-options-dropdown').click first('.js-label-options-dropdown').click
first(".remove-row").click first(".remove-row").click
first(:link, "Delete label").click
end end
expect(page).to have_content("#{label.title} will be permanently deleted from #{project.name}. This cannot be undone.")
first(:link, "Delete label").click
end end
expect(page).to have_content("Label was removed").and have_no_content(label.title) expect(page).to have_content("Label was removed").and have_no_content(label.title)
......
...@@ -6,7 +6,7 @@ describe LabelsHelper do ...@@ -6,7 +6,7 @@ describe LabelsHelper do
let(:context_project) { project } let(:context_project) { project }
context "when asking for a #{issuables_type} link" do context "when asking for a #{issuables_type} link" do
subject { show_label_issuables_link?(label, issuables_type, project: context_project) } subject { show_label_issuables_link?(label.present(issuable_subject: nil), issuables_type, project: context_project) }
context "when #{issuables_type} are enabled for the project" do context "when #{issuables_type} are enabled for the project" do
let(:project) { create(:project, "#{issuables_type}_access_level": ProjectFeature::ENABLED) } let(:project) { create(:project, "#{issuables_type}_access_level": ProjectFeature::ENABLED) }
...@@ -279,4 +279,21 @@ describe LabelsHelper do ...@@ -279,4 +279,21 @@ describe LabelsHelper do
expect(label.color).to eq('bar') expect(label.color).to eq('bar')
end end
end end
describe '#label_status_tooltip' do
let(:status) { 'unsubscribed'.inquiry }
subject { label_status_tooltip(label.present(issuable_subject: nil), status) }
context 'with a project label' do
let(:label) { create(:label, title: 'bug') }
it { is_expected.to eq('Subscribe at project level') }
end
context 'with a group label' do
let(:label) { create(:group_label, title: 'bug') }
it { is_expected.to eq('Subscribe at group level') }
end
end
end end
...@@ -50,5 +50,14 @@ describe Gitlab::DataBuilder::Pipeline do ...@@ -50,5 +50,14 @@ describe Gitlab::DataBuilder::Pipeline do
it { expect(attributes[:variables]).to be_a(Array) } it { expect(attributes[:variables]).to be_a(Array) }
it { expect(attributes[:variables]).to contain_exactly({ key: 'TRIGGER_KEY_1', value: 'TRIGGER_VALUE_1' }) } it { expect(attributes[:variables]).to contain_exactly({ key: 'TRIGGER_KEY_1', value: 'TRIGGER_VALUE_1' }) }
end end
context 'when pipeline is a detached merge request pipeline' do
let(:merge_request) { create(:merge_request, :with_detached_merge_request_pipeline) }
let(:pipeline) { merge_request.all_pipelines.first }
it 'returns a source ref' do
expect(attributes[:ref]).to eq(merge_request.source_branch)
end
end
end end
end end
...@@ -38,6 +38,28 @@ describe Gitlab::OmniauthInitializer do ...@@ -38,6 +38,28 @@ describe Gitlab::OmniauthInitializer do
subject.execute([hash_config]) subject.execute([hash_config])
end end
it 'normalizes a String strategy_class' do
hash_config = { 'name' => 'hash', 'args' => { strategy_class: 'OmniAuth::Strategies::OAuth2Generic' } }
expect(devise_config).to receive(:omniauth).with(:hash, strategy_class: OmniAuth::Strategies::OAuth2Generic)
subject.execute([hash_config])
end
it 'allows a class to be specified in strategy_class' do
hash_config = { 'name' => 'hash', 'args' => { strategy_class: OmniAuth::Strategies::OAuth2Generic } }
expect(devise_config).to receive(:omniauth).with(:hash, strategy_class: OmniAuth::Strategies::OAuth2Generic)
subject.execute([hash_config])
end
it 'throws an error for an invalid strategy_class' do
hash_config = { 'name' => 'hash', 'args' => { strategy_class: 'OmniAuth::Strategies::Bogus' } }
expect { subject.execute([hash_config]) }.to raise_error(NameError)
end
it 'configures fail_with_empty_uid for shibboleth' do it 'configures fail_with_empty_uid for shibboleth' do
shibboleth_config = { 'name' => 'shibboleth', 'args' => {} } shibboleth_config = { 'name' => 'shibboleth', 'args' => {} }
......
...@@ -8,7 +8,7 @@ describe GenerateMissingRoutes, :migration do ...@@ -8,7 +8,7 @@ describe GenerateMissingRoutes, :migration do
let(:routes) { table(:routes) } let(:routes) { table(:routes) }
it 'creates routes for projects without a route' do it 'creates routes for projects without a route' do
namespace = namespaces.create!(name: 'GitLab', path: 'gitlab') namespace = namespaces.create!(name: 'GitLab', path: 'gitlab', type: 'Group')
routes.create!( routes.create!(
path: 'gitlab', path: 'gitlab',
......
...@@ -62,4 +62,32 @@ describe LabelPresenter do ...@@ -62,4 +62,32 @@ describe LabelPresenter do
expect(label.can_subscribe_to_label_in_different_levels?).to be_falsey expect(label.can_subscribe_to_label_in_different_levels?).to be_falsey
end end
end end
describe '#project_label?' do
context 'with group label' do
subject { group_label.project_label? }
it { is_expected.to be_falsey }
end
context 'with project label' do
subject { label.project_label? }
it { is_expected.to be_truthy }
end
end
describe '#subject_name' do
context 'with group label' do
subject { group_label.subject_name }
it { is_expected.to eq(group_label.group.name) }
end
context 'with project label' do
subject { label.subject_name }
it { is_expected.to eq(label.project.name) }
end
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment