Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2021-03-04 06:11:17 +00:00
parent f56bae9a64
commit 775b2961fe
13 changed files with 131 additions and 45 deletions

View File

@ -45,13 +45,21 @@ export default {
shouldShowDeleteButton() { shouldShowDeleteButton() {
return this.canDestroy && this.showDeleteButton; return this.canDestroy && this.showDeleteButton;
}, },
deleteIssuableButtonText() {
return sprintf(__('Delete %{issuableType}'), {
issuableType: issuableTypes[this.issuableType],
});
},
}, },
methods: { methods: {
closeForm() { closeForm() {
eventHub.$emit('close.form'); eventHub.$emit('close.form');
}, },
deleteIssuable() { deleteIssuable() {
const confirmMessage = sprintf(__('%{issuableType} will be removed! Are you sure?'), { const confirmMessage =
this.issuableType === 'epic'
? __('Delete this epic and all descendants?')
: sprintf(__('%{issuableType} will be removed! Are you sure?'), {
issuableType: issuableTypes[this.issuableType], issuableType: issuableTypes[this.issuableType],
}); });
// eslint-disable-next-line no-alert // eslint-disable-next-line no-alert
@ -90,7 +98,7 @@ export default {
class="float-right gl-mr-3 qa-delete-button" class="float-right gl-mr-3 qa-delete-button"
@click="deleteIssuable" @click="deleteIssuable"
> >
{{ __('Delete') }} {{ deleteIssuableButtonText }}
</gl-button> </gl-button>
</div> </div>
</template> </template>

View File

@ -0,0 +1,10 @@
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" }
= user_label
%td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; margin: 0; padding: 14px 0 0px 5px; font-size: 15px; line-height: 1.4; color: #333333; font-weight: 400; width: 75%; border-top-style: solid; border-top-color: #ededed; border-top-width: 1px; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" }
%ul.users-list{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; font-size: 15px; line-height: 1.4; padding-right: 5px; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" }
- users.each do |user|
%li
%img.avatar{ alt: "Avatar", height: "24", src: avatar_icon_for_user(user, 24, only_path: false), style: "border-radius: 12px; max-width: 100%; height: auto; -ms-interpolation-mode: bicubic; margin: -2px 0;", width: "24" }
%a.muted{ href: user_url(user), style: "color: #333333; text-decoration: none; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; vertical-align: top;" }
= user.name

View File

@ -42,13 +42,13 @@
} }
} }
ul.assignees-list { ul.users-list {
list-style: none; list-style: none;
padding: 0px; padding: 0px;
display: block; display: block;
margin-top: 0px; margin-top: 0px;
} }
ul.assignees-list li { ul.users-list li {
display: inline-block; display: inline-block;
padding-right: 12px; padding-right: 12px;
padding-top: 8px; padding-top: 8px;
@ -137,16 +137,10 @@
= @merge_request.author.name = @merge_request.author.name
- if @merge_request.assignees.any? - if @merge_request.assignees.any?
%tr = render 'users_list', users: @merge_request.assignees, user_label: assignees_label(@merge_request, include_value: false)
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" }
= assignees_label(@merge_request, include_value: false) - if @merge_request.reviewers.any?
%td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; margin: 0; padding: 14px 0 0px 5px; font-size: 15px; line-height: 1.4; color: #333333; font-weight: 400; width: 75%; border-top-style: solid; border-top-color: #ededed; border-top-width: 1px; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" } = render 'users_list', users: @merge_request.reviewers, user_label: reviewers_label(@merge_request, include_value: false)
%ul.assignees-list{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; font-size: 15px; line-height: 1.4; padding-right: 5px; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" }
- @merge_request.assignees.each do |assignee|
%li
%img.avatar{ alt: "Avatar", height: "24", src: avatar_icon_for_user(assignee, 24, only_path: false), style: "border-radius: 12px; max-width: 100%; height: auto; -ms-interpolation-mode: bicubic; margin: -2px 0;", width: "24" }
%a.muted{ href: user_url(assignee), style: "color: #333333; text-decoration: none; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; vertical-align: top;" }
= assignee.name
= render_if_exists 'layouts/mailer/additional_text' = render_if_exists 'layouts/mailer/additional_text'

View File

@ -6,3 +6,4 @@ Merge Request url: #{project_merge_request_url(@merge_request.target_project, @m
Author: #{sanitize_name(@merge_request.author_name)} Author: #{sanitize_name(@merge_request.author_name)}
= assignees_label(@merge_request) = assignees_label(@merge_request)
= reviewers_label(@merge_request)

View File

@ -0,0 +1,5 @@
---
title: Add reviewers detail to merge when pipeline succeeds email
merge_request: 55463
author:
type: added

View File

@ -0,0 +1,5 @@
---
title: Clarify epic delete warning
merge_request: 55574
author:
type: changed

View File

@ -0,0 +1,5 @@
---
title: Fix disabling of Kroki optional formats
merge_request: 55665
author:
type: fixed

View File

@ -75,6 +75,9 @@ A modal appears to confirm your action.
Deleting an epic releases all existing issues from their associated epic in the system. Deleting an epic releases all existing issues from their associated epic in the system.
WARNING:
If you delete an epic, all its child epics and their descendants are deleted as well. If needed, you can [remove child epics](#remove-a-child-epic-from-a-parent-epic) from the parent epic before you delete it.
## Close an epic ## Close an epic
Whenever you decide that there is no longer need for that epic, Whenever you decide that there is no longer need for that epic,

View File

@ -31,9 +31,6 @@ module Gitlab
DIAGRAMS_FORMATS DIAGRAMS_FORMATS
end end
# No additional diagram formats
return diagram_formats unless current_settings.kroki_formats.present?
# Diagrams that require a companion container must be explicitly enabled from the settings # Diagrams that require a companion container must be explicitly enabled from the settings
diagram_formats.select do |diagram_type| diagram_formats.select do |diagram_type|
current_settings.kroki_format_supported?(diagram_type) current_settings.kroki_format_supported?(diagram_type)

View File

@ -9766,6 +9766,9 @@ msgstr ""
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
msgid "Delete %{issuableType}"
msgstr ""
msgid "Delete %{name}" msgid "Delete %{name}"
msgstr "" msgstr ""
@ -9823,6 +9826,9 @@ msgstr ""
msgid "Delete this attachment" msgid "Delete this attachment"
msgstr "" msgstr ""
msgid "Delete this epic and all descendants?"
msgstr ""
msgid "Delete user list" msgid "Delete user list"
msgstr "" msgstr ""

View File

@ -18,13 +18,17 @@ module QA
element :delete_file_button element :delete_file_button
end end
view 'app/assets/javascripts/snippets/components/snippet_visibility_edit.vue' do
element :visibility_content
end
def add_to_file_content(content) def add_to_file_content(content)
text_area.set content text_area.set content
text_area.has_text?(content) # wait for changes to take effect text_area.has_text?(content) # wait for changes to take effect
end end
def change_visibility_to(visibility_type) def change_visibility_to(visibility_type)
choose(visibility_type) click_element(:visibility_content, visibility: visibility_type)
end end
def click_add_file def click_add_file

View File

@ -0,0 +1,38 @@
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::Kroki do
using RSpec::Parameterized::TableSyntax
describe '.formats' do
def default_formats
%w[bytefield c4plantuml ditaa erd graphviz nomnoml plantuml svgbob umlet vega vegalite wavedrow].freeze
end
subject { described_class.formats(Gitlab::CurrentSettings) }
where(:enabled_formats, :expected_formats) do
'' | default_formats
'blockdiag' | default_formats + %w[actdiag blockdiag nwdiag packetdiag rackdiag seqdiag]
'bpmn' | default_formats + %w[bpmn]
'excalidraw' | default_formats + %w[excalidraw]
end
with_them do
before do
kroki_formats =
if enabled_formats.present?
{ enabled_formats => true }
else
{}
end
stub_application_setting(kroki_enabled: true, kroki_url: "http://localhost:8000", kroki_formats: kroki_formats)
end
it 'returns the expected formats' do
expect(subject).to match_array(expected_formats)
end
end
end
end

View File

@ -6,37 +6,47 @@ require 'email_spec'
RSpec.describe Emails::MergeRequests do RSpec.describe Emails::MergeRequests do
include EmailSpec::Matchers include EmailSpec::Matchers
describe "#resolved_all_discussions_email" do let_it_be(:recipient) { create(:user) }
let(:user) { create(:user) } let_it_be(:current_user) { create(:user) }
let(:merge_request) { create(:merge_request) } let_it_be(:assignee, reload: true) { create(:user, email: 'assignee@example.com', name: 'John Doe') }
let(:current_user) { create(:user) } let_it_be(:reviewer, reload: true) { create(:user, email: 'reviewer@example.com', name: 'Jane Doe') }
let_it_be(:project) { create(:project, :repository) }
let_it_be(:merge_request) do
create(:merge_request, source_project: project,
target_project: project,
author: current_user,
assignees: [assignee],
reviewers: [reviewer],
description: 'Awesome description')
end
subject { Notify.resolved_all_discussions_email(user.id, merge_request.id, current_user.id) } describe "#merge_when_pipeline_succeeds_email" do
let(:title) { "Merge request #{merge_request.to_reference} was scheduled to merge after pipeline succeeds by #{current_user.name}" }
subject { Notify.merge_when_pipeline_succeeds_email(recipient.id, merge_request.id, current_user.id) }
it "has required details" do
aggregate_failures do
expect(subject).to have_content title
expect(subject).to have_content merge_request.to_reference
expect(subject).to have_content current_user.name
expect(subject.html_part).to have_content(assignee.name)
expect(subject.text_part).to have_content(assignee.name)
expect(subject.html_part).to have_content(reviewer.name)
expect(subject.text_part).to have_content(reviewer.name)
end
end
end
describe "#resolved_all_discussions_email" do
subject { Notify.resolved_all_discussions_email(recipient.id, merge_request.id, current_user.id) }
it "includes the name of the resolver" do it "includes the name of the resolver" do
expect(subject).to have_body_text current_user.name expect(subject).to have_body_text current_user.name
end end
end end
describe "#merge_when_pipeline_succeeds_email" do
let(:user) { create(:user) }
let(:merge_request) { create(:merge_request) }
let(:current_user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:title) { "Merge request #{merge_request.to_reference} was scheduled to merge after pipeline succeeds by #{current_user.name}" }
subject { Notify.merge_when_pipeline_succeeds_email(user.id, merge_request.id, current_user.id) }
it "has required details" do
expect(subject).to have_content title
expect(subject).to have_content merge_request.to_reference
expect(subject).to have_content current_user.name
end
end
describe '#merge_requests_csv_email' do describe '#merge_requests_csv_email' do
let(:user) { create(:user) }
let(:project) { create(:project) }
let(:merge_requests) { create_list(:merge_request, 10) } let(:merge_requests) { create_list(:merge_request, 10) }
let(:export_status) do let(:export_status) do
{ {
@ -48,10 +58,10 @@ RSpec.describe Emails::MergeRequests do
let(:csv_data) { MergeRequests::ExportCsvService.new(MergeRequest.all, project).csv_data } let(:csv_data) { MergeRequests::ExportCsvService.new(MergeRequest.all, project).csv_data }
subject { Notify.merge_requests_csv_email(user, project, csv_data, export_status) } subject { Notify.merge_requests_csv_email(recipient, project, csv_data, export_status) }
it { expect(subject.subject).to eq("#{project.name} | Exported merge requests") } it { expect(subject.subject).to eq("#{project.name} | Exported merge requests") }
it { expect(subject.to).to contain_exactly(user.notification_email_for(project.group)) } it { expect(subject.to).to contain_exactly(recipient.notification_email_for(project.group)) }
it { expect(subject.html_part).to have_content("Your CSV export of 10 merge requests from project") } it { expect(subject.html_part).to have_content("Your CSV export of 10 merge requests from project") }
it { expect(subject.text_part).to have_content("Your CSV export of 10 merge requests from project") } it { expect(subject.text_part).to have_content("Your CSV export of 10 merge requests from project") }