From c1cc4777caad078e3eff9ba6170beb7ee7254917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Tue, 12 Jun 2018 10:02:06 -0500 Subject: Hide events from internal projects in public feed for anonymous users This change fixes a bug where an anonymous user was able to see the activity related to internal projects when visiting the public profile of a user of the GitLab instance. --- app/finders/user_recent_events_finder.rb | 2 +- ...rd-do-not-show-internal-info-in-public-feed.yml | 5 +++ spec/finders/user_recent_events_finder_spec.rb | 45 +++++++++++++++------- 3 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 changelogs/unreleased/security-rd-do-not-show-internal-info-in-public-feed.yml diff --git a/app/finders/user_recent_events_finder.rb b/app/finders/user_recent_events_finder.rb index 65d6e019746..74776b2ed1f 100644 --- a/app/finders/user_recent_events_finder.rb +++ b/app/finders/user_recent_events_finder.rb @@ -56,7 +56,7 @@ class UserRecentEventsFinder visible = target_user .project_interactions - .where(visibility_level: [Gitlab::VisibilityLevel::INTERNAL, Gitlab::VisibilityLevel::PUBLIC]) + .where(visibility_level: Gitlab::VisibilityLevel.levels_for_user(current_user)) .select(:id) Gitlab::SQL::Union.new([authorized, visible]).to_sql diff --git a/changelogs/unreleased/security-rd-do-not-show-internal-info-in-public-feed.yml b/changelogs/unreleased/security-rd-do-not-show-internal-info-in-public-feed.yml new file mode 100644 index 00000000000..ff78c162dff --- /dev/null +++ b/changelogs/unreleased/security-rd-do-not-show-internal-info-in-public-feed.yml @@ -0,0 +1,5 @@ +--- +title: Don't show events from internal projects for anonymous users in public feed +merge_request: +author: +type: security diff --git a/spec/finders/user_recent_events_finder_spec.rb b/spec/finders/user_recent_events_finder_spec.rb index 3ca0f7c3c89..da043f94021 100644 --- a/spec/finders/user_recent_events_finder_spec.rb +++ b/spec/finders/user_recent_events_finder_spec.rb @@ -1,31 +1,50 @@ require 'spec_helper' describe UserRecentEventsFinder do - let(:user) { create(:user) } - let(:project) { create(:project) } - let(:project_owner) { project.creator } - let!(:event) { create(:event, project: project, author: project_owner) } + let(:current_user) { create(:user) } + let(:project_owner) { create(:user) } + let(:private_project) { create(:project, :private, creator: project_owner) } + let(:internal_project) { create(:project, :internal, creator: project_owner) } + let(:public_project) { create(:project, :public, creator: project_owner) } + let!(:private_event) { create(:event, project: private_project, author: project_owner) } + let!(:internal_event) { create(:event, project: internal_project, author: project_owner) } + let!(:public_event) { create(:event, project: public_project, author: project_owner) } - subject(:finder) { described_class.new(user, project_owner) } + subject(:finder) { described_class.new(current_user, project_owner) } describe '#execute' do - it 'does not include the event when a user does not have access to the project' do - expect(finder.execute).to be_empty + context 'current user does not have access to projects' do + it 'returns public and internal events' do + records = finder.execute + + expect(records).to include(public_event, internal_event) + expect(records).not_to include(private_event) + end end - context 'when the user has access to a project' do + context 'when current user has access to the projects' do before do - project.add_developer(user) + private_project.add_developer(current_user) + internal_project.add_developer(current_user) + public_project.add_developer(current_user) end - it 'includes the event' do - expect(finder.execute).to include(event) + it 'returns all the events' do + expect(finder.execute).to include(private_event, internal_event, public_event) end - it 'does not include the event if the user cannot read cross project' do - expect(Ability).to receive(:allowed?).with(user, :read_cross_project) { false } + it 'does not include the events if the user cannot read cross project' do + expect(Ability).to receive(:allowed?).with(current_user, :read_cross_project) { false } expect(finder.execute).to be_empty end end + + context 'when current user is anonymous' do + let(:current_user) { nil } + + it 'returns public events only' do + expect(finder.execute).to eq([public_event]) + end + end end end -- cgit v1.2.1 From a1cc0c6f8d5951eeb66e61a3f3887cce30c53011 Mon Sep 17 00:00:00 2001 From: Marcel Amirault Date: Thu, 14 Jun 2018 08:04:50 +0000 Subject: Update CONTRIBUTING.md to fix links --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 82d1abff4a4..08a65030913 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -627,7 +627,7 @@ the feature you contribute through all of these steps. 1. Working and clean code that is commented where needed 1. [Unit, integration, and system tests][testing] that pass on the CI server 1. Performance/scalability implications have been considered, addressed, and tested -1. [Documented][doc-styleguide] in the `/doc` directory +1. [Documented][doc-guidelines] in the `/doc` directory 1. [Changelog entry added][changelog], if necessary 1. Reviewed and any concerns are addressed 1. Merged by a project maintainer @@ -664,7 +664,7 @@ merge request: contributors to enhance security 1. [Database Migrations](doc/development/migration_style_guide.md) 1. [Markdown](http://www.cirosantilli.com/markdown-styleguide) -1. [Documentation styleguide][doc-styleguide] +1. [Documentation styleguide](https://docs.gitlab.com/ee/development/documentation/styleguide.html) 1. Interface text should be written subjectively instead of objectively. It should be the GitLab core team addressing a person. It should be written in present time and never use past tense (has been/was). For example instead -- cgit v1.2.1 From ba404d5593b4d400ac620723445c64f6636d1856 Mon Sep 17 00:00:00 2001 From: Tao Wang Date: Thu, 14 Jun 2018 22:13:47 +1000 Subject: i18n: externalize strings from 'app/views/projects/deployments' Signed-off-by: Tao Wang --- app/views/projects/deployments/_commit.html.haml | 2 +- app/views/projects/deployments/_deployment.html.haml | 8 ++++---- app/views/projects/deployments/_rollback.haml | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/projects/deployments/_commit.html.haml b/app/views/projects/deployments/_commit.html.haml index c7ac687e4a6..282566eeadc 100644 --- a/app/views/projects/deployments/_commit.html.haml +++ b/app/views/projects/deployments/_commit.html.haml @@ -14,4 +14,4 @@ = author_avatar(deployment.commit, size: 20) = link_to_markdown commit_title, project_commit_path(@project, deployment.sha), class: "commit-row-message" - else - Cant find HEAD commit for this branch + = _("Can't find HEAD commit for this branch") diff --git a/app/views/projects/deployments/_deployment.html.haml b/app/views/projects/deployments/_deployment.html.haml index 520696b01c6..85bc8ec07e3 100644 --- a/app/views/projects/deployments/_deployment.html.haml +++ b/app/views/projects/deployments/_deployment.html.haml @@ -1,14 +1,14 @@ .gl-responsive-table-row.deployment{ role: 'row' } .table-section.section-10{ role: 'gridcell' } - .table-mobile-header{ role: 'rowheader' } ID + .table-mobile-header{ role: 'rowheader' }= _("ID") %strong.table-mobile-content ##{deployment.iid} .table-section.section-30{ role: 'gridcell' } - .table-mobile-header{ role: 'rowheader' } Commit + .table-mobile-header{ role: 'rowheader' }= _("Commit") = render 'projects/deployments/commit', deployment: deployment .table-section.section-25.build-column{ role: 'gridcell' } - .table-mobile-header{ role: 'rowheader' } Job + .table-mobile-header{ role: 'rowheader' }= _("Job") - if deployment.deployable .table-mobile-content .flex-truncate-parent @@ -21,7 +21,7 @@ = user_avatar(user: deployment.user, size: 20) .table-section.section-15{ role: 'gridcell' } - .table-mobile-header{ role: 'rowheader' } Created + .table-mobile-header{ role: 'rowheader' }= _("Created") %span.table-mobile-content= time_ago_with_tooltip(deployment.created_at) .table-section.section-20.table-button-footer{ role: 'gridcell' } diff --git a/app/views/projects/deployments/_rollback.haml b/app/views/projects/deployments/_rollback.haml index 5941e01c6f1..95f950948ab 100644 --- a/app/views/projects/deployments/_rollback.haml +++ b/app/views/projects/deployments/_rollback.haml @@ -1,6 +1,6 @@ - if can?(current_user, :create_deployment, deployment) && deployment.deployable = link_to [:retry, @project.namespace.becomes(Namespace), @project, deployment.deployable], method: :post, class: 'btn btn-build' do - if deployment.last? - Re-deploy + = _("Re-deploy") - else - Rollback + = _("Rollback") -- cgit v1.2.1 From 1fbf6f186948e29dfcd09332a083962904e674ae Mon Sep 17 00:00:00 2001 From: Imre Farkas Date: Fri, 15 Jun 2018 10:44:59 +0200 Subject: HTML escape the name of the user in ProjectsHelper#link_to_member --- app/helpers/projects_helper.rb | 3 ++- changelogs/unreleased/security-html_escape_usernames.yml | 5 +++++ spec/helpers/projects_helper_spec.rb | 9 ++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/security-html_escape_usernames.yml diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index daad829faa2..9ac446d75ea 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -40,7 +40,8 @@ module ProjectsHelper name_tag_options[:class] << 'has-tooltip' end - content_tag(:span, sanitize(username), name_tag_options) + # NOTE: ActionView::Helpers::TagHelper#content_tag HTML escapes username + content_tag(:span, username, name_tag_options) end def link_to_member(project, author, opts = {}, &block) diff --git a/changelogs/unreleased/security-html_escape_usernames.yml b/changelogs/unreleased/security-html_escape_usernames.yml new file mode 100644 index 00000000000..7e69e4ae266 --- /dev/null +++ b/changelogs/unreleased/security-html_escape_usernames.yml @@ -0,0 +1,5 @@ +--- +title: HTML escape the name of the user in ProjectsHelper#link_to_member +merge_request: +author: +type: security diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 5cf9e9e8f12..80147b13739 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -248,7 +248,7 @@ describe ProjectsHelper do describe '#link_to_member' do let(:group) { build_stubbed(:group) } let(:project) { build_stubbed(:project, group: group) } - let(:user) { build_stubbed(:user) } + let(:user) { build_stubbed(:user, name: '

Administrator

') } describe 'using the default options' do it 'returns an HTML link to the user' do @@ -256,6 +256,13 @@ describe ProjectsHelper do expect(link).to match(%r{/#{user.username}}) end + + it 'HTML escapes the name of the user' do + link = helper.link_to_member(project, user) + + expect(link).to include(ERB::Util.html_escape(user.name)) + expect(link).not_to include(user.name) + end end end -- cgit v1.2.1 From bc2cf82f68d64622e3ca2facb601c711bf1682e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Javier=20L=C3=B3pez?= Date: Thu, 14 Jun 2018 15:28:56 +0200 Subject: Update gitlab-gollum-lib to 4.2.7.5 and sanitize to 4.6.5 --- Gemfile | 2 +- Gemfile.lock | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 98622cdde84..ee55867bf9c 100644 --- a/Gemfile +++ b/Gemfile @@ -230,7 +230,7 @@ gem 'ruby-fogbugz', '~> 0.2.1' gem 'kubeclient', '~> 3.1.0' # Sanitize user input -gem 'sanitize', '~> 2.0' +gem 'sanitize', '~> 4.6.5' gem 'babosa', '~> 1.0.2' # Sanitizes SVG input diff --git a/Gemfile.lock b/Gemfile.lock index 883e580b86b..3a5e7b0bad1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -296,13 +296,13 @@ GEM flowdock (~> 0.7) gitlab-grit (>= 2.4.1) multi_json - gitlab-gollum-lib (4.2.7.4) + gitlab-gollum-lib (4.2.7.5) gemojione (~> 3.2) github-markup (~> 1.6) gollum-grit_adapter (~> 1.0) nokogiri (>= 1.6.1, < 2.0) rouge (~> 3.1) - sanitize (~> 2.1) + sanitize (~> 4.6.4) stringex (~> 2.6) gitlab-gollum-rugged_adapter (0.4.4.1) mime-types (>= 1.15) @@ -515,6 +515,8 @@ GEM netrc (0.11.0) nokogiri (1.8.2) mini_portile2 (~> 2.3.0) + nokogumbo (1.5.0) + nokogiri numerizer (0.1.1) oauth (0.5.4) oauth2 (1.4.0) @@ -805,8 +807,10 @@ GEM et-orbi (~> 1.0) rugged (0.27.1) safe_yaml (1.0.4) - sanitize (2.1.0) + sanitize (4.6.5) + crass (~> 1.0.2) nokogiri (>= 1.4.4) + nokogumbo (~> 1.4) sass (3.5.5) sass-listen (~> 4.0.0) sass-listen (4.0.0) @@ -1153,7 +1157,7 @@ DEPENDENCIES ruby_parser (~> 3.8) rufus-scheduler (~> 3.4) rugged (~> 0.27) - sanitize (~> 2.0) + sanitize (~> 4.6.5) sass-rails (~> 5.0.6) scss_lint (~> 0.56.0) seed-fu (~> 2.3.7) -- cgit v1.2.1 From a4f9ef7d79f0a9e61e6c3aaf1c4a5670324d837d Mon Sep 17 00:00:00 2001 From: blackst0ne Date: Sat, 16 Jun 2018 13:16:48 +1100 Subject: [Rails5] Fix "'-1' is not a valid data_store" Part of https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19882 --- changelogs/unreleased/blackst0ne-rails5-fix-data-store-spec.yml | 5 +++++ spec/models/ci/build_trace_chunk_spec.rb | 8 -------- 2 files changed, 5 insertions(+), 8 deletions(-) create mode 100644 changelogs/unreleased/blackst0ne-rails5-fix-data-store-spec.yml diff --git a/changelogs/unreleased/blackst0ne-rails5-fix-data-store-spec.yml b/changelogs/unreleased/blackst0ne-rails5-fix-data-store-spec.yml new file mode 100644 index 00000000000..403c3764321 --- /dev/null +++ b/changelogs/unreleased/blackst0ne-rails5-fix-data-store-spec.yml @@ -0,0 +1,5 @@ +--- +title: '[Rails5] Fix "-1 is not a valid data_store"' +merge_request: 19917 +author: "@blackst0ne" +type: fixed diff --git a/spec/models/ci/build_trace_chunk_spec.rb b/spec/models/ci/build_trace_chunk_spec.rb index b5a6d959ccb..c5d550cba1b 100644 --- a/spec/models/ci/build_trace_chunk_spec.rb +++ b/spec/models/ci/build_trace_chunk_spec.rb @@ -125,14 +125,6 @@ describe Ci::BuildTraceChunk, :clean_gitlab_redis_shared_state do end end end - - context 'when data_store is others' do - before do - build_trace_chunk.send(:write_attribute, :data_store, -1) - end - - it { expect { subject }.to raise_error('Unsupported data store') } - end end describe '#truncate' do -- cgit v1.2.1 From 00c68e1b03ed92eef6aa6ab3fb84b827b14b9daa Mon Sep 17 00:00:00 2001 From: Mark Chao Date: Fri, 15 Jun 2018 13:40:14 +0800 Subject: Fix xss for Markdown elements where [[_TOC_]] is enabled --- changelogs/unreleased/security-2682-fix-xss-for-markdown-toc.yml | 5 +++++ lib/banzai/filter/table_of_contents_filter.rb | 2 +- spec/lib/banzai/filter/table_of_contents_filter_spec.rb | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/security-2682-fix-xss-for-markdown-toc.yml diff --git a/changelogs/unreleased/security-2682-fix-xss-for-markdown-toc.yml b/changelogs/unreleased/security-2682-fix-xss-for-markdown-toc.yml new file mode 100644 index 00000000000..f595678c3c2 --- /dev/null +++ b/changelogs/unreleased/security-2682-fix-xss-for-markdown-toc.yml @@ -0,0 +1,5 @@ +--- +title: Fix XSS vulnerability for table of content generation +merge_request: +author: +type: security diff --git a/lib/banzai/filter/table_of_contents_filter.rb b/lib/banzai/filter/table_of_contents_filter.rb index 97244159985..b32660a8341 100644 --- a/lib/banzai/filter/table_of_contents_filter.rb +++ b/lib/banzai/filter/table_of_contents_filter.rb @@ -92,7 +92,7 @@ module Banzai def text return '' unless node - @text ||= node.text + @text ||= EscapeUtils.escape_html(node.text) end private diff --git a/spec/lib/banzai/filter/table_of_contents_filter_spec.rb b/spec/lib/banzai/filter/table_of_contents_filter_spec.rb index 0cfef4ff5bf..7213cd58ea7 100644 --- a/spec/lib/banzai/filter/table_of_contents_filter_spec.rb +++ b/spec/lib/banzai/filter/table_of_contents_filter_spec.rb @@ -139,5 +139,14 @@ describe Banzai::Filter::TableOfContentsFilter do expect(items[5].ancestors).to include(items[4]) end end + + context 'header text contains escaped content' do + let(:content) { '<img src="x" onerror="alert(42)">' } + let(:results) { result(header(1, content)) } + + it 'outputs escaped content' do + expect(doc.inner_html).to include(content) + end + end end end -- cgit v1.2.1 From 82d35dc5cb0716f80cae7e89188e8d392a47a3cd Mon Sep 17 00:00:00 2001 From: Tao Wang Date: Sat, 16 Jun 2018 14:51:09 +1000 Subject: i18n: externalize strings from 'app/views/admin/labels' Signed-off-by: Tao Wang --- app/views/admin/labels/_form.html.haml | 10 +++++----- app/views/admin/labels/_label.html.haml | 4 ++-- app/views/admin/labels/edit.html.haml | 8 ++++---- app/views/admin/labels/index.html.haml | 8 ++++---- app/views/admin/labels/new.html.haml | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/views/admin/labels/_form.html.haml b/app/views/admin/labels/_form.html.haml index 7637471f9ae..ee2d4c8430a 100644 --- a/app/views/admin/labels/_form.html.haml +++ b/app/views/admin/labels/_form.html.haml @@ -10,16 +10,16 @@ .col-sm-10 = f.text_field :description, class: "form-control js-quick-submit" .form-group.row - = f.label :color, "Background color", class: 'col-form-label col-sm-2' + = f.label :color, _("Background color"), class: 'col-form-label col-sm-2' .col-sm-10 .input-group .input-group-prepend .input-group-text.label-color-preview   = f.text_field :color, class: "form-control" .form-text.text-muted - Choose any color. + = _('Choose any color.') %br - Or you can choose one of the suggested colors below + = _("Or you can choose one of the suggested colors below") .suggest-colors - suggested_colors.each do |color| @@ -27,5 +27,5 @@   .form-actions - = f.submit 'Save', class: 'btn btn-save js-save-button' - = link_to "Cancel", admin_labels_path, class: 'btn btn-cancel' + = f.submit _('Save'), class: 'btn btn-save js-save-button' + = link_to _("Cancel"), admin_labels_path, class: 'btn btn-cancel' diff --git a/app/views/admin/labels/_label.html.haml b/app/views/admin/labels/_label.html.haml index 009a47dd517..c3ea2352898 100644 --- a/app/views/admin/labels/_label.html.haml +++ b/app/views/admin/labels/_label.html.haml @@ -3,5 +3,5 @@ = render_colored_label(label, tooltip: false) = markdown_field(label, :description) .float-right - = link_to 'Edit', edit_admin_label_path(label), class: 'btn btn-sm' - = link_to 'Delete', admin_label_path(label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Delete this label? Are you sure?"} + = link_to _('Edit'), edit_admin_label_path(label), class: 'btn btn-sm' + = link_to _('Delete'), admin_label_path(label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Delete this label? Are you sure?"} diff --git a/app/views/admin/labels/edit.html.haml b/app/views/admin/labels/edit.html.haml index 96f0d404ac4..652ed095d00 100644 --- a/app/views/admin/labels/edit.html.haml +++ b/app/views/admin/labels/edit.html.haml @@ -1,7 +1,7 @@ -- add_to_breadcrumbs "Labels", admin_labels_path -- breadcrumb_title "Edit Label" -- page_title "Edit", @label.name, "Labels" +- add_to_breadcrumbs _("Labels"), admin_labels_path +- breadcrumb_title _("Edit Label") +- page_title _("Edit"), @label.name, _("Labels") %h3.page-title - Edit Label + = _('Edit Label') %hr = render 'form' diff --git a/app/views/admin/labels/index.html.haml b/app/views/admin/labels/index.html.haml index add38fb333e..d3e5247447a 100644 --- a/app/views/admin/labels/index.html.haml +++ b/app/views/admin/labels/index.html.haml @@ -1,10 +1,10 @@ -- page_title "Labels" +- page_title _("Labels") %div = link_to new_admin_label_path, class: "float-right btn btn-nr btn-new" do - New label + = _('New label') %h3.page-title - Labels + = _('Labels') %hr .labels @@ -14,5 +14,5 @@ = paginate @labels, theme: 'gitlab' - else .card.bg-light - .nothing-here-block There are no labels yet + .nothing-here-block= _('There are no labels yet') diff --git a/app/views/admin/labels/new.html.haml b/app/views/admin/labels/new.html.haml index 0135ad0723d..20103fb8a29 100644 --- a/app/views/admin/labels/new.html.haml +++ b/app/views/admin/labels/new.html.haml @@ -1,5 +1,5 @@ -- page_title "New Label" +- page_title _("New Label") %h3.page-title - New Label + = _('New Label') %hr = render 'form' -- cgit v1.2.1 From 5a836446354755e6c6759227a8fbca08f77ccaa5 Mon Sep 17 00:00:00 2001 From: Tao Wang Date: Sat, 16 Jun 2018 15:24:56 +1000 Subject: i18n: externalize strings from 'app/views/shared/boards' Signed-off-by: Tao Wang --- app/views/shared/boards/_show.html.haml | 4 ++-- app/views/shared/boards/components/_board.html.haml | 6 +++--- .../shared/boards/components/sidebar/_due_date.html.haml | 12 ++++++------ app/views/shared/boards/components/sidebar/_labels.html.haml | 8 ++++---- .../shared/boards/components/sidebar/_milestone.html.haml | 12 ++++++------ 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/views/shared/boards/_show.html.haml b/app/views/shared/boards/_show.html.haml index 496b94ec953..a88d8f61fb4 100644 --- a/app/views/shared/boards/_show.html.haml +++ b/app/views/shared/boards/_show.html.haml @@ -3,8 +3,8 @@ - @no_breadcrumb_container = true - @no_container = true - @content_class = "issue-boards-content" -- breadcrumb_title "Issue Board" -- page_title "Boards" +- breadcrumb_title _("Issue Board") +- page_title _("Boards") - content_for :page_specific_javascripts do diff --git a/app/views/shared/boards/components/_board.html.haml b/app/views/shared/boards/components/_board.html.haml index 76843ce7cc0..65de6172d89 100644 --- a/app/views/shared/boards/components/_board.html.haml +++ b/app/views/shared/boards/components/_board.html.haml @@ -30,7 +30,7 @@ %board-delete{ "inline-template" => true, ":list" => "list", "v-if" => "!list.preset && list.id" } - %button.board-delete.has-tooltip.float-right{ type: "button", title: "Delete list", "aria-label" => "Delete list", data: { placement: "bottom" }, "@click.stop" => "deleteBoard" } + %button.board-delete.has-tooltip.float-right{ type: "button", title: _("Delete list"), "aria-label" => _("Delete list"), data: { placement: "bottom" }, "@click.stop" => "deleteBoard" } = icon("trash") .issue-count-badge.clearfix{ "v-if" => 'list.type !== "blank"' } %span.issue-count-badge-count.float-left{ ":class" => '{ "has-btn": list.type !== "closed" && !disabled }' } @@ -39,8 +39,8 @@ %button.issue-count-badge-add-button.btn.btn-sm.btn-default.has-tooltip.js-no-trigger-collapse{ type: "button", "@click" => "showNewIssueForm", "v-if" => 'list.type !== "closed"', - "aria-label" => "New issue", - "title" => "New issue", + "aria-label" => _("New issue"), + "title" => _("New issue"), data: { placement: "top", container: "body" } } = icon("plus", class: "js-no-trigger-collapse") diff --git a/app/views/shared/boards/components/sidebar/_due_date.html.haml b/app/views/shared/boards/components/sidebar/_due_date.html.haml index 10217b6cbf0..5630375f428 100644 --- a/app/views/shared/boards/components/sidebar/_due_date.html.haml +++ b/app/views/shared/boards/components/sidebar/_due_date.html.haml @@ -1,20 +1,20 @@ .block.due_date .title - Due date + = _("Due date") - if can_admin_issue? = icon("spinner spin", class: "block-loading") - = link_to "Edit", "#", class: "js-sidebar-dropdown-toggle edit-link float-right" + = link_to _("Edit"), "#", class: "js-sidebar-dropdown-toggle edit-link float-right" .value .value-content %span.no-value{ "v-if" => "!issue.dueDate" } - No due date + = _("No due date") %span.bold{ "v-if" => "issue.dueDate" } {{ issue.dueDate | due-date }} - if can_admin_issue? %span.no-value.js-remove-due-date-holder{ "v-if" => "issue.dueDate" } \- %a.js-remove-due-date{ href: "#", role: "button" } - remove due date + = _('remove due date') - if can_admin_issue? .selectbox %input{ type: "hidden", @@ -23,9 +23,9 @@ .dropdown %button.dropdown-menu-toggle.js-due-date-select.js-issue-boards-due-date{ type: 'button', data: { toggle: 'dropdown', field_name: "issue[due_date]", ability_name: "issue" } } - %span.dropdown-toggle-text Due date + %span.dropdown-toggle-text= _("Due date") = icon('chevron-down') .dropdown-menu.dropdown-menu-due-date - = dropdown_title('Due date') + = dropdown_title(_('Due date')) = dropdown_content do .js-due-date-calendar diff --git a/app/views/shared/boards/components/sidebar/_labels.html.haml b/app/views/shared/boards/components/sidebar/_labels.html.haml index daee691e358..607e7f471c9 100644 --- a/app/views/shared/boards/components/sidebar/_labels.html.haml +++ b/app/views/shared/boards/components/sidebar/_labels.html.haml @@ -1,12 +1,12 @@ .block.labels .title - Labels + = _("Labels") - if can_admin_issue? = icon("spinner spin", class: "block-loading") - = link_to "Edit", "#", class: "js-sidebar-dropdown-toggle edit-link float-right" + = link_to _("Edit"), "#", class: "js-sidebar-dropdown-toggle edit-link float-right" .value.issuable-show-labels.dont-hide %span.no-value{ "v-if" => "issue.labels && issue.labels.length === 0" } - None + = _("None") %a{ href: "#", "v-for" => "label in issue.labels" } .badge.color-label.has-tooltip{ ":style" => "{ backgroundColor: label.color, color: label.textColor }" } @@ -28,7 +28,7 @@ namespace_path: @namespace_path, project_path: @project.try(:path) } } %span.dropdown-toggle-text - Label + = _("Label") = icon('chevron-down') .dropdown-menu.dropdown-select.dropdown-menu-paging.dropdown-menu-labels.dropdown-menu-selectable = render partial: "shared/issuable/label_page_default" diff --git a/app/views/shared/boards/components/sidebar/_milestone.html.haml b/app/views/shared/boards/components/sidebar/_milestone.html.haml index f2bedd5e3c9..b15d60002fc 100644 --- a/app/views/shared/boards/components/sidebar/_milestone.html.haml +++ b/app/views/shared/boards/components/sidebar/_milestone.html.haml @@ -1,12 +1,12 @@ .block.milestone .title - Milestone + = _("Milestone") - if can_admin_issue? = icon("spinner spin", class: "block-loading") - = link_to "Edit", "#", class: "js-sidebar-dropdown-toggle edit-link float-right" + = link_to _("Edit"), "#", class: "js-sidebar-dropdown-toggle edit-link float-right" .value %span.no-value{ "v-if" => "!issue.milestone" } - None + = _("None") %span.bold.has-tooltip{ "v-if" => "issue.milestone" } {{ issue.milestone.title }} - if can_admin_issue? @@ -19,10 +19,10 @@ %button.dropdown-menu-toggle.js-milestone-select.js-issue-board-sidebar{ type: "button", data: { toggle: "dropdown", show_no: "true", field_name: "issue[milestone_id]", milestones: milestones_filter_path(format: :json), ability_name: "issue", use_id: "true", default_no: "true" }, ":data-selected" => "milestoneTitle", ":data-issuable-id" => "issue.iid" } - Milestone + = _("Milestone") = icon("chevron-down") .dropdown-menu.dropdown-select.dropdown-menu-selectable - = dropdown_title("Assign milestone") - = dropdown_filter("Search milestones") + = dropdown_title(_("Assign milestone")) + = dropdown_filter(_("Search milestones")) = dropdown_content = dropdown_loading -- cgit v1.2.1 From ad5e4469ecdee93e2d064e00ec463c702d47822d Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Mon, 18 Jun 2018 14:44:11 +0900 Subject: Add troubleshooring guid for lfs uploading timeouts --- doc/workflow/lfs/lfs_administration.md | 95 +++++++++++++++++++++++++++++----- 1 file changed, 82 insertions(+), 13 deletions(-) diff --git a/doc/workflow/lfs/lfs_administration.md b/doc/workflow/lfs/lfs_administration.md index f824756c10c..ba1e4e55d5b 100644 --- a/doc/workflow/lfs/lfs_administration.md +++ b/doc/workflow/lfs/lfs_administration.md @@ -17,7 +17,7 @@ There are various configuration options to help GitLab server administrators: * Enabling/disabling Git LFS support * Changing the location of LFS object storage -* Setting up AWS S3 compatible object storage +* Setting up an object storage supported by [Fog](http://fog.io/about/provider_documentation.html) ### Configuration for Omnibus installations @@ -44,19 +44,31 @@ In `config/gitlab.yml`: storage_path: /mnt/storage/lfs-objects ``` -## Storing the LFS objects in an S3-compatible object storage +## Storing LFS objects to an object storage > [Introduced][ee-2760] in [GitLab Premium][eep] 10.0. Brought to GitLab Core in 10.7. -It is possible to store LFS objects on a remote object storage which allows you -to offload storage to an external AWS S3 compatible service, freeing up disk -space locally. You can also host your own S3 compatible storage decoupled from -GitLab, with with a service such as [Minio](https://www.minio.io/). +It is possible to store LFS objects to a remote object storage which allows you +to offload R/W operation on local hard disk and freed up disk space significantly. +You can check which object storage can be integrated with GitLab [here](http://fog.io/about/provider_documentation.html) +(Since GitLab is tightly integrated with `Fog`, you can refer the documentation) +You can also use an object storage in a private local network. For example, +[Minio](https://www.minio.io/) is standalone object storage, easy to setup, and works well with GitLab instance. -Object storage currently transfers files first to GitLab, and then on the -object storage in a second stage. This can be done either by using a rake task -to transfer existing objects, or in a background job after each file is received. +GitLab provides two different options as the uploading mechanizm. One is "Direct upload", and another one is "Background upload". + +**Option 1. Direct upload** + +1. User pushes a lfs file to the GitLab instance +1. GitLab-workhorse uploads the file to the object storage +1. GitLab-workhorse notifies to GitLab-rails that the uploading process is done + +**Option 2. Background upload** + +1. User pushes a lfs file to the GitLab instance +1. GitLab-rails stores the file to the local files storage +1. GitLab-rails uploads the file to object storage asynchronously The following general settings are supported. @@ -71,16 +83,50 @@ The following general settings are supported. The `connection` settings match those provided by [Fog](https://github.com/fog). -| Setting | Description | Default | +Here is the configuration example with S3. + +| Setting | Description | example | |---------|-------------|---------| -| `provider` | Always `AWS` for compatible hosts | AWS | -| `aws_access_key_id` | AWS credentials, or compatible | | -| `aws_secret_access_key` | AWS credentials, or compatible | | +| `provider` | The provider name | AWS | +| `aws_access_key_id` | AWS credentials, or compatible | `ABC123DEF456` | +| `aws_secret_access_key` | AWS credentials, or compatible | `ABC123DEF456ABC123DEF456ABC123DEF456` | | `region` | AWS region | us-east-1 | | `host` | S3 compatible host for when not using AWS, e.g. `localhost` or `storage.example.com` | s3.amazonaws.com | | `endpoint` | Can be used when configuring an S3 compatible service such as [Minio](https://www.minio.io), by entering a URL such as `http://127.0.0.1:9000` | (optional) | | `path_style` | Set to true to use `host/bucket_name/object` style paths instead of `bucket_name.host/object`. Leave as false for AWS S3 | false | +Here is a configuration example with GCS. + +| Setting | Description | example | +|---------|-------------|---------| +| `provider` | The provider name | `Google` | +| `google_project` | GCP project name | `gcp-project-12345` | +| `google_client_email` | The email address of a service account | `foo@gcp-project-12345.iam.gserviceaccount.com` | +| `google_json_key_location` | The json key path to the | `/path/to/gcp-project-12345-abcde.json` | + +_NOTE: Service account must have a permission to access the bucket. See more https://cloud.google.com/storage/docs/authentication_ + +### Manual uploading to an object storage + +There are two ways to do the same thing with automatic uploading which described above. + +**Option 1: rake task** + +``` +$ rake gitlab:lfs:migrate +``` + +**Option 2: rails console** + +``` +$ sudo gitlab-rails console # Login to rails console + +> # Upload LFS files manually +> LfsObject.where(file_store: [nil, 1]).find_each do |lfs_object| +> lfs_object.file.migrate!(ObjectStorage::Store::REMOTE) if lfs_object.file.file.exists? +> end +``` + ### S3 for Omnibus installations On Omnibus installations, the settings are prefixed by `lfs_object_store_`: @@ -156,6 +202,29 @@ You can see the total storage used for LFS objects on groups and projects in the administration area, as well as through the [groups](../../api/groups.md) and [projects APIs](../../api/projects.md). +## Troubleshooting: `Google::Apis::TransmissionError: execution expired` + +If LFS integration is configred with Google Cloud Storage and background upload (`background_upload: true` and `direct_upload: false`) +sidekiq workers may encouter this error. This is because uploading timed out by huge files. +For the record, upto 6GB lfs files can be uploaded without any extra steps, otherwise you need the following workaround. + +```shell +$ sudo gitlab-rails console # Login to rails console + +> # Setup timeouts. 20 minutes is enough to upload 30GB LFS files. +> # Those settings are only effective in the same session, i.e. Those are not effective in sidekiq workers. +> ::Google::Apis::ClientOptions.default.open_timeout_sec = 1200 +> ::Google::Apis::ClientOptions.default.read_timeout_sec = 1200 +> ::Google::Apis::ClientOptions.default.send_timeout_sec = 1200 + +> # Upload LFS files manually. This process does not use sidekiq at all. +> LfsObject.where(file_store: [nil, 1]).find_each do |lfs_object| +> lfs_object.file.migrate!(ObjectStorage::Store::REMOTE) if lfs_object.file.file.exists? +> end +``` + +See more information in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19581 + ## Known limitations * Support for removing unreferenced LFS objects was added in 8.14 onwards. -- cgit v1.2.1 From 10ff1632b653401f934d1a53a4627ee881d71a8d Mon Sep 17 00:00:00 2001 From: Marcel Amirault Date: Mon, 18 Jun 2018 08:12:25 +0000 Subject: Update lfs_administration.md with language edits --- doc/workflow/lfs/lfs_administration.md | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/doc/workflow/lfs/lfs_administration.md b/doc/workflow/lfs/lfs_administration.md index ba1e4e55d5b..8a2f230f505 100644 --- a/doc/workflow/lfs/lfs_administration.md +++ b/doc/workflow/lfs/lfs_administration.md @@ -17,7 +17,7 @@ There are various configuration options to help GitLab server administrators: * Enabling/disabling Git LFS support * Changing the location of LFS object storage -* Setting up an object storage supported by [Fog](http://fog.io/about/provider_documentation.html) +* Setting up object storage supported by [Fog](http://fog.io/about/provider_documentation.html) ### Configuration for Omnibus installations @@ -44,31 +44,31 @@ In `config/gitlab.yml`: storage_path: /mnt/storage/lfs-objects ``` -## Storing LFS objects to an object storage +## Storing LFS objects in remote object storage > [Introduced][ee-2760] in [GitLab Premium][eep] 10.0. Brought to GitLab Core in 10.7. -It is possible to store LFS objects to a remote object storage which allows you -to offload R/W operation on local hard disk and freed up disk space significantly. -You can check which object storage can be integrated with GitLab [here](http://fog.io/about/provider_documentation.html) -(Since GitLab is tightly integrated with `Fog`, you can refer the documentation) -You can also use an object storage in a private local network. For example, -[Minio](https://www.minio.io/) is standalone object storage, easy to setup, and works well with GitLab instance. +It is possible to store LFS objects in remote object storage which allows you +to offload local hard disk R/W operations, and free up disk space significantly. +GitLab is tightly integrated with `Fog`, so you can refer to its [documentation](http://fog.io/about/provider_documentation.html) +to check which storage services can be integrated with GitLab. +You can also use external object storage in a private local network. For example, +[Minio](https://www.minio.io/) is a standalone object storage service, is easy to setup, and works well with GitLab instances. -GitLab provides two different options as the uploading mechanizm. One is "Direct upload", and another one is "Background upload". +GitLab provides two different options for the uploading mechanism: "Direct upload" and "Background upload". **Option 1. Direct upload** -1. User pushes a lfs file to the GitLab instance -1. GitLab-workhorse uploads the file to the object storage -1. GitLab-workhorse notifies to GitLab-rails that the uploading process is done +1. User pushes an lfs file to the GitLab instance +1. GitLab-workhorse uploads the file directly to the external object storage +1. GitLab-workhorse notifies GitLab-rails that the upload process is complete **Option 2. Background upload** -1. User pushes a lfs file to the GitLab instance -1. GitLab-rails stores the file to the local files storage -1. GitLab-rails uploads the file to object storage asynchronously +1. User pushes an lfs file to the GitLab instance +1. GitLab-rails stores the file in the local file storage +1. GitLab-rails then uploads the file to the external object storage asynchronously The following general settings are supported. @@ -83,7 +83,7 @@ The following general settings are supported. The `connection` settings match those provided by [Fog](https://github.com/fog). -Here is the configuration example with S3. +Here is a configuration example with S3. | Setting | Description | example | |---------|-------------|---------| @@ -101,14 +101,14 @@ Here is a configuration example with GCS. |---------|-------------|---------| | `provider` | The provider name | `Google` | | `google_project` | GCP project name | `gcp-project-12345` | -| `google_client_email` | The email address of a service account | `foo@gcp-project-12345.iam.gserviceaccount.com` | -| `google_json_key_location` | The json key path to the | `/path/to/gcp-project-12345-abcde.json` | +| `google_client_email` | The email address of the service account | `foo@gcp-project-12345.iam.gserviceaccount.com` | +| `google_json_key_location` | The json key path | `/path/to/gcp-project-12345-abcde.json` | -_NOTE: Service account must have a permission to access the bucket. See more https://cloud.google.com/storage/docs/authentication_ +_NOTE: The service account must have permission to access the bucket. [See more](https://cloud.google.com/storage/docs/authentication)_ ### Manual uploading to an object storage -There are two ways to do the same thing with automatic uploading which described above. +There are two ways to manually do the same thing as automatic uploading (described above). **Option 1: rake task** @@ -204,15 +204,15 @@ and [projects APIs](../../api/projects.md). ## Troubleshooting: `Google::Apis::TransmissionError: execution expired` -If LFS integration is configred with Google Cloud Storage and background upload (`background_upload: true` and `direct_upload: false`) -sidekiq workers may encouter this error. This is because uploading timed out by huge files. -For the record, upto 6GB lfs files can be uploaded without any extra steps, otherwise you need the following workaround. +If LFS integration is configred with Google Cloud Storage and background uploads (`background_upload: true` and `direct_upload: false`), +sidekiq workers may encouter this error. This is because the uploading timed out with very large files. +LFS files up to 6Gb can be uploaded without any extra steps, otherwise you need to use the following workaround. ```shell $ sudo gitlab-rails console # Login to rails console -> # Setup timeouts. 20 minutes is enough to upload 30GB LFS files. -> # Those settings are only effective in the same session, i.e. Those are not effective in sidekiq workers. +> # Set up timeouts. 20 minutes is enough to upload 30GB LFS files. +> # These settings are only in effect for the same session, i.e. they are not effective for sidekiq workers. > ::Google::Apis::ClientOptions.default.open_timeout_sec = 1200 > ::Google::Apis::ClientOptions.default.read_timeout_sec = 1200 > ::Google::Apis::ClientOptions.default.send_timeout_sec = 1200 @@ -223,7 +223,7 @@ $ sudo gitlab-rails console # Login to rails console > end ``` -See more information in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19581 +See more information in [!19581](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19581) ## Known limitations -- cgit v1.2.1 From e1a77fa757c65cf243e6b74bf83a394da923ef0f Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 15 Jun 2018 14:05:26 +0200 Subject: Whitelist text-align property for th and td --- lib/banzai/filter/sanitization_filter.rb | 3 ++- spec/lib/banzai/filter/sanitization_filter_spec.rb | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/banzai/filter/sanitization_filter.rb b/lib/banzai/filter/sanitization_filter.rb index 6786b9d07b6..afc2ca4e362 100644 --- a/lib/banzai/filter/sanitization_filter.rb +++ b/lib/banzai/filter/sanitization_filter.rb @@ -25,10 +25,11 @@ module Banzai # Only push these customizations once return if customized?(whitelist[:transformers]) - # Allow table alignment; we whitelist specific style properties in a + # Allow table alignment; we whitelist specific text-align values in a # transformer below whitelist[:attributes]['th'] = %w(style) whitelist[:attributes]['td'] = %w(style) + whitelist[:css] = { properties: ['text-align'] } # Allow span elements whitelist[:elements].push('span') diff --git a/spec/lib/banzai/filter/sanitization_filter_spec.rb b/spec/lib/banzai/filter/sanitization_filter_spec.rb index 17a620ef603..d930c608b18 100644 --- a/spec/lib/banzai/filter/sanitization_filter_spec.rb +++ b/spec/lib/banzai/filter/sanitization_filter_spec.rb @@ -93,6 +93,16 @@ describe Banzai::Filter::SanitizationFilter do expect(doc.at_css('td')['style']).to eq 'text-align: center' end + it 'disallows `text-align` property in `style` attribute on other elements' do + html = <<~HTML +
Text
+ HTML + + doc = filter(html) + + expect(doc.at_css('div')['style']).to be_nil + end + it 'allows `span` elements' do exp = act = %q{Hello} expect(filter(act).to_html).to eq exp @@ -224,7 +234,7 @@ describe Banzai::Filter::SanitizationFilter do 'protocol-based JS injection: spaces and entities' => { input: 'foo', - output: 'foo' + output: 'foo' }, 'protocol whitespace' => { -- cgit v1.2.1 From 535c322481ed9147f22865ffc19212ad817613a5 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 15 Jun 2018 15:42:37 +0200 Subject: Add changelog item --- changelogs/unreleased/security-fj-bumping-sanitize-gem.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelogs/unreleased/security-fj-bumping-sanitize-gem.yml diff --git a/changelogs/unreleased/security-fj-bumping-sanitize-gem.yml b/changelogs/unreleased/security-fj-bumping-sanitize-gem.yml new file mode 100644 index 00000000000..bec1033425d --- /dev/null +++ b/changelogs/unreleased/security-fj-bumping-sanitize-gem.yml @@ -0,0 +1,5 @@ +--- +title: Update sanitize gem to 4.6.5 to fix HTML injection vulnerability +merge_request: +author: +type: security -- cgit v1.2.1 From b4c1080494069f81be4c733fdad52a51d1f0d682 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 15 Jun 2018 16:26:45 +0200 Subject: Update Gemfile.rails5.lock --- Gemfile.rails5.lock | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Gemfile.rails5.lock b/Gemfile.rails5.lock index 952e27df29d..51a4d954e9c 100644 --- a/Gemfile.rails5.lock +++ b/Gemfile.rails5.lock @@ -299,13 +299,13 @@ GEM flowdock (~> 0.7) gitlab-grit (>= 2.4.1) multi_json - gitlab-gollum-lib (4.2.7.2) + gitlab-gollum-lib (4.2.7.5) gemojione (~> 3.2) github-markup (~> 1.6) gollum-grit_adapter (~> 1.0) nokogiri (>= 1.6.1, < 2.0) rouge (~> 3.1) - sanitize (~> 2.1) + sanitize (~> 4.6.4) stringex (~> 2.6) gitlab-gollum-rugged_adapter (0.4.4) mime-types (>= 1.15) @@ -519,6 +519,8 @@ GEM nio4r (2.3.1) nokogiri (1.8.2) mini_portile2 (~> 2.3.0) + nokogumbo (1.5.0) + nokogiri numerizer (0.1.1) oauth (0.5.4) oauth2 (1.4.0) @@ -814,8 +816,10 @@ GEM et-orbi (~> 1.0) rugged (0.27.1) safe_yaml (1.0.4) - sanitize (2.1.0) + sanitize (4.6.5) + crass (~> 1.0.2) nokogiri (>= 1.4.4) + nokogumbo (~> 1.4) sass (3.5.5) sass-listen (~> 4.0.0) sass-listen (4.0.0) @@ -1164,7 +1168,7 @@ DEPENDENCIES ruby_parser (~> 3.8) rufus-scheduler (~> 3.4) rugged (~> 0.27) - sanitize (~> 2.0) + sanitize (~> 4.6.5) sass-rails (~> 5.0.6) scss_lint (~> 0.56.0) seed-fu (~> 2.3.7) -- cgit v1.2.1 From 96f8ad0683619bb852931f4005f0b83c8337e8e6 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Mon, 18 Jun 2018 17:47:20 +0200 Subject: Properly detect label reference if followed by period or question mark --- app/models/label.rb | 15 ++++++++++----- changelogs/unreleased/dm-label-reference-period.yml | 5 +++++ spec/lib/banzai/filter/label_reference_filter_spec.rb | 4 ++-- 3 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 changelogs/unreleased/dm-label-reference-period.yml diff --git a/app/models/label.rb b/app/models/label.rb index 1cf04976602..7bbcaa121ca 100644 --- a/app/models/label.rb +++ b/app/models/label.rb @@ -85,11 +85,16 @@ class Label < ActiveRecord::Base (#{Project.reference_pattern})? #{Regexp.escape(reference_prefix)} (?: - (?\d+(?!\S\w)\b) | # Integer-based label ID, or - (? - [A-Za-z0-9_\-\?\.&]+ | # String-based single-word label title, or - ".+?" # String-based multi-word label surrounded in quotes - ) + (?\d+(?!\S\w)\b) + | # Integer-based label ID, or + (? + # String-based single-word label title, or + [A-Za-z0-9_\-\?\.&]+ + (?\?g\.fm&\)\.)) + doc = reference_filter("Label #{reference}.") + expect(doc.to_html).to match(%r(\?g\.fm&\.)) end it 'ignores invalid label names' do -- cgit v1.2.1 From 6207a2de89c68eaa8d284116a6e790feb55ee65e Mon Sep 17 00:00:00 2001 From: Imre Farkas Date: Mon, 18 Jun 2018 15:29:27 +0200 Subject: HTML escape branch name in project graphs page --- app/views/projects/graphs/charts.html.haml | 2 +- .../unreleased/security-html_escape_branch_name.yml | 5 +++++ spec/features/projects/graph_spec.rb | 20 +++++++++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/security-html_escape_branch_name.yml diff --git a/app/views/projects/graphs/charts.html.haml b/app/views/projects/graphs/charts.html.haml index 983cb187c2f..3f1974d05f4 100644 --- a/app/views/projects/graphs/charts.html.haml +++ b/app/views/projects/graphs/charts.html.haml @@ -30,7 +30,7 @@ #{@commits_graph.start_date.strftime('%b %d')} - end_time = capture do #{@commits_graph.end_date.strftime('%b %d')} - = (_("Commit statistics for %{ref} %{start_time} - %{end_time}") % { ref: "#{@ref}", start_time: start_time, end_time: end_time }).html_safe + = (_("Commit statistics for %{ref} %{start_time} - %{end_time}") % { ref: "#{h @ref}", start_time: start_time, end_time: end_time }).html_safe .col-md-6 .tree-ref-container diff --git a/changelogs/unreleased/security-html_escape_branch_name.yml b/changelogs/unreleased/security-html_escape_branch_name.yml new file mode 100644 index 00000000000..02d1065348f --- /dev/null +++ b/changelogs/unreleased/security-html_escape_branch_name.yml @@ -0,0 +1,5 @@ +--- +title: HTML escape branch name in project graphs page +merge_request: +author: +type: security diff --git a/spec/features/projects/graph_spec.rb b/spec/features/projects/graph_spec.rb index 57172610aed..335174b7729 100644 --- a/spec/features/projects/graph_spec.rb +++ b/spec/features/projects/graph_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' describe 'Project Graph', :js do let(:user) { create :user } let(:project) { create(:project, :repository, namespace: user.namespace) } + let(:branch_name) { 'master' } before do project.add_master(user) @@ -12,7 +13,7 @@ describe 'Project Graph', :js do shared_examples 'page should have commits graphs' do it 'renders commits' do - expect(page).to have_content('Commit statistics for master') + expect(page).to have_content("Commit statistics for #{branch_name}") expect(page).to have_content('Commits per day of month') end end @@ -57,6 +58,23 @@ describe 'Project Graph', :js do it_behaves_like 'page should have languages graphs' end + context 'chart graph with HTML escaped branch name' do + let(:branch_name) { '

evil

' } + + before do + project.repository.create_branch(branch_name, 'master') + + visit charts_project_graph_path(project, branch_name) + end + + it_behaves_like 'page should have commits graphs' + + it 'HTML escapes branch name' do + expect(page.body).to include("Commit statistics for #{ERB::Util.html_escape(branch_name)}") + expect(page.body).not_to include(branch_name) + end + end + context 'when CI enabled' do before do project.enable_ci -- cgit v1.2.1 From eb086a4bfd2495168483a2652571f247e6b768a5 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Tue, 19 Jun 2018 17:18:15 +0100 Subject: Disallow methods that copy data on large tables {change_column_type,rename_column}_concurrently both copy data from one column to another during a migration, which should not be done on GitLab.com. Instead, we should use background migrations. --- rubocop/cop/migration/update_large_table.rb | 9 ++++++++- .../rubocop/cop/migration/update_large_table_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/rubocop/cop/migration/update_large_table.rb b/rubocop/cop/migration/update_large_table.rb index bb14d0f4f56..e3e3de0a4d7 100644 --- a/rubocop/cop/migration/update_large_table.rb +++ b/rubocop/cop/migration/update_large_table.rb @@ -34,8 +34,15 @@ module RuboCop users ].freeze + BATCH_UPDATE_METHODS = %w[ + :add_column_with_default + :change_column_type_concurrently + :rename_column_concurrently + :update_column_in_batches + ].join(' ').freeze + def_node_matcher :batch_update?, <<~PATTERN - (send nil? ${:add_column_with_default :update_column_in_batches} $(sym ...) ...) + (send nil? ${#{BATCH_UPDATE_METHODS}} $(sym ...) ...) PATTERN def on_send(node) diff --git a/spec/rubocop/cop/migration/update_large_table_spec.rb b/spec/rubocop/cop/migration/update_large_table_spec.rb index ef724fc8bad..5e08eb4f772 100644 --- a/spec/rubocop/cop/migration/update_large_table_spec.rb +++ b/spec/rubocop/cop/migration/update_large_table_spec.rb @@ -32,6 +32,14 @@ describe RuboCop::Cop::Migration::UpdateLargeTable do include_examples 'large tables', 'add_column_with_default' end + context 'for the change_column_type_concurrently method' do + include_examples 'large tables', 'change_column_type_concurrently' + end + + context 'for the rename_column_concurrently method' do + include_examples 'large tables', 'rename_column_concurrently' + end + context 'for the update_column_in_batches method' do include_examples 'large tables', 'update_column_in_batches' end @@ -60,6 +68,18 @@ describe RuboCop::Cop::Migration::UpdateLargeTable do expect(cop.offenses).to be_empty end + it 'registers no offense for change_column_type_concurrently' do + inspect_source("change_column_type_concurrently :#{table}, :column, default: true") + + expect(cop.offenses).to be_empty + end + + it 'registers no offense for update_column_in_batches' do + inspect_source("rename_column_concurrently :#{table}, :column, default: true") + + expect(cop.offenses).to be_empty + end + it 'registers no offense for update_column_in_batches' do inspect_source("add_column_with_default :#{table}, :column, default: true") -- cgit v1.2.1 From b020e212947aedab421c7853d6bed8f12f95c6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Gama?= Date: Tue, 19 Jun 2018 19:18:46 +0000 Subject: Update proofreader.md - I translate Discord too: https://crowdin.com/project/discord --- doc/development/i18n/proofreader.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/development/i18n/proofreader.md b/doc/development/i18n/proofreader.md index 9a677bf09b2..e1ebe902223 100644 --- a/doc/development/i18n/proofreader.md +++ b/doc/development/i18n/proofreader.md @@ -31,6 +31,7 @@ are very appreciative of the work done by translators and proofreaders! - Filip Mech - [GitLab](https://gitlab.com/mehenz), [Crowdin](https://crowdin.com/profile/mehenz) - Portuguese, Brazilian - Paulo George Gomes Bezerra - [GitLab](https://gitlab.com/paulobezerra), [Crowdin](https://crowdin.com/profile/paulogomes.rep) + - André Gama - [GitLab](https://gitlab.com/andregamma), [Crowdin](https://crowdin.com/profile/ToeOficial) - Russian - Nikita Grylov - [GitLab](https://gitlab.com/nixel2007), [Crowdin](https://crowdin.com/profile/nixel2007) - Alexy Lustin - [GitLab](https://gitlab.com/allustin), [Crowdin](https://crowdin.com/profile/lustin) -- cgit v1.2.1 From f36714908f50d34265b3aacdbab009ed50f54678 Mon Sep 17 00:00:00 2001 From: Clement Ho Date: Tue, 19 Jun 2018 15:20:53 -0500 Subject: Fix diff comment alignment for parallel code additions --- app/assets/stylesheets/pages/notes.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss index 299eda53140..42c9d563fe1 100644 --- a/app/assets/stylesheets/pages/notes.scss +++ b/app/assets/stylesheets/pages/notes.scss @@ -638,6 +638,10 @@ ul.notes { .new & { margin-top: -10px; } + + .parallel .new & { + margin-top: initial; + } } .discussion-body, -- cgit v1.2.1 From 584210446812db7228920a286f9e7219966690aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20Hakk=C4=B1=20Ayaz?= Date: Tue, 19 Jun 2018 22:48:44 +0000 Subject: Fix for search dropdown scrollbar issue. --- app/assets/stylesheets/pages/search.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/pages/search.scss b/app/assets/stylesheets/pages/search.scss index 765c926751a..2d66f336076 100644 --- a/app/assets/stylesheets/pages/search.scss +++ b/app/assets/stylesheets/pages/search.scss @@ -114,7 +114,7 @@ input[type="checkbox"]:hover { } .dropdown-content { - max-height: 302px; + max-height: none; } } -- cgit v1.2.1 From bf377043966e4a6123c672cf450e839040801ee5 Mon Sep 17 00:00:00 2001 From: Simon Knox Date: Wed, 20 Jun 2018 12:33:28 +1000 Subject: fix add diff comment icon position --- app/assets/stylesheets/pages/diff.scss | 1 + app/assets/stylesheets/pages/notes.scss | 8 -------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index fbc97ec0c95..6dcc0197b2a 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -61,6 +61,7 @@ .diff-line-num { width: 50px; + position: relative; a { transition: none; diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss index 42c9d563fe1..e04100b5a9e 100644 --- a/app/assets/stylesheets/pages/notes.scss +++ b/app/assets/stylesheets/pages/notes.scss @@ -634,14 +634,6 @@ ul.notes { margin-left: -55px; position: absolute; z-index: 10; - - .new & { - margin-top: -10px; - } - - .parallel .new & { - margin-top: initial; - } } .discussion-body, -- cgit v1.2.1 From 00525de03f4035300d38accc222ced32c960db8d Mon Sep 17 00:00:00 2001 From: Simon Knox Date: Wed, 20 Jun 2018 16:39:15 +1000 Subject: fix z-index and vertically center --- app/assets/stylesheets/pages/notes.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss index e04100b5a9e..6e44fca7a1b 100644 --- a/app/assets/stylesheets/pages/notes.scss +++ b/app/assets/stylesheets/pages/notes.scss @@ -624,15 +624,17 @@ ul.notes { .line_holder .is-over:not(.no-comment-btn) { .add-diff-note { opacity: 1; + z-index: 101; } } .add-diff-note { @include btn-comment-icon; opacity: 0; - margin-top: -2px; margin-left: -55px; position: absolute; + top: 50%; + transform: translateY(-50%); z-index: 10; } -- cgit v1.2.1 From 25f90286f219f74ccb7a117ea760d036a7dadd1f Mon Sep 17 00:00:00 2001 From: Marcia Ramos Date: Wed, 20 Jun 2018 09:48:34 +0000 Subject: Update styleguide.md with rules for navigation items --- doc/development/documentation/styleguide.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/development/documentation/styleguide.md b/doc/development/documentation/styleguide.md index e7ffba635c9..a0348120089 100644 --- a/doc/development/documentation/styleguide.md +++ b/doc/development/documentation/styleguide.md @@ -26,7 +26,10 @@ Check the GitLab handbook for the [writing styles guidelines](https://about.gitl - Jump a line between different markups (e.g., after every paragraph, header, list, etc) - Capitalize "G" and "L" in GitLab - Use sentence case for titles, headings, labels, menu items, and buttons. -- Use title case when referring to [features](https://about.gitlab.com/features/) or [products](https://about.gitlab.com/pricing/), and methods. Note that some features are also objects (e.g. "Merge Requests" and "merge requests"). E.g.: GitLab Runner, Geo, Issue Boards, Git, Prometheus, Continuous Integration. +- Use title case when referring to [features](https://about.gitlab.com/features/) or +[products](https://about.gitlab.com/pricing/), and methods. Note that some +features are also objects (e.g. "Merge Requests" and "merge requests"). +E.g.: GitLab Runner, Geo, Issue Boards, Git, Prometheus, Continuous Integration. ## Formatting @@ -72,7 +75,7 @@ For punctuation rules, please refer to the [GitLab UX guide](https://design.gitl This is to ensure that no document with wrong heading is going live without an audit, thus preventing dead links and redirection issues when corrected -- Leave exactly one newline after a heading +- Leave exactly one new line after a heading ## Links @@ -95,6 +98,16 @@ For punctuation rules, please refer to the [GitLab UX guide](https://design.gitl E.g., instead of writing something like `Read more about GitLab Issue Boards [here](LINK)`, write `Read more about [GitLab Issue Boards](LINK)`. +## Navigation + +To indicate the steps of navigation through the UI: + +- Use the exact word as shown in the UI, including any capital letters as-is +- Use bold text for navigation items and the char `>` as separator +(e.g., `Navigate to your project's **Settings > CI/CD**` ) +- If there are any expandable menus, make sure to mention that the user +needs to expand the tab to find the settings you're referring to + ## Images - Place images in a separate directory named `img/` in the same directory where -- cgit v1.2.1 From 6da19415531e4c40f48df2c604efe51578cea295 Mon Sep 17 00:00:00 2001 From: blackst0ne Date: Wed, 20 Jun 2018 21:42:52 +1100 Subject: [Rails5] Set request.format in commits_controller Since Rails 5.0 `request.format` is being set depending on the route extension. In commits pages we pass a ref as a URL parameter. If the ref is an extension-like, Rails converts it and sets to `request.format`. E.g. if the ref is `some_branch.atom`, Rails starts responding with `atom` format, but it should response with `html` because `.atom` is the part of ref name, not the format. This commit explicitly sets `request.format` to `:html` when needed. --- app/controllers/projects/commits_controller.rb | 14 ++++++++++++++ ...ne-rails5-set-request-format-in--commits-controller.yml | 5 +++++ 2 files changed, 19 insertions(+) create mode 100644 changelogs/unreleased/blackst0ne-rails5-set-request-format-in--commits-controller.yml diff --git a/app/controllers/projects/commits_controller.rb b/app/controllers/projects/commits_controller.rb index 7b7cb52d7ed..9e495061f4e 100644 --- a/app/controllers/projects/commits_controller.rb +++ b/app/controllers/projects/commits_controller.rb @@ -9,6 +9,7 @@ class Projects::CommitsController < Projects::ApplicationController before_action :assign_ref_vars before_action :authorize_download_code! before_action :set_commits + before_action :set_request_format, only: :show def show @merge_request = MergeRequestsFinder.new(current_user, project_id: @project.id).execute.opened @@ -61,6 +62,19 @@ class Projects::CommitsController < Projects::ApplicationController @commits = prepare_commits_for_rendering(@commits) end + # Rails 5 sets request.format from the extension. + # Explicitly set to :html. + def set_request_format + request.format = :html if set_request_format? + end + + # Rails 5 sets request.format from extension. + # In this case if the ref ends with `.atom`, it's expected to be the html response, + # not the atom one. So explicitly set request.format as :html to act like rails4. + def set_request_format? + request.format.to_s == "text/html" || @commits.ref.ends_with?("atom") + end + def whitelist_query_limiting Gitlab::QueryLimiting.whitelist('https://gitlab.com/gitlab-org/gitlab-ce/issues/42330') end diff --git a/changelogs/unreleased/blackst0ne-rails5-set-request-format-in--commits-controller.yml b/changelogs/unreleased/blackst0ne-rails5-set-request-format-in--commits-controller.yml new file mode 100644 index 00000000000..3f8f8fd5d66 --- /dev/null +++ b/changelogs/unreleased/blackst0ne-rails5-set-request-format-in--commits-controller.yml @@ -0,0 +1,5 @@ +--- +title: "[Rails5] Set request.format in commits_controller" +merge_request: 20023 +author: "@blackst0ne" +type: fixed -- cgit v1.2.1 From fed8ee07907a1c6f448d7a7aef361dd482e770d7 Mon Sep 17 00:00:00 2001 From: James Ramsay Date: Wed, 20 Jun 2018 12:21:45 +0000 Subject: Add ellipsis to Web IDE commit button The blue shortcut commit button opens the commit interface to actually perform the commit. The ellipsis indicates the button doesn't immediately perform the commit. --- app/assets/javascripts/ide/components/commit_sidebar/form.vue | 2 +- changelogs/unreleased/jr-48133-web-ide-commit-ellipsis.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/jr-48133-web-ide-commit-ellipsis.yml diff --git a/app/assets/javascripts/ide/components/commit_sidebar/form.vue b/app/assets/javascripts/ide/components/commit_sidebar/form.vue index 955d9280728..14c74687ab4 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/form.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/form.vue @@ -117,7 +117,7 @@ export default { class="btn btn-primary btn-sm btn-block" @click="toggleIsSmall" > - {{ __('Commit') }} + {{ __('Commit…') }}

Date: Wed, 20 Jun 2018 14:13:03 +0100 Subject: clarify what "methods" are --- doc/development/documentation/styleguide.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/development/documentation/styleguide.md b/doc/development/documentation/styleguide.md index a0348120089..a315cfdc116 100644 --- a/doc/development/documentation/styleguide.md +++ b/doc/development/documentation/styleguide.md @@ -27,9 +27,10 @@ Check the GitLab handbook for the [writing styles guidelines](https://about.gitl - Capitalize "G" and "L" in GitLab - Use sentence case for titles, headings, labels, menu items, and buttons. - Use title case when referring to [features](https://about.gitlab.com/features/) or -[products](https://about.gitlab.com/pricing/), and methods. Note that some -features are also objects (e.g. "Merge Requests" and "merge requests"). -E.g.: GitLab Runner, Geo, Issue Boards, Git, Prometheus, Continuous Integration. +[products](https://about.gitlab.com/pricing/) (e.g., GitLab Runner, Geo, +Issue Boards, GitLab Core, Git, Prometheus, Kubernetes, etc), and methods or methodologies +(e.g., Continuous Integration, Continuous Deployment, Scrum, Agile, etc). Note that +some features are also objects (e.g. "Merge Requests" and "merge requests"). ## Formatting -- cgit v1.2.1 From 1753efbc143d18fe0c29e33319b8779c1d03f7c6 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Wed, 20 Jun 2018 16:34:19 +0200 Subject: Add spec for more examples of trailing punctuation that should be ignored --- spec/lib/banzai/filter/label_reference_filter_spec.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spec/lib/banzai/filter/label_reference_filter_spec.rb b/spec/lib/banzai/filter/label_reference_filter_spec.rb index f34d3dc935b..00257ed7904 100644 --- a/spec/lib/banzai/filter/label_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/label_reference_filter_spec.rb @@ -148,9 +148,11 @@ describe Banzai::Filter::LabelReferenceFilter do expect(doc.text).to eq 'See ?g.fm&' end - it 'links with adjacent text' do - doc = reference_filter("Label #{reference}.") - expect(doc.to_html).to match(%r(\?g\.fm&\.)) + it 'does not include trailing punctuation', :aggregate_failures do + ['.', ', ok?', '...', '?', '!', ': is that ok?'].each do |trailing_punctuation| + doc = filter("Label #{reference}#{trailing_punctuation}") + expect(doc.to_html).to match(%r(\?g\.fm&#{Regexp.escape(trailing_punctuation)})) + end end it 'ignores invalid label names' do -- cgit v1.2.1 From 67f310e41fe739d28e5620b816e8568433e977ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 20 Jun 2018 17:17:29 +0200 Subject: Ignore GitLab API hiccups in scripts/trigger-build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- scripts/trigger-build | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/trigger-build b/scripts/trigger-build index 526f5164ede..798bf1e82b7 100755 --- a/scripts/trigger-build +++ b/scripts/trigger-build @@ -165,6 +165,10 @@ module Trigger end JSON.parse(res.body)['status'].to_s.to_sym + rescue JSON::ParserError + # Ignore GitLab API hiccups. If GitLab is really down, we'll hit the job + # timeout anyway. + :running end end end -- cgit v1.2.1 From 5b994b8199a3679b6f5ef0d00edce22ea9662664 Mon Sep 17 00:00:00 2001 From: Mark Chao Date: Thu, 7 Jun 2018 23:56:59 +0900 Subject: Notify only when unmergeable due to conflict There is still the edge case when 'no commits' changes to 'conflict' would not trigger notification, which we ignore for now. Calling can_be_merged? can cause exception (e.g. non-UTF8) Ignore those by rescueing. Remove unmergeable_reason as now only conflict is notified Update spec --- app/mailers/emails/merge_requests.rb | 2 -- app/models/merge_request.rb | 13 ++++++-- app/presenters/merge_request_presenter.rb | 11 ------- .../merge_request_unmergeable_email.html.haml | 6 +--- .../merge_request_unmergeable_email.text.haml | 5 +--- spec/mailers/notify_spec.rb | 8 +---- spec/models/merge_request_spec.rb | 16 ++++++++-- spec/presenters/merge_request_presenter_spec.rb | 35 ---------------------- 8 files changed, 28 insertions(+), 68 deletions(-) diff --git a/app/mailers/emails/merge_requests.rb b/app/mailers/emails/merge_requests.rb index 5ba3a4a322c..70509e9066d 100644 --- a/app/mailers/emails/merge_requests.rb +++ b/app/mailers/emails/merge_requests.rb @@ -59,8 +59,6 @@ module Emails def merge_request_unmergeable_email(recipient_id, merge_request_id, reason = nil) setup_merge_request_mail(merge_request_id, recipient_id) - @reasons = MergeRequestPresenter.new(@merge_request, current_user: current_user).unmergeable_reasons - mail_answer_thread(@merge_request, merge_request_thread_options(@merge_request.author_id, recipient_id, reason)) end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 324065c1162..4b78ba1029f 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -128,8 +128,17 @@ class MergeRequest < ActiveRecord::Base end after_transition unchecked: :cannot_be_merged do |merge_request, transition| - NotificationService.new.merge_request_unmergeable(merge_request) - TodoService.new.merge_request_became_unmergeable(merge_request) + begin + # Merge request can become unmergeable due to many reasons. + # We only notify if it is due to conflict. + unless merge_request.project.repository.can_be_merged?(merge_request.diff_head_sha, merge_request.target_branch) + NotificationService.new.merge_request_unmergeable(merge_request) + TodoService.new.merge_request_became_unmergeable(merge_request) + end + rescue Gitlab::Git::CommandError + # Checking mergeability can trigger exception, e.g. non-utf8 + # We ignore this type of errors. + end end def check_state?(merge_status) diff --git a/app/presenters/merge_request_presenter.rb b/app/presenters/merge_request_presenter.rb index 8d466c33510..eb54ab2cda6 100644 --- a/app/presenters/merge_request_presenter.rb +++ b/app/presenters/merge_request_presenter.rb @@ -20,17 +20,6 @@ class MergeRequestPresenter < Gitlab::View::Presenter::Delegated end end - def unmergeable_reasons - strong_memoize(:unmergeable_reasons) do - reasons = [] - reasons << "no commits" if merge_request.has_no_commits? - reasons << "source branch is missing" unless merge_request.source_branch_exists? - reasons << "target branch is missing" unless merge_request.target_branch_exists? - reasons << "has merge conflicts" unless merge_request.project.repository.can_be_merged?(merge_request.diff_head_sha, merge_request.target_branch) - reasons - end - end - def cancel_merge_when_pipeline_succeeds_path if can_cancel_merge_when_pipeline_succeeds?(current_user) cancel_merge_when_pipeline_succeeds_project_merge_request_path(project, merge_request) diff --git a/app/views/notify/merge_request_unmergeable_email.html.haml b/app/views/notify/merge_request_unmergeable_email.html.haml index 578fa1fbce7..7ec0c1ef390 100644 --- a/app/views/notify/merge_request_unmergeable_email.html.haml +++ b/app/views/notify/merge_request_unmergeable_email.html.haml @@ -1,6 +1,2 @@ %p - Merge Request #{link_to @merge_request.to_reference, project_merge_request_url(@merge_request.target_project, @merge_request)} can no longer be merged due to the following #{'reason'.pluralize(@reasons.count)}: - - %ul - - @reasons.each do |reason| - %li= reason + Merge Request #{link_to @merge_request.to_reference, project_merge_request_url(@merge_request.target_project, @merge_request)} can no longer be merged due to conflict. diff --git a/app/views/notify/merge_request_unmergeable_email.text.haml b/app/views/notify/merge_request_unmergeable_email.text.haml index e4f9f1bf5e7..dcdd6db69d6 100644 --- a/app/views/notify/merge_request_unmergeable_email.text.haml +++ b/app/views/notify/merge_request_unmergeable_email.text.haml @@ -1,7 +1,4 @@ -Merge Request #{@merge_request.to_reference} can no longer be merged due to the following #{'reason'.pluralize(@reasons.count)}: - -- @reasons.each do |reason| - * #{reason} +Merge Request #{@merge_request.to_reference} can no longer be merged due to conflict. Merge Request url: #{project_merge_request_url(@merge_request.target_project, @merge_request)} diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb index 775ca4ba0eb..a9a45367b4a 100644 --- a/spec/mailers/notify_spec.rb +++ b/spec/mailers/notify_spec.rb @@ -416,16 +416,10 @@ describe Notify do end it 'has the correct subject and body' do - reasons = %w[foo bar] - - allow_any_instance_of(MergeRequestPresenter).to receive(:unmergeable_reasons).and_return(reasons) aggregate_failures do is_expected.to have_referable_subject(merge_request, reply: true) is_expected.to have_body_text(project_merge_request_path(project, merge_request)) - is_expected.to have_body_text('following reasons:') - reasons.each do |reason| - is_expected.to have_body_text(reason) - end + is_expected.to have_body_text('due to conflict.') end end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 3f028b3bd5c..7ae70c3afb4 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1324,6 +1324,7 @@ describe MergeRequest do context 'when broken' do before do allow(subject).to receive(:broken?) { true } + allow(project.repository).to receive(:can_be_merged?).and_return(false) end it 'becomes unmergeable' do @@ -2150,9 +2151,11 @@ describe MergeRequest do before do allow(NotificationService).to receive(:new).and_return(notification_service) allow(TodoService).to receive(:new).and_return(todo_service) + + allow(subject.project.repository).to receive(:can_be_merged?).and_return(false) end - it 'notifies, but does not notify again if rechecking still results in cannot_be_merged' do + it 'notifies conflict, but does not notify again if rechecking still results in cannot_be_merged' do expect(notification_service).to receive(:merge_request_unmergeable).with(subject).once expect(todo_service).to receive(:merge_request_became_unmergeable).with(subject).once @@ -2161,7 +2164,7 @@ describe MergeRequest do subject.mark_as_unmergeable end - it 'notifies whenever merge request is newly unmergeable' do + it 'notifies conflict, whenever newly unmergeable' do expect(notification_service).to receive(:merge_request_unmergeable).with(subject).twice expect(todo_service).to receive(:merge_request_became_unmergeable).with(subject).twice @@ -2171,6 +2174,15 @@ describe MergeRequest do subject.mark_as_unchecked subject.mark_as_unmergeable end + + it 'does not notify whenever merge request is newly unmergeable due to other reasons' do + allow(subject.project.repository).to receive(:can_be_merged?).and_return(true) + + expect(notification_service).not_to receive(:merge_request_unmergeable) + expect(todo_service).not_to receive(:merge_request_became_unmergeable) + + subject.mark_as_unmergeable + end end describe 'check_state?' do diff --git a/spec/presenters/merge_request_presenter_spec.rb b/spec/presenters/merge_request_presenter_spec.rb index d5fb4a7742c..e3b37739e8e 100644 --- a/spec/presenters/merge_request_presenter_spec.rb +++ b/spec/presenters/merge_request_presenter_spec.rb @@ -70,41 +70,6 @@ describe MergeRequestPresenter do end end - describe "#unmergeable_reasons" do - let(:presenter) { described_class.new(resource, current_user: user) } - - before do - # Mergeable base state - allow(resource).to receive(:has_no_commits?).and_return(false) - allow(resource).to receive(:source_branch_exists?).and_return(true) - allow(resource).to receive(:target_branch_exists?).and_return(true) - allow(resource.project.repository).to receive(:can_be_merged?).and_return(true) - end - - it "handles mergeable request" do - expect(presenter.unmergeable_reasons).to eq([]) - end - - it "handles no commit" do - allow(resource).to receive(:has_no_commits?).and_return(true) - - expect(presenter.unmergeable_reasons).to eq(["no commits"]) - end - - it "handles branches missing" do - allow(resource).to receive(:source_branch_exists?).and_return(false) - allow(resource).to receive(:target_branch_exists?).and_return(false) - - expect(presenter.unmergeable_reasons).to eq(["source branch is missing", "target branch is missing"]) - end - - it "handles merge conflict" do - allow(resource.project.repository).to receive(:can_be_merged?).and_return(false) - - expect(presenter.unmergeable_reasons).to eq(["has merge conflicts"]) - end - end - describe '#conflict_resolution_path' do let(:project) { create :project } let(:user) { create :user } -- cgit v1.2.1 From 937bd9e386f54eeac2ef2009173d58a7842f9779 Mon Sep 17 00:00:00 2001 From: Mark Chao Date: Tue, 19 Jun 2018 21:22:38 +0800 Subject: Fix possiblilty of branch not found This now can happen because can_be_merged? is called during MR merge_status transition to cannot_be_merged. It is possible branch_name is invalid. --- lib/gitlab/git/repository.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 77543206e13..b7965315eb2 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -1413,8 +1413,11 @@ module Gitlab end def can_be_merged?(source_sha, target_branch) - target_sha = find_branch(target_branch, true).target - !gitaly_conflicts_client(source_sha, target_sha).conflicts? + if target_sha = find_branch(target_branch, true)&.target + !gitaly_conflicts_client(source_sha, target_sha).conflicts? + else + false + end end def search_files_by_name(query, ref) -- cgit v1.2.1 From e704f682f8856f28ed919d67d0ddbb78e767a151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 20 Jun 2018 13:55:32 +0200 Subject: [QA] Fix qa/qa/specs/features/login/ldap_spec.rb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- qa/qa/runtime/env.rb | 6 +++++- qa/qa/specs/features/login/ldap_spec.rb | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/qa/qa/runtime/env.rb b/qa/qa/runtime/env.rb index 81d00d45753..2126ce6b234 100644 --- a/qa/qa/runtime/env.rb +++ b/qa/qa/runtime/env.rb @@ -3,6 +3,8 @@ module QA module Env extend self + attr_writer :user_type + # set to 'false' to have Chrome run visibly instead of headless def chrome_headless? (ENV['CHROME_HEADLESS'] =~ /^(false|no|0)$/i) != 0 @@ -20,7 +22,9 @@ module QA # By default, "standard" denotes a standard GitLab user login. # Set this to "ldap" if the user should be logged in via LDAP. def user_type - (ENV['GITLAB_USER_TYPE'] || 'standard').tap do |type| + return @user_type if defined?(@user_type) # rubocop:disable Gitlab/ModuleWithInstanceVariables + + ENV.fetch('GITLAB_USER_TYPE', 'standard').tap do |type| unless %w(ldap standard).include?(type) raise ArgumentError.new("Invalid user type '#{type}': must be 'ldap' or 'standard'") end diff --git a/qa/qa/specs/features/login/ldap_spec.rb b/qa/qa/specs/features/login/ldap_spec.rb index ac2bd5a3c39..737f4d10053 100644 --- a/qa/qa/specs/features/login/ldap_spec.rb +++ b/qa/qa/specs/features/login/ldap_spec.rb @@ -1,8 +1,12 @@ module QA feature 'LDAP user login', :ldap do + before do + Runtime::Env.user_type = 'ldap' + end + scenario 'user logs in using LDAP credentials' do Runtime::Browser.visit(:gitlab, Page::Main::Login) - Page::Main::Login.act { sign_in_using_ldap_credentials } + Page::Main::Login.act { sign_in_using_credentials } # TODO, since `Signed in successfully` message was removed # this is the only way to tell if user is signed in correctly. -- cgit v1.2.1 From f3f1df1476ba7fe223e5d8d6707a7675dc9fa597 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Mon, 18 Jun 2018 10:31:41 +0200 Subject: Add a cop for `FinderMethods` This notifies developers when calling `find(_by!)` chained on `execute`. And suggests using the methods from `FinderMethods`. These will perform the correct authorization checks on the resource when it is found. --- .../concerns/issues/resolve_discussions.rb | 1 - rubocop/cop/gitlab/finder_with_find_by.rb | 52 ++++++++++++++++++++ rubocop/rubocop.rb | 1 + .../rubocop/cop/gitlab/finder_with_find_by_spec.rb | 56 ++++++++++++++++++++++ spec/services/issues/resolve_discussions_spec.rb | 4 +- 5 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 rubocop/cop/gitlab/finder_with_find_by.rb create mode 100644 spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb diff --git a/app/services/concerns/issues/resolve_discussions.rb b/app/services/concerns/issues/resolve_discussions.rb index 26eb274f4d5..455f761ca9b 100644 --- a/app/services/concerns/issues/resolve_discussions.rb +++ b/app/services/concerns/issues/resolve_discussions.rb @@ -14,7 +14,6 @@ module Issues def merge_request_to_resolve_discussions_of strong_memoize(:merge_request_to_resolve_discussions_of) do MergeRequestsFinder.new(current_user, project_id: project.id) - .execute .find_by(iid: merge_request_to_resolve_discussions_of_iid) end end diff --git a/rubocop/cop/gitlab/finder_with_find_by.rb b/rubocop/cop/gitlab/finder_with_find_by.rb new file mode 100644 index 00000000000..f45a37ddc06 --- /dev/null +++ b/rubocop/cop/gitlab/finder_with_find_by.rb @@ -0,0 +1,52 @@ +module RuboCop + module Cop + module Gitlab + class FinderWithFindBy < RuboCop::Cop::Cop + FIND_PATTERN = /\Afind(_by\!?)?\z/ + ALLOWED_MODULES = ['FinderMethods'].freeze + + def message(used_method) + <<~MSG + Don't chain finders `#execute` method with `##{used_method}`. + Instead include `FinderMethods` in the Finder and call `##{used_method}` + directly on the finder instance. + + This will make sure all authorization checks are performed on the resource. + MSG + end + + def on_send(node) + if find_on_execute?(node) && !allowed_module?(node) + add_offense(node, location: :selector, message: message(node.method_name)) + end + end + + def autocorrect(node) + lambda do |corrector| + upto_including_execute = node.descendants.first.source_range + before_execute = node.descendants[1].source_range + range_to_remove = node.source_range + .with(begin_pos: before_execute.end_pos, + end_pos: upto_including_execute.end_pos) + + corrector.remove(range_to_remove) + end + end + + def find_on_execute?(node) + chained_on_node = node.descendants.first + node.method_name.to_s =~ FIND_PATTERN && + chained_on_node&.method_name == :execute + end + + def allowed_module?(node) + ALLOWED_MODULES.include?(node.parent_module_name) + end + + def method_name_for_node(node) + children[1].to_s + end + end + end + end +end diff --git a/rubocop/rubocop.rb b/rubocop/rubocop.rb index f05990232ab..aa7ae601f75 100644 --- a/rubocop/rubocop.rb +++ b/rubocop/rubocop.rb @@ -2,6 +2,7 @@ require_relative 'cop/gitlab/module_with_instance_variables' require_relative 'cop/gitlab/predicate_memoization' require_relative 'cop/gitlab/httparty' +require_relative 'cop/gitlab/finder_with_find_by' require_relative 'cop/include_sidekiq_worker' require_relative 'cop/avoid_return_from_blocks' require_relative 'cop/avoid_break_from_strong_memoize' diff --git a/spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb b/spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb new file mode 100644 index 00000000000..7f689b196c5 --- /dev/null +++ b/spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb @@ -0,0 +1,56 @@ +require 'spec_helper' + +require 'rubocop' +require 'rubocop/rspec/support' + +require_relative '../../../../rubocop/cop/gitlab/finder_with_find_by' + +describe RuboCop::Cop::Gitlab::FinderWithFindBy do + include CopHelper + + subject(:cop) { described_class.new } + + context 'when calling execute.find' do + let(:source) do + <<~SRC + DummyFinder.new(some_args) + .execute + .find_by!(1) + SRC + end + let(:corrected_source) do + <<~SRC + DummyFinder.new(some_args) + .find_by!(1) + SRC + end + + it 'registers an offence' do + inspect_source(source) + + expect(cop.offenses.size).to eq(1) + end + + it 'can autocorrect the source' do + expect(autocorrect_source(source)).to eq(corrected_source) + end + + context 'when called within the `FinderMethods` module' do + let(:source) do + <<~SRC + module FinderMethods + def find_by!(*args) + execute.find_by!(args) + end + end + SRC + end + + it 'does not register an offence' do + inspect_source(source) + + expect(cop.offenses).to be_empty + end + end + end +end diff --git a/spec/services/issues/resolve_discussions_spec.rb b/spec/services/issues/resolve_discussions_spec.rb index 13accc6ae1b..b6cfc09da65 100644 --- a/spec/services/issues/resolve_discussions_spec.rb +++ b/spec/services/issues/resolve_discussions_spec.rb @@ -31,10 +31,8 @@ describe Issues::ResolveDiscussions do it "only queries for the merge request once" do fake_finder = double - fake_results = double - expect(fake_finder).to receive(:execute).and_return(fake_results).exactly(1) - expect(fake_results).to receive(:find_by).exactly(1) + expect(fake_finder).to receive(:find_by).exactly(1) expect(MergeRequestsFinder).to receive(:new).and_return(fake_finder).exactly(1) 2.times { service.merge_request_to_resolve_discussions_of } -- cgit v1.2.1 From 582c6b17cf93f6c83bad215301ef6480a4f4748b Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Thu, 21 Jun 2018 00:31:56 +0800 Subject: Unify flay.rake and gettext.rake from EE --- lib/tasks/flay.rake | 2 +- lib/tasks/gettext.rake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/tasks/flay.rake b/lib/tasks/flay.rake index 4b4881cecb8..4bec013a141 100644 --- a/lib/tasks/flay.rake +++ b/lib/tasks/flay.rake @@ -1,6 +1,6 @@ desc 'Code duplication analyze via flay' task :flay do - output = `bundle exec flay --mass 35 app/ lib/gitlab/ 2> #{File::NULL}` + output = `bundle exec flay --mass 35 app/ lib/gitlab/ ee/ 2> #{File::NULL}` if output.include?("Similar code found") || output.include?("IDENTICAL code found") puts output diff --git a/lib/tasks/gettext.rake b/lib/tasks/gettext.rake index d7c40cb6a12..d8ff2aa824d 100644 --- a/lib/tasks/gettext.rake +++ b/lib/tasks/gettext.rake @@ -4,7 +4,7 @@ namespace :gettext do # Customize list of translatable files # See: https://github.com/grosser/gettext_i18n_rails#customizing-list-of-translatable-files def files_to_translate - folders = %W(app lib config #{locale_path}).join(',') + folders = %W(ee app lib config #{locale_path}).join(',') exts = %w(rb erb haml slim rhtml js jsx vue handlebars hbs mustache).join(',') Dir.glob( -- cgit v1.2.1 From 727bba8ef5840501a83f4e2fc5f895530079c264 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 20 Jun 2018 14:16:14 -0300 Subject: Add enabled prefix to feature keys to be consistent with other keys --- lib/gitlab/usage_data.rb | 16 ++++++++-------- spec/lib/gitlab/usage_data_spec.rb | 31 ++++++++++++++++--------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb index 59a222b086c..dff0c97eeb4 100644 --- a/lib/gitlab/usage_data.rb +++ b/lib/gitlab/usage_data.rb @@ -24,7 +24,6 @@ module Gitlab installation_type: Gitlab::INSTALLATION_TYPE, active_user_count: User.active.count, recorded_at: Time.now, - mattermost_enabled: Gitlab.config.mattermost.enabled, edition: 'CE' } @@ -91,13 +90,14 @@ module Gitlab def features_usage_data_ce { - signup: Gitlab::CurrentSettings.allow_signup?, - ldap: Gitlab.config.ldap.enabled, - gravatar: Gitlab::CurrentSettings.gravatar_enabled?, - omniauth: Gitlab.config.omniauth.enabled, - reply_by_email: Gitlab::IncomingEmail.enabled?, - container_registry: Gitlab.config.registry.enabled, - gitlab_shared_runners: Gitlab.config.gitlab_ci.shared_runners_enabled + container_registry_enabled: Gitlab.config.registry.enabled, + gitlab_shared_runners_enabled: Gitlab.config.gitlab_ci.shared_runners_enabled, + gravatar_enabled: Gitlab::CurrentSettings.gravatar_enabled?, + ldap_enabled: Gitlab.config.ldap.enabled, + mattermost_enabled: Gitlab.config.mattermost.enabled, + omniauth_enabled: Gitlab.config.omniauth.enabled, + reply_by_email_enabled: Gitlab::IncomingEmail.enabled?, + signup_enabled: Gitlab::CurrentSettings.allow_signup? } end diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 22d921716aa..20def4fefe2 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -29,20 +29,20 @@ describe Gitlab::UsageData do active_user_count counts recorded_at - mattermost_enabled edition version installation_type uuid hostname - signup - ldap - gravatar - omniauth - reply_by_email - container_registry + mattermost_enabled + signup_enabled + ldap_enabled + gravatar_enabled + omniauth_enabled + reply_by_email_enabled + container_registry_enabled + gitlab_shared_runners_enabled gitlab_pages - gitlab_shared_runners git database avg_cycle_analytics @@ -129,13 +129,14 @@ describe Gitlab::UsageData do subject { described_class.features_usage_data_ce } it 'gathers feature usage data' do - expect(subject[:signup]).to eq(Gitlab::CurrentSettings.allow_signup?) - expect(subject[:ldap]).to eq(Gitlab.config.ldap.enabled) - expect(subject[:gravatar]).to eq(Gitlab::CurrentSettings.gravatar_enabled?) - expect(subject[:omniauth]).to eq(Gitlab.config.omniauth.enabled) - expect(subject[:reply_by_email]).to eq(Gitlab::IncomingEmail.enabled?) - expect(subject[:container_registry]).to eq(Gitlab.config.registry.enabled) - expect(subject[:gitlab_shared_runners]).to eq(Gitlab.config.gitlab_ci.shared_runners_enabled) + expect(subject[:mattermost_enabled]).to eq(Gitlab.config.mattermost.enabled) + expect(subject[:signup_enabled]).to eq(Gitlab::CurrentSettings.allow_signup?) + expect(subject[:ldap_enabled]).to eq(Gitlab.config.ldap.enabled) + expect(subject[:gravatar_enabled]).to eq(Gitlab::CurrentSettings.gravatar_enabled?) + expect(subject[:omniauth_enabled]).to eq(Gitlab.config.omniauth.enabled) + expect(subject[:reply_by_email_enabled]).to eq(Gitlab::IncomingEmail.enabled?) + expect(subject[:container_registry_enabled]).to eq(Gitlab.config.registry.enabled) + expect(subject[:gitlab_shared_runners_enabled]).to eq(Gitlab.config.gitlab_ci.shared_runners_enabled) end end -- cgit v1.2.1 From bc07b89fc2ec388345a4c395283d2927ffffa0c0 Mon Sep 17 00:00:00 2001 From: Ramya A Date: Wed, 20 Jun 2018 17:22:05 +0000 Subject: Added Wiki Scenario Automation gitlab-qa#263 --- qa/qa.rb | 13 ++++++ qa/qa/factory/repository/project_push.rb | 34 +++++++++++++++ qa/qa/factory/repository/push.rb | 22 ++-------- qa/qa/factory/repository/wiki_push.rb | 32 ++++++++++++++ qa/qa/factory/resource/branch.rb | 4 +- qa/qa/factory/resource/merge_request.rb | 4 +- qa/qa/factory/resource/wiki.rb | 25 +++++++++++ qa/qa/page/menu/side.rb | 7 +++ qa/qa/page/project/show.rb | 41 +----------------- qa/qa/page/project/wiki/edit.rb | 27 ++++++++++++ qa/qa/page/project/wiki/new.rb | 45 +++++++++++++++++++ qa/qa/page/project/wiki/show.rb | 19 ++++++++ qa/qa/page/shared/clone_panel.rb | 50 ++++++++++++++++++++++ qa/qa/specs/features/merge_request/rebase_spec.rb | 2 +- qa/qa/specs/features/merge_request/squash_spec.rb | 2 +- qa/qa/specs/features/project/activity_spec.rb | 2 +- qa/qa/specs/features/project/auto_devops_spec.rb | 2 +- .../features/project/deploy_key_clone_spec.rb | 2 +- qa/qa/specs/features/project/pipelines_spec.rb | 2 +- qa/qa/specs/features/project/wikis_spec.rb | 45 +++++++++++++++++++ .../features/repository/protected_branches_spec.rb | 2 +- qa/qa/specs/features/repository/push_spec.rb | 2 +- 22 files changed, 314 insertions(+), 70 deletions(-) create mode 100644 qa/qa/factory/repository/project_push.rb create mode 100644 qa/qa/factory/repository/wiki_push.rb create mode 100644 qa/qa/factory/resource/wiki.rb create mode 100644 qa/qa/page/project/wiki/edit.rb create mode 100644 qa/qa/page/project/wiki/new.rb create mode 100644 qa/qa/page/project/wiki/show.rb create mode 100644 qa/qa/page/shared/clone_panel.rb create mode 100644 qa/qa/specs/features/project/wikis_spec.rb diff --git a/qa/qa.rb b/qa/qa.rb index 503379823f4..5013024e60f 100644 --- a/qa/qa.rb +++ b/qa/qa.rb @@ -46,10 +46,13 @@ module QA autoload :Runner, 'qa/factory/resource/runner' autoload :PersonalAccessToken, 'qa/factory/resource/personal_access_token' autoload :KubernetesCluster, 'qa/factory/resource/kubernetes_cluster' + autoload :Wiki, 'qa/factory/resource/wiki' end module Repository autoload :Push, 'qa/factory/repository/push' + autoload :ProjectPush, 'qa/factory/repository/project_push' + autoload :WikiPush, 'qa/factory/repository/wiki_push' end module Settings @@ -165,6 +168,16 @@ module QA autoload :Show, 'qa/page/project/operations/kubernetes/show' end end + + module Wiki + autoload :Edit, 'qa/page/project/wiki/edit' + autoload :New, 'qa/page/project/wiki/new' + autoload :Show, 'qa/page/project/wiki/show' + end + end + + module Shared + autoload :ClonePanel, 'qa/page/shared/clone_panel' end module Profile diff --git a/qa/qa/factory/repository/project_push.rb b/qa/qa/factory/repository/project_push.rb new file mode 100644 index 00000000000..48674c08a8d --- /dev/null +++ b/qa/qa/factory/repository/project_push.rb @@ -0,0 +1,34 @@ +module QA + module Factory + module Repository + class ProjectPush < Factory::Repository::Push + dependency Factory::Resource::Project, as: :project do |project| + project.name = 'project-with-code' + project.description = 'Project with repository' + end + + product :output do |factory| + factory.output + end + + def initialize + @file_name = 'file.txt' + @file_content = '# This is test project' + @commit_message = "This is a test commit" + @branch_name = 'master' + @new_branch = true + end + + def repository_uri + @repository_uri ||= begin + project.visit! + Page::Project::Show.act do + choose_repository_clone_http + repository_location.uri + end + end + end + end + end + end +end diff --git a/qa/qa/factory/repository/push.rb b/qa/qa/factory/repository/push.rb index 7c0d580c5ca..4f97e65b091 100644 --- a/qa/qa/factory/repository/push.rb +++ b/qa/qa/factory/repository/push.rb @@ -5,25 +5,17 @@ module QA module Repository class Push < Factory::Base attr_accessor :file_name, :file_content, :commit_message, - :branch_name, :new_branch, :output + :branch_name, :new_branch, :output, :repository_uri attr_writer :remote_branch - dependency Factory::Resource::Project, as: :project do |project| - project.name = 'project-with-code' - project.description = 'Project with repository' - end - - product :output do |factory| - factory.output - end - def initialize @file_name = 'file.txt' - @file_content = '# This is test project' + @file_content = '# This is test file' @commit_message = "This is a test commit" @branch_name = 'master' @new_branch = true + @repository_uri = "" end def remote_branch @@ -37,14 +29,8 @@ module QA end def fabricate! - project.visit! - Git::Repository.perform do |repository| - repository.uri = Page::Project::Show.act do - choose_repository_clone_http - repository_location.uri - end - + repository.uri = repository_uri repository.use_default_credentials repository.clone repository.configure_identity('GitLab QA', 'root@gitlab.com') diff --git a/qa/qa/factory/repository/wiki_push.rb b/qa/qa/factory/repository/wiki_push.rb new file mode 100644 index 00000000000..fb7c2bb660d --- /dev/null +++ b/qa/qa/factory/repository/wiki_push.rb @@ -0,0 +1,32 @@ +module QA + module Factory + module Repository + class WikiPush < Factory::Repository::Push + dependency Factory::Resource::Wiki, as: :wiki do |wiki| + wiki.title = 'Home' + wiki.content = '# My First Wiki Content' + wiki.message = 'Update home' + end + + def initialize + @file_name = 'Home.md' + @file_content = '# Welcome to My Wiki' + @commit_message = 'Updating Home Page' + @branch_name = 'master' + @new_branch = false + end + + def repository_uri + @repository_uri ||= begin + wiki.visit! + Page::Project::Wiki::Show.act do + go_to_clone_repository + choose_repository_clone_http + repository_location.uri + end + end + end + end + end + end +end diff --git a/qa/qa/factory/resource/branch.rb b/qa/qa/factory/resource/branch.rb index 4cabe7eab45..7fb0633ec90 100644 --- a/qa/qa/factory/resource/branch.rb +++ b/qa/qa/factory/resource/branch.rb @@ -31,13 +31,13 @@ module QA def fabricate! project.visit! - Factory::Repository::Push.fabricate! do |resource| + Factory::Repository::ProjectPush.fabricate! do |resource| resource.project = project resource.file_name = 'kick-off.txt' resource.commit_message = 'First commit' end - branch = Factory::Repository::Push.fabricate! do |resource| + branch = Factory::Repository::ProjectPush.fabricate! do |resource| resource.project = project resource.file_name = 'README.md' resource.commit_message = 'Add readme' diff --git a/qa/qa/factory/resource/merge_request.rb b/qa/qa/factory/resource/merge_request.rb index 7588ac5735d..24d3597d993 100644 --- a/qa/qa/factory/resource/merge_request.rb +++ b/qa/qa/factory/resource/merge_request.rb @@ -21,14 +21,14 @@ module QA project.name = 'project-with-merge-request' end - dependency Factory::Repository::Push, as: :target do |push, factory| + dependency Factory::Repository::ProjectPush, as: :target do |push, factory| factory.project.visit! push.project = factory.project push.branch_name = 'master' push.remote_branch = factory.target_branch end - dependency Factory::Repository::Push, as: :source do |push, factory| + dependency Factory::Repository::ProjectPush, as: :source do |push, factory| push.project = factory.project push.branch_name = factory.target_branch push.remote_branch = factory.source_branch diff --git a/qa/qa/factory/resource/wiki.rb b/qa/qa/factory/resource/wiki.rb new file mode 100644 index 00000000000..cc200a512d5 --- /dev/null +++ b/qa/qa/factory/resource/wiki.rb @@ -0,0 +1,25 @@ +module QA + module Factory + module Resource + class Wiki < Factory::Base + attr_accessor :title, :content, :message + + dependency Factory::Resource::Project, as: :project do |project| + project.name = 'project-for-wikis' + project.description = 'project for adding wikis' + end + + def fabricate! + Page::Menu::Side.act { click_wiki } + Page::Project::Wiki::New.perform do |page| + page.go_to_create_first_page + page.set_title(@title) + page.set_content(@content) + page.set_message(@message) + page.create_new_page + end + end + end + end + end +end diff --git a/qa/qa/page/menu/side.rb b/qa/qa/page/menu/side.rb index 3630b7e8568..6bf4825cf00 100644 --- a/qa/qa/page/menu/side.rb +++ b/qa/qa/page/menu/side.rb @@ -13,6 +13,7 @@ module QA element :top_level_items, '.sidebar-top-level-items' element :operations_section, "class: 'shortcuts-operations'" element :activity_link, "title: 'Activity'" + element :wiki_link_text, "Wiki" end view 'app/assets/javascripts/fly_out_nav.js' do @@ -61,6 +62,12 @@ module QA end end + def click_wiki + within_sidebar do + click_link('Wiki') + end + end + private def hover_settings diff --git a/qa/qa/page/project/show.rb b/qa/qa/page/project/show.rb index 5bbef040330..1406edece17 100644 --- a/qa/qa/page/project/show.rb +++ b/qa/qa/page/project/show.rb @@ -2,11 +2,7 @@ module QA module Page module Project class Show < Page::Base - view 'app/views/shared/_clone_panel.html.haml' do - element :clone_dropdown - element :clone_options_dropdown, '.clone-options-dropdown' - element :project_repository_location, 'text_field_tag :project_clone' - end + include Page::Shared::ClonePanel view 'app/views/projects/_last_push.html.haml' do element :create_merge_request @@ -26,21 +22,6 @@ module QA element :branches_dropdown end - def choose_repository_clone_http - choose_repository_clone('HTTP', 'http') - end - - def choose_repository_clone_ssh - # It's not always beginning with ssh:// so detecting with @ - # would be more reliable because ssh would always contain it. - # We can't use .git because HTTP also contain that part. - choose_repository_clone('SSH', '@') - end - - def repository_location - Git::Location.new(find('#project_clone').value) - end - def project_name find('.qa-project-name').text end @@ -65,31 +46,11 @@ module QA click_element :create_merge_request end - def wait_for_push - sleep 5 - refresh - end - def go_to_new_issue click_element :new_menu_toggle click_link 'New issue' end - - private - - def choose_repository_clone(kind, detect_text) - wait(reload: false) do - click_element :clone_dropdown - - page.within('.clone-options-dropdown') do - click_link(kind) - end - - # Ensure git clone textbox was updated - repository_location.git_uri.include?(detect_text) - end - end end end end diff --git a/qa/qa/page/project/wiki/edit.rb b/qa/qa/page/project/wiki/edit.rb new file mode 100644 index 00000000000..6fa45569cc0 --- /dev/null +++ b/qa/qa/page/project/wiki/edit.rb @@ -0,0 +1,27 @@ +module QA + module Page + module Project + module Wiki + class Edit < Page::Base + view 'app/views/projects/wikis/_main_links.html.haml' do + element :new_page_link, 'New page' + element :page_history_link, 'Page history' + element :edit_page_link, 'Edit' + end + + def go_to_new_page + click_on 'New page' + end + + def got_to_view_history_page + click_on 'Page history' + end + + def go_to_edit_page + click_on 'Edit' + end + end + end + end + end +end diff --git a/qa/qa/page/project/wiki/new.rb b/qa/qa/page/project/wiki/new.rb new file mode 100644 index 00000000000..415b3835538 --- /dev/null +++ b/qa/qa/page/project/wiki/new.rb @@ -0,0 +1,45 @@ +module QA + module Page + module Project + module Wiki + class New < Page::Base + view 'app/views/projects/wikis/_form.html.haml' do + element :wiki_title_textbox, 'text_field :title' + element :wiki_content_textarea, "render 'projects/zen', f: f, attr: :content" + element :wiki_message_textbox, 'text_field :message' + element :save_changes_button, 'submit _("Save changes")' + element :create_page_button, 'submit s_("Wiki|Create page")' + end + + view 'app/views/shared/empty_states/_wikis.html.haml' do + element :create_link, 'Create your first page' + end + + def go_to_create_first_page + click_link 'Create your first page' + end + + def set_title(title) + fill_in 'wiki_title', with: title + end + + def set_content(content) + fill_in 'wiki_content', with: content + end + + def set_message(message) + fill_in 'wiki_message', with: message + end + + def save_changes + click_on 'Save changes' + end + + def create_new_page + click_on 'Create page' + end + end + end + end + end +end diff --git a/qa/qa/page/project/wiki/show.rb b/qa/qa/page/project/wiki/show.rb new file mode 100644 index 00000000000..044e514bab3 --- /dev/null +++ b/qa/qa/page/project/wiki/show.rb @@ -0,0 +1,19 @@ +module QA + module Page + module Project + module Wiki + class Show < Page::Base + include Page::Shared::ClonePanel + + view 'app/views/projects/wikis/pages.html.haml' do + element :clone_repository_link, 'Clone repository' + end + + def go_to_clone_repository + click_on 'Clone repository' + end + end + end + end + end +end diff --git a/qa/qa/page/shared/clone_panel.rb b/qa/qa/page/shared/clone_panel.rb new file mode 100644 index 00000000000..73e3dff956d --- /dev/null +++ b/qa/qa/page/shared/clone_panel.rb @@ -0,0 +1,50 @@ +module QA + module Page + module Shared + module ClonePanel + def self.included(base) + base.view 'app/views/shared/_clone_panel.html.haml' do + element :clone_dropdown + element :clone_options_dropdown, '.clone-options-dropdown' + element :project_repository_location, 'text_field_tag :project_clone' + end + end + + def choose_repository_clone_http + choose_repository_clone('HTTP', 'http') + end + + def choose_repository_clone_ssh + # It's not always beginning with ssh:// so detecting with @ + # would be more reliable because ssh would always contain it. + # We can't use .git because HTTP also contain that part. + choose_repository_clone('SSH', '@') + end + + def repository_location + Git::Location.new(find('#project_clone').value) + end + + def wait_for_push + sleep 5 + refresh + end + + private + + def choose_repository_clone(kind, detect_text) + wait(reload: false) do + click_element :clone_dropdown + + page.within('.clone-options-dropdown') do + click_link(kind) + end + + # Ensure git clone textbox was updated + repository_location.git_uri.include?(detect_text) + end + end + end + end + end +end diff --git a/qa/qa/specs/features/merge_request/rebase_spec.rb b/qa/qa/specs/features/merge_request/rebase_spec.rb index 2a44d42af6f..6a0ed4592c4 100644 --- a/qa/qa/specs/features/merge_request/rebase_spec.rb +++ b/qa/qa/specs/features/merge_request/rebase_spec.rb @@ -16,7 +16,7 @@ module QA merge_request.title = 'Needs rebasing' end - Factory::Repository::Push.fabricate! do |push| + Factory::Repository::ProjectPush.fabricate! do |push| push.project = project push.file_name = "other.txt" push.file_content = "New file added!" diff --git a/qa/qa/specs/features/merge_request/squash_spec.rb b/qa/qa/specs/features/merge_request/squash_spec.rb index dbbdf852a38..b68704154cf 100644 --- a/qa/qa/specs/features/merge_request/squash_spec.rb +++ b/qa/qa/specs/features/merge_request/squash_spec.rb @@ -13,7 +13,7 @@ module QA merge_request.title = 'Squashing commits' end - Factory::Repository::Push.fabricate! do |push| + Factory::Repository::ProjectPush.fabricate! do |push| push.project = project push.commit_message = 'to be squashed' push.branch_name = merge_request.source_branch diff --git a/qa/qa/specs/features/project/activity_spec.rb b/qa/qa/specs/features/project/activity_spec.rb index ba94ce8cf28..07ac7321aa2 100644 --- a/qa/qa/specs/features/project/activity_spec.rb +++ b/qa/qa/specs/features/project/activity_spec.rb @@ -4,7 +4,7 @@ module QA Runtime::Browser.visit(:gitlab, Page::Main::Login) Page::Main::Login.act { sign_in_using_credentials } - Factory::Repository::Push.fabricate! do |push| + Factory::Repository::ProjectPush.fabricate! do |push| push.file_name = 'README.md' push.file_content = '# This is a test project' push.commit_message = 'Add README.md' diff --git a/qa/qa/specs/features/project/auto_devops_spec.rb b/qa/qa/specs/features/project/auto_devops_spec.rb index 202a847d1a5..c50a13432f5 100644 --- a/qa/qa/specs/features/project/auto_devops_spec.rb +++ b/qa/qa/specs/features/project/auto_devops_spec.rb @@ -16,7 +16,7 @@ module QA end # Create Auto Devops compatible repo - Factory::Repository::Push.fabricate! do |push| + Factory::Repository::ProjectPush.fabricate! do |push| push.project = project push.directory = Pathname .new(__dir__) diff --git a/qa/qa/specs/features/project/deploy_key_clone_spec.rb b/qa/qa/specs/features/project/deploy_key_clone_spec.rb index 46b3e38c1c5..10e4cbb6906 100644 --- a/qa/qa/specs/features/project/deploy_key_clone_spec.rb +++ b/qa/qa/specs/features/project/deploy_key_clone_spec.rb @@ -75,7 +75,7 @@ module QA - docker YAML - Factory::Repository::Push.fabricate! do |resource| + Factory::Repository::ProjectPush.fabricate! do |resource| resource.project = @project resource.file_name = '.gitlab-ci.yml' resource.commit_message = 'Add .gitlab-ci.yml' diff --git a/qa/qa/specs/features/project/pipelines_spec.rb b/qa/qa/specs/features/project/pipelines_spec.rb index 74f6474443d..bdb3d671516 100644 --- a/qa/qa/specs/features/project/pipelines_spec.rb +++ b/qa/qa/specs/features/project/pipelines_spec.rb @@ -40,7 +40,7 @@ module QA runner.tags = %w[qa test] end - Factory::Repository::Push.fabricate! do |push| + Factory::Repository::ProjectPush.fabricate! do |push| push.project = project push.file_name = '.gitlab-ci.yml' push.commit_message = 'Add .gitlab-ci.yml' diff --git a/qa/qa/specs/features/project/wikis_spec.rb b/qa/qa/specs/features/project/wikis_spec.rb new file mode 100644 index 00000000000..49290a1a896 --- /dev/null +++ b/qa/qa/specs/features/project/wikis_spec.rb @@ -0,0 +1,45 @@ +module QA + feature 'Wiki Functionality', :core do + def login + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.act { sign_in_using_credentials } + end + + def validate_content(content) + expect(page).to have_content('Wiki was successfully updated') + expect(page).to have_content(/#{content}/) + end + + before do + login + end + + scenario 'User creates, edits, clones, and pushes to the wiki' do + wiki = Factory::Resource::Wiki.fabricate! do |resource| + resource.title = 'Home' + resource.content = '# My First Wiki Content' + resource.message = 'Update home' + end + + validate_content('My First Wiki Content') + + Page::Project::Wiki::Edit.act { go_to_edit_page } + Page::Project::Wiki::New.perform do |page| + page.set_content("My Second Wiki Content") + page.save_changes + end + + validate_content('My Second Wiki Content') + + Factory::Repository::WikiPush.fabricate! do |push| + push.wiki = wiki + push.file_name = 'Home.md' + push.file_content = '# My Third Wiki Content' + push.commit_message = 'Update Home.md' + end + Page::Menu::Side.act { click_wiki } + + expect(page).to have_content('My Third Wiki Content') + end + end +end diff --git a/qa/qa/specs/features/repository/protected_branches_spec.rb b/qa/qa/specs/features/repository/protected_branches_spec.rb index 491675875b9..ec3802e7a76 100644 --- a/qa/qa/specs/features/repository/protected_branches_spec.rb +++ b/qa/qa/specs/features/repository/protected_branches_spec.rb @@ -56,7 +56,7 @@ module QA end def push_new_file(branch) - Factory::Repository::Push.fabricate! do |resource| + Factory::Repository::ProjectPush.fabricate! do |resource| resource.project = project resource.file_name = 'new_file.md' resource.file_content = '# This is a new file' diff --git a/qa/qa/specs/features/repository/push_spec.rb b/qa/qa/specs/features/repository/push_spec.rb index 51d9c2c7fd2..16aaa2e6762 100644 --- a/qa/qa/specs/features/repository/push_spec.rb +++ b/qa/qa/specs/features/repository/push_spec.rb @@ -5,7 +5,7 @@ module QA Runtime::Browser.visit(:gitlab, Page::Main::Login) Page::Main::Login.act { sign_in_using_credentials } - Factory::Repository::Push.fabricate! do |push| + Factory::Repository::ProjectPush.fabricate! do |push| push.file_name = 'README.md' push.file_content = '# This is a test project' push.commit_message = 'Add README.md' -- cgit v1.2.1 From 7d91984ced810a3fb4e11416c057012fbae687ce Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Tue, 19 Jun 2018 12:32:01 -0700 Subject: Avoid N+1 queries while processing uploads --- lib/gitlab/verify/uploads.rb | 2 +- spec/lib/gitlab/verify/uploads_spec.rb | 45 ++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/lib/gitlab/verify/uploads.rb b/lib/gitlab/verify/uploads.rb index 01f09ab8df7..73fc43cb590 100644 --- a/lib/gitlab/verify/uploads.rb +++ b/lib/gitlab/verify/uploads.rb @@ -12,7 +12,7 @@ module Gitlab private def all_relation - Upload.all + Upload.all.preload(:model) end def local?(upload) diff --git a/spec/lib/gitlab/verify/uploads_spec.rb b/spec/lib/gitlab/verify/uploads_spec.rb index 296866d3319..38c30fab1ba 100644 --- a/spec/lib/gitlab/verify/uploads_spec.rb +++ b/spec/lib/gitlab/verify/uploads_spec.rb @@ -47,20 +47,49 @@ describe Gitlab::Verify::Uploads do before do stub_uploads_object_storage(AvatarUploader) upload.update!(store: ObjectStorage::Store::REMOTE) - expect(CarrierWave::Storage::Fog::File).to receive(:new).and_return(file) end - it 'passes uploads in object storage that exist' do - expect(file).to receive(:exists?).and_return(true) + describe 'returned hash object' do + before do + expect(CarrierWave::Storage::Fog::File).to receive(:new).and_return(file) + end - expect(failures).to eq({}) + it 'passes uploads in object storage that exist' do + expect(file).to receive(:exists?).and_return(true) + + expect(failures).to eq({}) + end + + it 'fails uploads in object storage that do not exist' do + expect(file).to receive(:exists?).and_return(false) + + expect(failures.keys).to contain_exactly(upload) + expect(failure).to include('Remote object does not exist') + end end - it 'fails uploads in object storage that do not exist' do - expect(file).to receive(:exists?).and_return(false) + describe 'performance' do + before do + allow(file).to receive(:exists?) + allow(CarrierWave::Storage::Fog::File).to receive(:new).and_return(file) + end + + it "avoids N+1 queries" do + control_count = ActiveRecord::QueryRecorder.new { perform_task } + + # Create additional uploads in object storage + projects = create_list(:project, 3, :with_avatar) + uploads = projects.flat_map(&:uploads) + uploads.each do |upload| + upload.update!(store: ObjectStorage::Store::REMOTE) + end + + expect { perform_task }.not_to exceed_query_limit(control_count) + end - expect(failures.keys).to contain_exactly(upload) - expect(failure).to include('Remote object does not exist') + def perform_task + described_class.new(batch_size: 100).run_batches { } + end end end end -- cgit v1.2.1 From ba56b3447098890d313f943781b5413c566e14cd Mon Sep 17 00:00:00 2001 From: Michael Kozono Date: Tue, 19 Jun 2018 16:27:07 -0700 Subject: Fix documentation code blocks --- doc/development/query_recorder.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/development/query_recorder.md b/doc/development/query_recorder.md index 61e5e1afede..2167ed57428 100644 --- a/doc/development/query_recorder.md +++ b/doc/development/query_recorder.md @@ -28,6 +28,7 @@ By default, QueryRecorder will ignore cached queries in the count. However, it m all queries to avoid introducing an N+1 query that may be masked by the statement cache. To do this, pass the `skip_cached` variable to `QueryRecorder` and use the `exceed_all_query_limit` matcher: +``` it "avoids N+1 database queries" do control_count = ActiveRecord::QueryRecorder.new(skip_cached: false) { visit_some_page }.count create_list(:issue, 5) -- cgit v1.2.1 From 2c15890edcf6b292e52e6fcbf6d2d1a7ef0aabe0 Mon Sep 17 00:00:00 2001 From: Jasper Maes Date: Wed, 20 Jun 2018 19:36:15 +0200 Subject: Rails 5 fix Capybara::ElementNotFound: Unable to find visible css #modal-revert-commit and expected: "/bar" got: "/foo" --- changelogs/unreleased/rails5-fix-48140.yml | 6 ++++++ spec/features/profiles/account_spec.rb | 2 ++ .../projects/merge_requests/user_reverts_merge_request_spec.rb | 2 ++ 3 files changed, 10 insertions(+) create mode 100644 changelogs/unreleased/rails5-fix-48140.yml diff --git a/changelogs/unreleased/rails5-fix-48140.yml b/changelogs/unreleased/rails5-fix-48140.yml new file mode 100644 index 00000000000..a6992803e5a --- /dev/null +++ b/changelogs/unreleased/rails5-fix-48140.yml @@ -0,0 +1,6 @@ +--- +title: 'Rails 5 fix Capybara::ElementNotFound: Unable to find visible css #modal-revert-commit + and expected: "/bar" got: "/foo"' +merge_request: 20044 +author: Jasper Maes +type: fixed diff --git a/spec/features/profiles/account_spec.rb b/spec/features/profiles/account_spec.rb index 215b658eb7b..95947d2f111 100644 --- a/spec/features/profiles/account_spec.rb +++ b/spec/features/profiles/account_spec.rb @@ -67,4 +67,6 @@ def update_username(new_username) page.within('.modal') do find('.js-modal-primary-action').click end + + wait_for_requests end diff --git a/spec/features/projects/merge_requests/user_reverts_merge_request_spec.rb b/spec/features/projects/merge_requests/user_reverts_merge_request_spec.rb index f3e97bc9eb2..67b6aefb2d8 100644 --- a/spec/features/projects/merge_requests/user_reverts_merge_request_spec.rb +++ b/spec/features/projects/merge_requests/user_reverts_merge_request_spec.rb @@ -13,6 +13,8 @@ describe 'User reverts a merge request', :js do click_button('Merge') + wait_for_requests + visit(merge_request_path(merge_request)) end -- cgit v1.2.1 From dc90eaf17ce98b3430fbc174e3704aca802209f5 Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Wed, 20 Jun 2018 19:55:59 +0000 Subject: Fix a couple Vuex typos --- doc/development/fe_guide/vuex.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/development/fe_guide/vuex.md b/doc/development/fe_guide/vuex.md index 858b03c60bf..4089cd37d73 100644 --- a/doc/development/fe_guide/vuex.md +++ b/doc/development/fe_guide/vuex.md @@ -78,7 +78,7 @@ In this file, we will write the actions that will call the respective mutations: ```javascript import * as types from './mutation_types'; - import axios from '~/lib/utils/axios-utils'; + import axios from '~/lib/utils/axios_utils'; import createFlash from '~/flash'; export const requestUsers = ({ commit }) => commit(types.REQUEST_USERS); @@ -214,7 +214,7 @@ import { mapGetters } from 'vuex'; }; ``` -### `mutations_types.js` +### `mutation_types.js` From [vuex mutations docs][vuex-mutations]: > It is a commonly seen pattern to use constants for mutation types in various Flux implementations. This allows the code to take advantage of tooling like linters, and putting all constants in a single file allows your collaborators to get an at-a-glance view of what mutations are possible in the entire application. -- cgit v1.2.1 From f87e702eceed58d9aacc1f6667c0c95a21c23a5c Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 20 Jun 2018 15:08:11 -0500 Subject: CE-EE parity for lib/gitlab/git/gitlab_projects.rb --- lib/gitlab/git/gitlab_projects.rb | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/gitlab/git/gitlab_projects.rb b/lib/gitlab/git/gitlab_projects.rb index 8475645971e..5ff15a787f0 100644 --- a/lib/gitlab/git/gitlab_projects.rb +++ b/lib/gitlab/git/gitlab_projects.rb @@ -61,22 +61,15 @@ module Gitlab end def fetch_remote(name, timeout, force:, tags:, ssh_key: nil, known_hosts: nil, prune: true) - tags_option = tags ? '--tags' : '--no-tags' - logger.info "Fetching remote #{name} for repository #{repository_absolute_path}." - cmd = %W(#{Gitlab.config.git.bin_path} fetch #{name} --quiet) - cmd << '--prune' if prune - cmd << '--force' if force - cmd << tags_option + cmd = fetch_remote_command(name, tags, prune, force) setup_ssh_auth(ssh_key, known_hosts) do |env| - success = run_with_timeout(cmd, timeout, repository_absolute_path, env) - - unless success - logger.error "Fetching remote #{name} for repository #{repository_absolute_path} failed." + run_with_timeout(cmd, timeout, repository_absolute_path, env).tap do |success| + unless success + logger.error "Fetching remote #{name} for repository #{repository_absolute_path} failed." + end end - - success end end @@ -202,6 +195,14 @@ module Gitlab private + def fetch_remote_command(name, tags, prune, force) + %W(#{Gitlab.config.git.bin_path} fetch #{name} --quiet).tap do |cmd| + cmd << '--prune' if prune + cmd << '--force' if force + cmd << (tags ? '--tags' : '--no-tags') + end + end + def git_import_repository(source, timeout) # Skip import if repo already exists return false if File.exist?(repository_absolute_path) -- cgit v1.2.1 From 119f89260c6bb4dc121f67731beb10d1f666d818 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Wed, 20 Jun 2018 22:09:23 +0200 Subject: Don't generate `.mo` files Since we are only using `.po` files for translation we can shave off some setup time. Generating the `mo` files also regenerates the PO-files, including fuzzy translations. Those cause a lot of bugs, and we don't need them anymore since the `po` files are generated by an external translation service. --- changelogs/unreleased/bvl-dont-generate-mo.yml | 5 +++++ lib/tasks/gettext.rake | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/bvl-dont-generate-mo.yml diff --git a/changelogs/unreleased/bvl-dont-generate-mo.yml b/changelogs/unreleased/bvl-dont-generate-mo.yml new file mode 100644 index 00000000000..19b8e873849 --- /dev/null +++ b/changelogs/unreleased/bvl-dont-generate-mo.yml @@ -0,0 +1,5 @@ +--- +title: Fix invalid fuzzy translations being generated during installation +merge_request: 20048 +author: +type: fixed diff --git a/lib/tasks/gettext.rake b/lib/tasks/gettext.rake index d7c40cb6a12..3fb399497ba 100644 --- a/lib/tasks/gettext.rake +++ b/lib/tasks/gettext.rake @@ -16,7 +16,6 @@ namespace :gettext do # See: https://gitlab.com/gitlab-org/gitlab-ce/issues/33014#note_31218998 FileUtils.touch(File.join(Rails.root, 'locale/gitlab.pot')) - Rake::Task['gettext:pack'].invoke Rake::Task['gettext:po_to_json'].invoke end -- cgit v1.2.1 From 8af62a64c4e7cae9d62e13e1c026948f02675bfa Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Wed, 20 Jun 2018 14:18:45 -0700 Subject: Fall back to the first sign-in tab if the local storage value is bad If `current_signin_tab` is `#crowd`, then no tab will be active. Fix this by using the first available tab. Relates to https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20049#note_82996324 --- .../pages/sessions/new/signin_tabs_memoizer.js | 5 +++++ spec/javascripts/signin_tabs_memoizer_spec.js | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/assets/javascripts/pages/sessions/new/signin_tabs_memoizer.js b/app/assets/javascripts/pages/sessions/new/signin_tabs_memoizer.js index d321892d2d2..1e7c29aefaa 100644 --- a/app/assets/javascripts/pages/sessions/new/signin_tabs_memoizer.js +++ b/app/assets/javascripts/pages/sessions/new/signin_tabs_memoizer.js @@ -37,6 +37,11 @@ export default class SigninTabsMemoizer { const tab = document.querySelector(`${this.tabSelector} a[href="${anchorName}"]`); if (tab) { tab.click(); + } else { + const firstTab = document.querySelector(`${this.tabSelector} a`); + if (firstTab) { + firstTab.click(); + } } } } diff --git a/spec/javascripts/signin_tabs_memoizer_spec.js b/spec/javascripts/signin_tabs_memoizer_spec.js index 423432c9e5d..9d3905fa1d8 100644 --- a/spec/javascripts/signin_tabs_memoizer_spec.js +++ b/spec/javascripts/signin_tabs_memoizer_spec.js @@ -45,6 +45,21 @@ import SigninTabsMemoizer from '~/pages/sessions/new/signin_tabs_memoizer'; expect(fakeTab.click).toHaveBeenCalled(); }); + it('clicks the first tab if value in local storage is bad', () => { + createMemoizer().saveData('#bogus'); + const fakeTab = { + click: () => {}, + }; + spyOn(document, 'querySelector').and.callFake(selector => (selector === `${tabSelector} a[href="#bogus"]` ? null : fakeTab)); + spyOn(fakeTab, 'click'); + + memo.bootstrap(); + + // verify that triggers click on stored selector and fallback + expect(document.querySelector.calls.allArgs()).toEqual([['ul.new-session-tabs a[href="#bogus"]'], ['ul.new-session-tabs a']]); + expect(fakeTab.click).toHaveBeenCalled(); + }); + it('saves last selected tab on change', () => { createMemoizer(); -- cgit v1.2.1 From b56b1009b7a0833c1021c718e996d2ae3e73672a Mon Sep 17 00:00:00 2001 From: blackst0ne Date: Thu, 21 Jun 2018 09:15:26 +1100 Subject: [Rails5] Fix ActionCable's mount_path configuration The original MR [1] fixed red specs for Rails 5. But while the failed specs were fixed, that changes brought new failed specs which weren't caught up in [1]. This commit just fixes the fix. :) New errors are like these: ``` Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: keep-alive, HTTP_UPGRADE: ) Finished "/-/boards/1/lists"[non-WebSocket] for 127.0.0.1 at 2018-06-20 18:09:26 +0200 ``` [1]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20015 --- config/application.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/application.rb b/config/application.rb index 385eb65e7f4..202e5d5e327 100644 --- a/config/application.rb +++ b/config/application.rb @@ -62,7 +62,7 @@ module Gitlab # namespaces/users. # https://github.com/rails/rails/blob/5-0-stable/actioncable/lib/action_cable.rb#L38 # Please change this value when configuring ActionCable for real usage. - config.action_cable.mount_path = "-" if rails5? + config.action_cable.mount_path = "/-/cable" if rails5? # Configure sensitive parameters which will be filtered from the log file. # -- cgit v1.2.1 From d81c045310e802b9dcf2bd0a8cc19c5b2be3820d Mon Sep 17 00:00:00 2001 From: Filipa Lacerda Date: Thu, 21 Jun 2018 08:41:45 +0100 Subject: Update CHANGELOG.md for 11.0.0 [ci skip] --- CHANGELOG.md | 240 +++++++++++++++++++++ .../18524-fix-double-brackets-in-wiki-markdown.yml | 5 - ...d-api-render-an-arbitrary-markdown-document.yml | 5 - .../unreleased/22647-width-contributors-graphs.yml | 5 - ...email-address-change-before-email-confirmed.yml | 6 - changelogs/unreleased/23465-print-markdown.yml | 5 - .../25045-add-variables-to-post-pipeline-api.yml | 5 - changelogs/unreleased/25955-update-404-pages.yml | 5 - .../unreleased/36862-subgroup-milestones.yml | 5 - ...-application-control-panel-in-settings-page.yml | 5 - ...s-directly-from-gke-when-creating-a-cluster.yml | 5 - changelogs/unreleased/38919-wiki-empty-states.yml | 5 - ...el-list-page-redesign-with-draggable-labels.yml | 5 - .../39584-nesting-depth-5-pages-pipelines.yml | 5 - .../39710-search-placeholder-cut-off.yml | 5 - .../40725-move-mr-external-link-to-right.yml | 5 - ...remove_authentication_in_readonly_issue_api.yml | 5 - .../41587-osw-mr-metrics-migration-cleanup.yml | 5 - changelogs/unreleased/42531-open-invite-404.yml | 5 - .../42751-rename-master-to-maintainer.yml | 5 - .../unreleased/42751-rename-mr-maintainer-push.yml | 5 - .../unreleased/43367-fix-board-long-strings.yml | 5 - .../unreleased/43597-new-navigation-themes.yml | 5 - changelogs/unreleased/43673-operations-tab-mvc.yml | 5 - changelogs/unreleased/44184-issues_ical_feed.yml | 5 - .../unreleased/44267-improve-failed-jobs-tab.yml | 5 - .../unreleased/44319-remove-gray-buttons.yml | 5 - .../44579-ide-add-pipeline-to-status-bar.yml | 5 - .../unreleased/44790-disabled-emails-logging.yml | 5 - .../unreleased/44799-api-naming-issue-scope.yml | 5 - .../unreleased/45065-users-projects-json-sort.yml | 5 - .../unreleased/45190-create-notes-diff-files.yml | 5 - ...ve-gemnasium-badge-from-project-s-readme-md.yml | 5 - ...2-updates-updated-at-to-issue-on-time-spent.yml | 5 - .../45505-lograge_formatter_encoding.yml | 6 - .../unreleased/45520-remove-links-from-web-ide.yml | 5 - ...add-nip-io-domain-suggestion-in-auto-devops.yml | 5 - ...45702-fix-hashed-storage-repository-archive.yml | 5 - changelogs/unreleased/45715-remove-modal-retry.yml | 5 - changelogs/unreleased/45820-add-xcode-link.yml | 5 - changelogs/unreleased/45821-avatar_api.yml | 5 - .../45827-expose_readme_url_in_project_api.yml | 5 - .../45850-close-mr-checkout-modal-on-escape.yml | 5 - .../45934-ide-firefox-scroll-md-preview.yml | 5 - .../unreleased/46010-add-index-to-runner-type.yml | 5 - .../unreleased/46019-add-missing-migration.yml | 5 - ...ide-deploy-token-when-autodevops-is-enabled.yml | 5 - ...nner-contacted_at-is-not-always-a-time-type.yml | 5 - changelogs/unreleased/46193-fix-big-estimate.yml | 5 - .../46354-deprecate_gemnasium_service.yml | 5 - ...mpts-when-the-database-is-in-read-only-mode.yml | 5 - .../46427-add-keyboard-shortcut-environments.yml | 5 - .../46427-add-keyboard-shortcut-kubernetes.yml | 5 - ...7-change-keyboard-shortcut-of-activity-feed.yml | 5 - .../46427-remove-outdated-todos-shortcut.yml | 5 - ...ed-method-previous_changes-for-nil-nilclass.yml | 5 - .../unreleased/46478-update-updated-at-on-mr.yml | 5 - ...upport-for-jupyter-in-gitlab-via-kubernetes.yml | 5 - ...fixes-redundant-message-for-failure-reasons.yml | 5 - .../unreleased/46585-gdpr-terms-acceptance.yml | 6 - .../46648-timeout-searching-group-issues.yml | 5 - .../46844-update-awesome_print-to-1-8-0.yml | 5 - .../46845-update-email_spec-to-2-2-0.yml | 5 - .../46846-update-redis-namespace-to-1-6-0.yml | 5 - .../unreleased/46849-update-rdoc-to-6-0-4.yml | 5 - ...mitted-params-filtering-on-merge-scheduling.yml | 5 - .../46922-hashed-storage-single-project.yml | 5 - .../46999-line-profiling-modal-width.yml | 5 - .../unreleased/47046-use-sortable-from-npm.yml | 5 - .../47113-modal-header-styling-is-broken.yml | 5 - ...47182-use-the-default-strings-of-timeago-js.yml | 5 - .../47183-update-selenium-webdriver-to-3-12-0.yml | 5 - .../unreleased/47189-github_import_visibility.yml | 6 - .../47208-human-import-status-name-not-working.yml | 5 - ...adsworker-is-doing-n-1-queries-on-migration.yml | 5 - ...-key-is-incorrect-for-non-mounted-uploaders.yml | 5 - .../47604-avatars-and-system-icons-for-mobile.yml | 5 - changelogs/unreleased/47646-ui-glitch.yml | 5 - .../47672-set_inline_content_type_for_ics.yml | 5 - .../unreleased/47679-fix-failed-jobs-tab-ie11.yml | 5 - .../unreleased/47871-new-mr-tab-active-state.yml | 5 - ...b-35364-throttle-updates-last-repository-at.yml | 5 - .../unreleased/ab-43706-composite-primary-keys.yml | 5 - ...emove-double-checked-internal-id-generation.yml | 5 - .../ab-46530-mediumtext-for-gpg-keys.yml | 5 - .../unreleased/add-artifacts_expire_at-to-api.yml | 5 - ...add-background-migration-to-fill-file-store.yml | 5 - ...ckground-migrations-for-not-archived-traces.yml | 5 - ...ch-for-using-stream-upload-with-carrierwave.yml | 5 - .../add-new-arg-to-git-rev-list-call.yml | 5 - .../unreleased/blackst0ne-remove-spinach.yml | 5 - ...replace-spinach-project-deploy-keys-feature.yml | 5 - ...e-spinach-project-ff-merge-requests-feature.yml | 5 - ...inach-project-forked-merge-requests-feature.yml | 5 - ...e-spinach-project-issues-references-feature.yml | 5 - ...h-project-merge-requests-references-feature.yml | 5 - ...ackst0ne-squash-and-merge-in-gitlab-core-ce.yml | 5 - changelogs/unreleased/bootstrap-changelog.yml | 5 - .../unreleased/bump-kubeclient-version-3-1-0.yml | 5 - .../bvl-add-username-to-terms-message.yml | 5 - .../unreleased/bvl-bump-gitlab-shell-7-1-3.yml | 5 - changelogs/unreleased/bvl-graphql-start-34754.yml | 5 - .../unreleased/bvl-terms-on-registration.yml | 5 - .../unreleased/ccr-incoming-email-regex-anchor.yml | 3 - .../unreleased/collapsed-contextual-nav-update.yml | 6 - .../unreleased/commit-branch-tag-icon-update.yml | 5 - .../create-live-trace-only-if-job-is-complete.yml | 5 - .../unreleased/dm-api-projects-members-preload.yml | 6 - ...docs-42067-document-runner-registration-api.yml | 5 - changelogs/unreleased/dz-add-2fa-filter.yml | 5 - .../unreleased/dz-redesign-group-settings-page.yml | 5 - .../unreleased/feature-customizable-favicon.yml | 5 - .../unreleased/feature-expose-runner-ip-to-api.yml | 5 - .../feature-gb-add-regexp-variables-expression.yml | 5 - changelogs/unreleased/fix-assignee-name-wrap.yml | 5 - changelogs/unreleased/fix-avatars-n-plus-one.yml | 5 - .../unreleased/fix-bitbucket_import_anonymous.yml | 5 - changelogs/unreleased/fix-devops-remove-beta.yml | 5 - ...e-persisted-variables-from-environment-name.yml | 5 - ...not-allow-to-trigger-skipped-manual-actions.yml | 5 - changelogs/unreleased/fix-http-proxy.yml | 5 - changelogs/unreleased/fix-missing-timeout.yml | 5 - .../fix-nbsp-after-sign-in-with-google.yml | 5 - .../unreleased/fix-reactive-cache-retry-rate.yml | 5 - .../unreleased/fix-registry-created-at-tooltip.yml | 5 - changelogs/unreleased/fix-shorcut-modal.yml | 5 - .../unreleased/fix-unverified-hover-state.yml | 5 - .../fj-34526-enabling-wiki-search-by-title.yml | 5 - changelogs/unreleased/fj-36819-remove-v3-api.yml | 5 - .../fj-40401-support-import-lfs-objects.yml | 5 - .../fj-45059-add-validation-to-webhook.yml | 5 - ...-badge-api-endpoint-route-with-relative-url.yml | 5 - .../fj-46459-fix-expose-url-when-base-url-set.yml | 5 - .../fj-relax-url-validator-rules-for-user.yml | 5 - .../unreleased/fj-restore-users-v3-endpoint.yml | 5 - changelogs/unreleased/gh-importer-transactions.yml | 5 - .../groups-controller-show-performance.yml | 5 - .../ide-hide-merge-request-if-disabled.yml | 5 - .../unreleased/ide-url-util-relative-url-fix.yml | 6 - ...ignore-writing-trace-if-it-already-archived.yml | 5 - .../introduce-job-keep-alive-api-endpoint.yml | 5 - changelogs/unreleased/issue-25256.yml | 5 - changelogs/unreleased/issue_38418.yml | 5 - changelogs/unreleased/issue_44230.yml | 5 - changelogs/unreleased/issue_45082.yml | 5 - .../unreleased/jivl-add-dot-system-notes.yml | 5 - .../unreleased/jivl-smarter-system-notes.yml | 5 - changelogs/unreleased/jprovazn-fix-resolvable.yml | 5 - changelogs/unreleased/jprovazn-null-byte.yml | 5 - changelogs/unreleased/jprovazn-pipeline-policy.yml | 6 - .../unreleased/jprovazn-remote-upload-destroy.yml | 5 - .../unreleased/jprovazn-uploader-migration.yml | 5 - changelogs/unreleased/jr-web-ide-shortcuts.yml | 5 - .../unreleased/live-trace-v2-persist-data.yml | 5 - changelogs/unreleased/mattermost-api-v4.yml | 5 - .../unreleased/migrate-restore-repo-to-gitaly.yml | 5 - .../move-disussion-actions-to-the-right.yml | 5 - changelogs/unreleased/mr-conflict-notification.yml | 5 - .../n-plus-one-notification-recipients.yml | 5 - changelogs/unreleased/new-label-spelling-error.yml | 5 - .../unreleased/optimise-pages-service-calling.yml | 5 - changelogs/unreleased/optimise-paused-runners.yml | 5 - .../optimise-runner-update-cached-info.yml | 5 - ...gnore-diff-header-when-persisting-diff-hunk.yml | 5 - changelogs/unreleased/patch-28.yml | 5 - changelogs/unreleased/per-project-pipeline-iid.yml | 5 - .../unreleased/pipelines-index-performance.yml | 5 - .../unreleased/presigned-multipart-uploads.yml | 5 - .../unreleased/rails5-active-sup-subscriber.yml | 5 - changelogs/unreleased/rails5-fix-46230.yml | 5 - changelogs/unreleased/rails5-fix-46236.yml | 5 - changelogs/unreleased/rails5-fix-46281.yml | 5 - changelogs/unreleased/rails5-fix-47368.yml | 6 - changelogs/unreleased/rails5-fix-47376.yml | 5 - .../rd-44364-deprecate-support-for-dsa-keys.yml | 5 - .../unreleased/reactive-caching-alive-bug.yml | 6 - ...ctor-move-squash-before-merge-vue-component.yml | 5 - ...try-ux-improvements-remove-clipboard-prefix.yml | 5 - .../unreleased/remove-unused-query-in-hooks.yml | 5 - ...ename-merge-request-widget-author-component.yml | 5 - .../unreleased/security-dm-delete-deploy-key.yml | 5 - .../security-fj-import-export-assignment.yml | 5 - ...-password-without-entering-current-password.yml | 5 - .../unreleased/sh-add-uncached-query-limiter.yml | 5 - .../unreleased/sh-batch-dependent-destroys.yml | 5 - changelogs/unreleased/sh-bump-omniauth-gitlab.yml | 5 - ...e-and-not-null-project-ids-project-features.yml | 5 - .../sh-expire-content-cache-after-import.yml | 5 - .../unreleased/sh-fix-admin-page-counts-take-2.yml | 5 - .../sh-fix-backup-specific-rake-task.yml | 5 - .../sh-fix-cross-site-origin-uploads-js.yml | 5 - changelogs/unreleased/sh-fix-events-nplus-one.yml | 5 - .../sh-fix-grape-logging-status-code.yml | 5 - .../sh-fix-issue-api-perf-n-plus-one.yml | 5 - .../unreleased/sh-fix-pipeline-jobs-nplus-one.yml | 5 - .../unreleased/sh-fix-secrets-not-working.yml | 5 - .../unreleased/sh-fix-source-project-nplus-one.yml | 5 - .../unreleased/sh-improve-import-status-error.yml | 5 - changelogs/unreleased/sh-log-422-responses.yml | 6 - .../unreleased/sh-move-delete-groups-api-async.yml | 5 - .../unreleased/sh-tag-queue-duration-api-calls.yml | 5 - .../unreleased/sh-use-grape-path-helpers.yml | 5 - changelogs/unreleased/sql-buckets.yml | 5 - ...t-active-setting-while-registering-a-runner.yml | 5 - .../update-help-integration-screenshot.yml | 5 - changelogs/unreleased/update-wiki-modal.yml | 5 - ...-insensitive-ordering-for-dashboard-filters.yml | 5 - changelogs/unreleased/winh-make-it-right-now.yml | 5 - changelogs/unreleased/zj-add-branch-mandatory.yml | 5 - .../unreleased/zj-calculate-checksum-mandator.yml | 5 - .../unreleased/zj-ref-contains-sha-mandatory.yml | 5 - .../unreleased/zj-wiki-find-file-opt-out.yml | 5 - .../unreleased/zj-workhorse-archive-mandatory.yml | 5 - .../unreleased/zj-workhorse-commit-patch-diff.yml | 5 - 214 files changed, 240 insertions(+), 1074 deletions(-) delete mode 100644 changelogs/unreleased/18524-fix-double-brackets-in-wiki-markdown.yml delete mode 100644 changelogs/unreleased/19861-expand-api-render-an-arbitrary-markdown-document.yml delete mode 100644 changelogs/unreleased/22647-width-contributors-graphs.yml delete mode 100644 changelogs/unreleased/22846-notifications-broken-during-email-address-change-before-email-confirmed.yml delete mode 100644 changelogs/unreleased/23465-print-markdown.yml delete mode 100644 changelogs/unreleased/25045-add-variables-to-post-pipeline-api.yml delete mode 100644 changelogs/unreleased/25955-update-404-pages.yml delete mode 100644 changelogs/unreleased/36862-subgroup-milestones.yml delete mode 100644 changelogs/unreleased/38542-application-control-panel-in-settings-page.yml delete mode 100644 changelogs/unreleased/38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster.yml delete mode 100644 changelogs/unreleased/38919-wiki-empty-states.yml delete mode 100644 changelogs/unreleased/39549-label-list-page-redesign-with-draggable-labels.yml delete mode 100644 changelogs/unreleased/39584-nesting-depth-5-pages-pipelines.yml delete mode 100644 changelogs/unreleased/39710-search-placeholder-cut-off.yml delete mode 100644 changelogs/unreleased/40725-move-mr-external-link-to-right.yml delete mode 100644 changelogs/unreleased/40855_remove_authentication_in_readonly_issue_api.yml delete mode 100644 changelogs/unreleased/41587-osw-mr-metrics-migration-cleanup.yml delete mode 100644 changelogs/unreleased/42531-open-invite-404.yml delete mode 100644 changelogs/unreleased/42751-rename-master-to-maintainer.yml delete mode 100644 changelogs/unreleased/42751-rename-mr-maintainer-push.yml delete mode 100644 changelogs/unreleased/43367-fix-board-long-strings.yml delete mode 100644 changelogs/unreleased/43597-new-navigation-themes.yml delete mode 100644 changelogs/unreleased/43673-operations-tab-mvc.yml delete mode 100644 changelogs/unreleased/44184-issues_ical_feed.yml delete mode 100644 changelogs/unreleased/44267-improve-failed-jobs-tab.yml delete mode 100644 changelogs/unreleased/44319-remove-gray-buttons.yml delete mode 100644 changelogs/unreleased/44579-ide-add-pipeline-to-status-bar.yml delete mode 100644 changelogs/unreleased/44790-disabled-emails-logging.yml delete mode 100644 changelogs/unreleased/44799-api-naming-issue-scope.yml delete mode 100644 changelogs/unreleased/45065-users-projects-json-sort.yml delete mode 100644 changelogs/unreleased/45190-create-notes-diff-files.yml delete mode 100644 changelogs/unreleased/45404-remove-gemnasium-badge-from-project-s-readme-md.yml delete mode 100644 changelogs/unreleased/45442-updates-updated-at-to-issue-on-time-spent.yml delete mode 100644 changelogs/unreleased/45505-lograge_formatter_encoding.yml delete mode 100644 changelogs/unreleased/45520-remove-links-from-web-ide.yml delete mode 100644 changelogs/unreleased/45584-add-nip-io-domain-suggestion-in-auto-devops.yml delete mode 100644 changelogs/unreleased/45702-fix-hashed-storage-repository-archive.yml delete mode 100644 changelogs/unreleased/45715-remove-modal-retry.yml delete mode 100644 changelogs/unreleased/45820-add-xcode-link.yml delete mode 100644 changelogs/unreleased/45821-avatar_api.yml delete mode 100644 changelogs/unreleased/45827-expose_readme_url_in_project_api.yml delete mode 100644 changelogs/unreleased/45850-close-mr-checkout-modal-on-escape.yml delete mode 100644 changelogs/unreleased/45934-ide-firefox-scroll-md-preview.yml delete mode 100644 changelogs/unreleased/46010-add-index-to-runner-type.yml delete mode 100644 changelogs/unreleased/46019-add-missing-migration.yml delete mode 100644 changelogs/unreleased/46075-automatically-provide-deploy-token-when-autodevops-is-enabled.yml delete mode 100644 changelogs/unreleased/46082-runner-contacted_at-is-not-always-a-time-type.yml delete mode 100644 changelogs/unreleased/46193-fix-big-estimate.yml delete mode 100644 changelogs/unreleased/46354-deprecate_gemnasium_service.yml delete mode 100644 changelogs/unreleased/46361-does-not-log-failed-sign-in-attempts-when-the-database-is-in-read-only-mode.yml delete mode 100644 changelogs/unreleased/46427-add-keyboard-shortcut-environments.yml delete mode 100644 changelogs/unreleased/46427-add-keyboard-shortcut-kubernetes.yml delete mode 100644 changelogs/unreleased/46427-change-keyboard-shortcut-of-activity-feed.yml delete mode 100644 changelogs/unreleased/46427-remove-outdated-todos-shortcut.yml delete mode 100644 changelogs/unreleased/46452-nomethoderror-undefined-method-previous_changes-for-nil-nilclass.yml delete mode 100644 changelogs/unreleased/46478-update-updated-at-on-mr.yml delete mode 100644 changelogs/unreleased/46487-add-support-for-jupyter-in-gitlab-via-kubernetes.yml delete mode 100644 changelogs/unreleased/46552-fixes-redundant-message-for-failure-reasons.yml delete mode 100644 changelogs/unreleased/46585-gdpr-terms-acceptance.yml delete mode 100644 changelogs/unreleased/46648-timeout-searching-group-issues.yml delete mode 100644 changelogs/unreleased/46844-update-awesome_print-to-1-8-0.yml delete mode 100644 changelogs/unreleased/46845-update-email_spec-to-2-2-0.yml delete mode 100644 changelogs/unreleased/46846-update-redis-namespace-to-1-6-0.yml delete mode 100644 changelogs/unreleased/46849-update-rdoc-to-6-0-4.yml delete mode 100644 changelogs/unreleased/46903-osw-fix-permitted-params-filtering-on-merge-scheduling.yml delete mode 100644 changelogs/unreleased/46922-hashed-storage-single-project.yml delete mode 100644 changelogs/unreleased/46999-line-profiling-modal-width.yml delete mode 100644 changelogs/unreleased/47046-use-sortable-from-npm.yml delete mode 100644 changelogs/unreleased/47113-modal-header-styling-is-broken.yml delete mode 100644 changelogs/unreleased/47182-use-the-default-strings-of-timeago-js.yml delete mode 100644 changelogs/unreleased/47183-update-selenium-webdriver-to-3-12-0.yml delete mode 100644 changelogs/unreleased/47189-github_import_visibility.yml delete mode 100644 changelogs/unreleased/47208-human-import-status-name-not-working.yml delete mode 100644 changelogs/unreleased/47408-migrateuploadsworker-is-doing-n-1-queries-on-migration.yml delete mode 100644 changelogs/unreleased/47513-upload-migration-lease-key-is-incorrect-for-non-mounted-uploaders.yml delete mode 100644 changelogs/unreleased/47604-avatars-and-system-icons-for-mobile.yml delete mode 100644 changelogs/unreleased/47646-ui-glitch.yml delete mode 100644 changelogs/unreleased/47672-set_inline_content_type_for_ics.yml delete mode 100644 changelogs/unreleased/47679-fix-failed-jobs-tab-ie11.yml delete mode 100644 changelogs/unreleased/47871-new-mr-tab-active-state.yml delete mode 100644 changelogs/unreleased/ab-35364-throttle-updates-last-repository-at.yml delete mode 100644 changelogs/unreleased/ab-43706-composite-primary-keys.yml delete mode 100644 changelogs/unreleased/ab-45389-remove-double-checked-internal-id-generation.yml delete mode 100644 changelogs/unreleased/ab-46530-mediumtext-for-gpg-keys.yml delete mode 100644 changelogs/unreleased/add-artifacts_expire_at-to-api.yml delete mode 100644 changelogs/unreleased/add-background-migration-to-fill-file-store.yml delete mode 100644 changelogs/unreleased/add-background-migrations-for-not-archived-traces.yml delete mode 100644 changelogs/unreleased/add-moneky-patch-for-using-stream-upload-with-carrierwave.yml delete mode 100644 changelogs/unreleased/add-new-arg-to-git-rev-list-call.yml delete mode 100644 changelogs/unreleased/blackst0ne-remove-spinach.yml delete mode 100644 changelogs/unreleased/blackst0ne-replace-spinach-project-deploy-keys-feature.yml delete mode 100644 changelogs/unreleased/blackst0ne-replace-spinach-project-ff-merge-requests-feature.yml delete mode 100644 changelogs/unreleased/blackst0ne-replace-spinach-project-forked-merge-requests-feature.yml delete mode 100644 changelogs/unreleased/blackst0ne-replace-spinach-project-issues-references-feature.yml delete mode 100644 changelogs/unreleased/blackst0ne-replace-spinach-project-merge-requests-references-feature.yml delete mode 100644 changelogs/unreleased/blackst0ne-squash-and-merge-in-gitlab-core-ce.yml delete mode 100644 changelogs/unreleased/bootstrap-changelog.yml delete mode 100644 changelogs/unreleased/bump-kubeclient-version-3-1-0.yml delete mode 100644 changelogs/unreleased/bvl-add-username-to-terms-message.yml delete mode 100644 changelogs/unreleased/bvl-bump-gitlab-shell-7-1-3.yml delete mode 100644 changelogs/unreleased/bvl-graphql-start-34754.yml delete mode 100644 changelogs/unreleased/bvl-terms-on-registration.yml delete mode 100644 changelogs/unreleased/ccr-incoming-email-regex-anchor.yml delete mode 100644 changelogs/unreleased/collapsed-contextual-nav-update.yml delete mode 100644 changelogs/unreleased/commit-branch-tag-icon-update.yml delete mode 100644 changelogs/unreleased/create-live-trace-only-if-job-is-complete.yml delete mode 100644 changelogs/unreleased/dm-api-projects-members-preload.yml delete mode 100644 changelogs/unreleased/docs-42067-document-runner-registration-api.yml delete mode 100644 changelogs/unreleased/dz-add-2fa-filter.yml delete mode 100644 changelogs/unreleased/dz-redesign-group-settings-page.yml delete mode 100644 changelogs/unreleased/feature-customizable-favicon.yml delete mode 100644 changelogs/unreleased/feature-expose-runner-ip-to-api.yml delete mode 100644 changelogs/unreleased/feature-gb-add-regexp-variables-expression.yml delete mode 100644 changelogs/unreleased/fix-assignee-name-wrap.yml delete mode 100644 changelogs/unreleased/fix-avatars-n-plus-one.yml delete mode 100644 changelogs/unreleased/fix-bitbucket_import_anonymous.yml delete mode 100644 changelogs/unreleased/fix-devops-remove-beta.yml delete mode 100644 changelogs/unreleased/fix-gb-exclude-persisted-variables-from-environment-name.yml delete mode 100644 changelogs/unreleased/fix-gb-not-allow-to-trigger-skipped-manual-actions.yml delete mode 100644 changelogs/unreleased/fix-http-proxy.yml delete mode 100644 changelogs/unreleased/fix-missing-timeout.yml delete mode 100644 changelogs/unreleased/fix-nbsp-after-sign-in-with-google.yml delete mode 100644 changelogs/unreleased/fix-reactive-cache-retry-rate.yml delete mode 100644 changelogs/unreleased/fix-registry-created-at-tooltip.yml delete mode 100644 changelogs/unreleased/fix-shorcut-modal.yml delete mode 100644 changelogs/unreleased/fix-unverified-hover-state.yml delete mode 100644 changelogs/unreleased/fj-34526-enabling-wiki-search-by-title.yml delete mode 100644 changelogs/unreleased/fj-36819-remove-v3-api.yml delete mode 100644 changelogs/unreleased/fj-40401-support-import-lfs-objects.yml delete mode 100644 changelogs/unreleased/fj-45059-add-validation-to-webhook.yml delete mode 100644 changelogs/unreleased/fj-46411-fix-badge-api-endpoint-route-with-relative-url.yml delete mode 100644 changelogs/unreleased/fj-46459-fix-expose-url-when-base-url-set.yml delete mode 100644 changelogs/unreleased/fj-relax-url-validator-rules-for-user.yml delete mode 100644 changelogs/unreleased/fj-restore-users-v3-endpoint.yml delete mode 100644 changelogs/unreleased/gh-importer-transactions.yml delete mode 100644 changelogs/unreleased/groups-controller-show-performance.yml delete mode 100644 changelogs/unreleased/ide-hide-merge-request-if-disabled.yml delete mode 100644 changelogs/unreleased/ide-url-util-relative-url-fix.yml delete mode 100644 changelogs/unreleased/ignore-writing-trace-if-it-already-archived.yml delete mode 100644 changelogs/unreleased/introduce-job-keep-alive-api-endpoint.yml delete mode 100644 changelogs/unreleased/issue-25256.yml delete mode 100644 changelogs/unreleased/issue_38418.yml delete mode 100644 changelogs/unreleased/issue_44230.yml delete mode 100644 changelogs/unreleased/issue_45082.yml delete mode 100644 changelogs/unreleased/jivl-add-dot-system-notes.yml delete mode 100644 changelogs/unreleased/jivl-smarter-system-notes.yml delete mode 100644 changelogs/unreleased/jprovazn-fix-resolvable.yml delete mode 100644 changelogs/unreleased/jprovazn-null-byte.yml delete mode 100644 changelogs/unreleased/jprovazn-pipeline-policy.yml delete mode 100644 changelogs/unreleased/jprovazn-remote-upload-destroy.yml delete mode 100644 changelogs/unreleased/jprovazn-uploader-migration.yml delete mode 100644 changelogs/unreleased/jr-web-ide-shortcuts.yml delete mode 100644 changelogs/unreleased/live-trace-v2-persist-data.yml delete mode 100644 changelogs/unreleased/mattermost-api-v4.yml delete mode 100644 changelogs/unreleased/migrate-restore-repo-to-gitaly.yml delete mode 100644 changelogs/unreleased/move-disussion-actions-to-the-right.yml delete mode 100644 changelogs/unreleased/mr-conflict-notification.yml delete mode 100644 changelogs/unreleased/n-plus-one-notification-recipients.yml delete mode 100644 changelogs/unreleased/new-label-spelling-error.yml delete mode 100644 changelogs/unreleased/optimise-pages-service-calling.yml delete mode 100644 changelogs/unreleased/optimise-paused-runners.yml delete mode 100644 changelogs/unreleased/optimise-runner-update-cached-info.yml delete mode 100644 changelogs/unreleased/osw-ignore-diff-header-when-persisting-diff-hunk.yml delete mode 100644 changelogs/unreleased/patch-28.yml delete mode 100644 changelogs/unreleased/per-project-pipeline-iid.yml delete mode 100644 changelogs/unreleased/pipelines-index-performance.yml delete mode 100644 changelogs/unreleased/presigned-multipart-uploads.yml delete mode 100644 changelogs/unreleased/rails5-active-sup-subscriber.yml delete mode 100644 changelogs/unreleased/rails5-fix-46230.yml delete mode 100644 changelogs/unreleased/rails5-fix-46236.yml delete mode 100644 changelogs/unreleased/rails5-fix-46281.yml delete mode 100644 changelogs/unreleased/rails5-fix-47368.yml delete mode 100644 changelogs/unreleased/rails5-fix-47376.yml delete mode 100644 changelogs/unreleased/rd-44364-deprecate-support-for-dsa-keys.yml delete mode 100644 changelogs/unreleased/reactive-caching-alive-bug.yml delete mode 100644 changelogs/unreleased/refactor-move-squash-before-merge-vue-component.yml delete mode 100644 changelogs/unreleased/registry-ux-improvements-remove-clipboard-prefix.yml delete mode 100644 changelogs/unreleased/remove-unused-query-in-hooks.yml delete mode 100644 changelogs/unreleased/rename-merge-request-widget-author-component.yml delete mode 100644 changelogs/unreleased/security-dm-delete-deploy-key.yml delete mode 100644 changelogs/unreleased/security-fj-import-export-assignment.yml delete mode 100644 changelogs/unreleased/security-users-can-update-their-password-without-entering-current-password.yml delete mode 100644 changelogs/unreleased/sh-add-uncached-query-limiter.yml delete mode 100644 changelogs/unreleased/sh-batch-dependent-destroys.yml delete mode 100644 changelogs/unreleased/sh-bump-omniauth-gitlab.yml delete mode 100644 changelogs/unreleased/sh-enforce-unique-and-not-null-project-ids-project-features.yml delete mode 100644 changelogs/unreleased/sh-expire-content-cache-after-import.yml delete mode 100644 changelogs/unreleased/sh-fix-admin-page-counts-take-2.yml delete mode 100644 changelogs/unreleased/sh-fix-backup-specific-rake-task.yml delete mode 100644 changelogs/unreleased/sh-fix-cross-site-origin-uploads-js.yml delete mode 100644 changelogs/unreleased/sh-fix-events-nplus-one.yml delete mode 100644 changelogs/unreleased/sh-fix-grape-logging-status-code.yml delete mode 100644 changelogs/unreleased/sh-fix-issue-api-perf-n-plus-one.yml delete mode 100644 changelogs/unreleased/sh-fix-pipeline-jobs-nplus-one.yml delete mode 100644 changelogs/unreleased/sh-fix-secrets-not-working.yml delete mode 100644 changelogs/unreleased/sh-fix-source-project-nplus-one.yml delete mode 100644 changelogs/unreleased/sh-improve-import-status-error.yml delete mode 100644 changelogs/unreleased/sh-log-422-responses.yml delete mode 100644 changelogs/unreleased/sh-move-delete-groups-api-async.yml delete mode 100644 changelogs/unreleased/sh-tag-queue-duration-api-calls.yml delete mode 100644 changelogs/unreleased/sh-use-grape-path-helpers.yml delete mode 100644 changelogs/unreleased/sql-buckets.yml delete mode 100644 changelogs/unreleased/support-active-setting-while-registering-a-runner.yml delete mode 100644 changelogs/unreleased/update-help-integration-screenshot.yml delete mode 100644 changelogs/unreleased/update-wiki-modal.yml delete mode 100644 changelogs/unreleased/use-case-insensitive-ordering-for-dashboard-filters.yml delete mode 100644 changelogs/unreleased/winh-make-it-right-now.yml delete mode 100644 changelogs/unreleased/zj-add-branch-mandatory.yml delete mode 100644 changelogs/unreleased/zj-calculate-checksum-mandator.yml delete mode 100644 changelogs/unreleased/zj-ref-contains-sha-mandatory.yml delete mode 100644 changelogs/unreleased/zj-wiki-find-file-opt-out.yml delete mode 100644 changelogs/unreleased/zj-workhorse-archive-mandatory.yml delete mode 100644 changelogs/unreleased/zj-workhorse-commit-patch-diff.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d843c3f318..eabacbc2e1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,246 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.0.0 (2018-06-22) + +### Security (3 changes) + +- Fix API to remove deploy key from project instead of deleting it entirely. +- Fixed bug that allowed importing arbitrary project attributes. +- Prevent user passwords from being changed without providing the previous password. + +### Removed (2 changes) + +- Removed API v3 from the codebase. !18970 +- Removes outdated `g t` shortcut for TODO in favor of `Shift+T`. !19002 + +### Fixed (69 changes, 23 of them are from the community) + +- Optimize the upload migration proces. !15947 +- Import bitbucket issues that are reported by an anonymous user. !18199 (bartl) +- Fix an issue where the notification email address would be set to an unconfirmed email address. !18474 +- Stop logging email information when emails are disabled. !18521 (Marc Shaw) +- Fix double-brackets being linkified in wiki markdown. !18524 (brewingcode) +- Use case in-sensitive ordering by name for dashboard. !18553 (@vedharish) +- Fix width of contributors graphs. !18639 (Paul Vorbach) +- Fix modal width of shorcuts help page. !18766 (Lars Greiss) +- Add missing tooltip to creation date on container registry overview. !18767 (Lars Greiss) +- Add missing migration for minimal Project build_timeout. !18775 +- Update commit status from external CI services less aggressively. !18802 +- Fix Runner contacted at tooltip cache. !18810 +- Added support for LFS Download in the importing process. !18871 +- Fix issue board bug with long strings in titles. !18924 +- Does not log failed sign-in attempts when the database is in read-only mode. !18957 +- Fixes 500 error on /estimate BIG_VALUE. !18964 (Jacopo Beschi @jacopo-beschi) +- Forbid to patch traces for finished jobs. !18969 +- Do not allow to trigger manual actions that were skipped. !18985 +- Renamed 'Overview' to 'Project' in collapsed contextual navigation at a project level. !18996 (Constance Okoghenun) +- Fixed bug where generated api urls didn't add the base url if set. !19003 +- Fixed badge api endpoint route when relative url is set. !19004 +- Fixes: Runners search input placeholder is cut off. !19015 (Jacopo Beschi @jacopo-beschi) +- Exclude CI_PIPELINE_ID from variables supported in dynamic environment name. !19032 +- Updates updated_at on label changes. !19065 (Jacopo Beschi @jacopo-beschi) +- Disallow updating job status if the job is not running. !19101 +- Fix FreeBSD can not upload artifacts due to wrong tmp path. !19148 +- Check for nil AutoDevOps when saving project CI/CD settings. !19190 +- Missing timeout value in object storage pre-authorization. !19201 +- Use strings as properties key in kubernetes service spec. !19265 (Jasper Maes) +- Fixed HTTP_PROXY environment not honored when reading remote traces. !19282 (NLR) +- Updates ReactiveCaching clear_reactive_caching method to clear both data and alive caching. !19311 +- Fixes the styling on the modal headers. !19312 (samdbeckham) +- Fixes a spelling error on the new label page. !19316 (samdbeckham) +- Rails5 fix arel from. !19340 (Jasper Maes) +- Support rails5 in postgres indexes function and fix some migrations. !19400 (Jasper Maes) +- Fix repository archive generation when hashed storage is enabled. !19441 +- Rails 5 fix unknown keywords: changes, key_id, project, gl_repository, action, secret_token, protocol. !19466 (Jasper Maes) +- Rails 5 fix glob spec. !19469 (Jasper Maes) +- Showing project import_status in a humanized form no longer gives an error. !19470 +- Make avatars/icons hidden on mobile. !19585 (Takuya Noguchi) +- Fix active tab highlight when creating new merge request. !19781 (Jan Beckmann) +- Fixes Web IDE button on merge requests when GitLab is installed with relative URL. +- Unverified hover state color changed to black. +- Fix   after sign-in with Google button. +- Don't trim incoming emails that create new issues. (Cameron Crockett) +- Wrapping problem on the issues page has been fixed. +- Fix resolvable check if note's commit could not be found. +- Fix filename matching when processing file or blob search results. +- Allow maintainers to retry pipelines on forked projects (if allowed in merge request). +- Fix deletion of Object Store uploads. +- Fix overflowing Failed Jobs table in sm viewports on IE11. +- Adjust insufficient diff hunks being persisted on NoteDiffFile. +- Render calendar feed inline when accessed from GitLab. +- Line height fixed. (Murat Dogan) +- Use upload ID for creating lease key for file uploaders. +- Use Github repo visibility during import while respecting restricted visibility levels. +- Adjust permitted params filtering on merge scheduling. +- Fix unscrollable Markdown preview of WebIDE on Firefox. +- Enforce UTF-8 encoding on user input in LogrageWithTimestamp formatter and filter out file content from logs. +- Fix project destruction failing due to idle in transaction timeouts. +- Add a unique and not null constraint on the project_features.project_id column. +- Expire Wiki content cache after importing a repository. +- Fix admin counters not working when PostgreSQL has secondaries. +- Fix backup creation and restore for specific Rake tasks. +- Fix cross-origin errors when attempting to download JavaScript attachments. +- Fix api_json.log not always reporting the right HTTP status code. +- Fix attr_encryption key settings. +- Remove gray button styles. +- Fix print styles for markdown pages. + +### Deprecated (4 changes) + +- Deprecate Gemnasium project service. !18954 +- Rephrasing Merge Request's 'allow edits from maintainer' functionality. !19061 +- Rename issue scope created-by-me to created_by_me, and assigned-to-me to assigned_to_me. !44799 +- Migrate any remaining jobs from deprecated `object_storage_upload` queue. + +### Changed (42 changes, 11 of them are from the community) + +- Add support for smarter system notes. !17164 +- Automatically accepts project/group invite by email after user signup. !17634 (Jacopo Beschi @jacopo-beschi) +- Dynamically fetch GCP cluster creation parameters. !17806 +- Label list page redesign. !18466 +- Move discussion actions to the right for small viewports. !18476 (George Tsiolis) +- Add 2FA filter to the group members page. !18483 +- made listing and showing public issue apis available without authentication. !18638 (haseebeqx) +- Refactoring UrlValidators to include url blocking. !18686 +- Removed "(Beta)" from "Auto DevOps" messages. !18759 +- Expose runner ip address to runners API. !18799 (Lars Greiss) +- Moves MR widget external link icon to the right. !18828 (Jacopo Beschi @jacopo-beschi) +- Add support for 'active' setting on Runner Registration API endpoint. !18848 +- Add dot to separate system notes content. !18864 +- Remove modalbox confirmation when retrying a pipeline. !18879 +- Remove docker pull prefix from registry clipboard feature. !18933 (Lars Greiss) +- Move project sidebar sub-entries 'Environments' and 'Kubernetes' from 'CI/CD' to a new entry 'Operations'. !18941 +- Updated icons for branch and tag names in commit details. !18953 (Constance Okoghenun) +- Expose readme url in Project API. !18960 (Imre Farkas) +- Changes keyboard shortcut of Activity feed to `g v`. !19002 +- Updated Mattermost integration to use API v4 and only allow creation of Mattermost slash commands in the current user's teams. !19043 (Harrison Healey) +- Add shortcuts to Web IDE docs and modal. !19044 +- Rename merge request widget author component. !19079 (George Tsiolis) +- Rename the Master role to Maintainer. !19080 +- Use "right now" for short time periods. !19095 +- Update 404 and 403 pages with helpful actions. !19096 +- Add username to terms message in git and API calls. !19126 +- Change the IDE file buttons for an "Open in file view" button. !19129 (Sam Beckham) +- Removes redundant script failure message from Job page. !19138 +- Add flash notice if user has already accepted terms and allow users to continue to root path. !19156 +- Redesign group settings page into expandable sections. !19184 +- Hashed Storage: migration rake task now can be executed to specific project. !19268 +- Make CI job update entrypoint to work as keep-alive endpoint. !19543 +- Avoid checking the user format in every url validation. !19575 +- Apply notification settings level of groups to all child objects. +- Support restoring repositories into gitaly. +- Bump omniauth-gitlab to 1.0.3. +- Move API group deletion to Sidekiq. +- Improve Failed Jobs tab in the Pipeline detail page. +- Add additional theme color options. +- Include milestones from parent groups when assigning a milestone to an issue or merge request. +- Restore API v3 user endpoint. +- Hide merge request option in IDE when disabled. + +### Performance (28 changes, 1 of them is from the community) + +- Add backgound migration for filling nullfied file_store columns. !18557 +- Add a cronworker to rescue stale live traces. !18680 +- Move SquashBeforeMerge vue component. !18813 (George Tsiolis) +- Add index on runner_type for ci_runners. !18897 +- Fix CarrierWave reads local files into memoery when migrates to ObjectStorage. !19102 +- Remove double-checked internal id generation. !19181 +- Throttle updates to Project#last_repository_updated_at. !19183 +- Add background migrations for archiving legacy job traces. !19194 +- Use NPM provided version of SortableJS. !19274 +- Improve performance of group issues filtering on GitLab.com. !19429 +- Improve performance of LFS integrity check. !19494 +- Fix an N+1 when loading user avatars. +- Only preload member records for the relevant projects/groups/user in projects API. +- Fix some sources of excessive query counts when calculating notification recipients. +- Optimise PagesWorker usage. +- Optimise paused runners to reduce amount of used requests. +- Update runner cached informations without performing validations. +- Improve performance of project pipelines pages. +- Persist truncated note diffs on a new table. +- Remove unused running_or_pending_build_count. +- Remove N+1 query for author in issues API. +- Eliminate N+1 queries with authors and push_data_payload in Events API. +- Eliminate cached N+1 queries for projects in Issue API. +- Eliminate N+1 queries for CI job artifacts in /api/prjoects/:id/pipelines/:pipeline_id/jobs. +- Fix N+1 with source_projects in merge requests API. +- Replace grape-route-helpers with our own grape-path-helpers. +- Move PR IO operations out of a transaction. +- Improve performance of GroupsController#show. + +### Added (25 changes, 10 of them are from the community) + +- Closes MR check out branch modal with escape. (19050) +- Allow changing the default favicon to a custom icon. !14497 (Alexis Reigel) +- Export assigned issues in iCalendar feed. !17783 (Imre Farkas) +- When MR becomes unmergeable, notify and create todo for author and merge user. !18042 +- Display help text below auto devops domain with nip.io domain name (#45561). !18496 +- Add per-project pipeline id. !18558 +- New design for wiki page deletion confirmation. !18712 (Constance Okoghenun) +- Updates updated_at on issuable when setting time spent. !18757 (Jacopo Beschi @jacopo-beschi) +- Expose artifacts_expire_at field for job entity in api. !18872 (Semyon Pupkov) +- Add support for variables expression pattern matching syntax. !18902 +- Add API endpoint to render markdown text. !18926 (@blackst0ne) +- Add `Squash and merge` to GitLab Core (CE). !18956 (@blackst0ne) +- Adds keyboard shortcut `g k` for Kubernetes on Project pages. !19002 +- Adds keyboard shortcut `g e` for Environments on Project pages. !19002 +- Setup graphql with initial project & merge request query. !19008 +- Adds JupyterHub to cluster applications. !19019 +- Added ability to search by wiki titles. !19112 +- Add Avatar API. !19121 (Imre Farkas) +- Add variables to POST api/v4/projects/:id/pipeline. !19124 (Jacopo Beschi @jacopo-beschi) +- Add deploy strategies to the Auto DevOps settings. !19172 +- Automatize Deploy Token creation for Auto Devops. !19507 +- Add anchor for incoming email regex. +- Support direct_upload with S3 Multipart uploads. +- Add Open in Xcode link for xcode repositories. +- Add pipeline status to the status bar of the Web IDE. + +### Other (40 changes, 17 of them are from the community) + +- Expand documentation for Runners API. !16484 +- Order UsersController#projects.json by updated_at. !18227 (Takuya Noguchi) +- Replace the `project/issues/references.feature` spinach test with an rspec analog. !18769 (@blackst0ne) +- Replace the `project/merge_requests/references.feature` spinach test with an rspec analog. !18794 (@blackst0ne) +- Replace the `project/deploy_keys.feature` spinach test with an rspec analog. !18796 (@blackst0ne) +- Replace the `project/ff_merge_requests.feature` spinach test with an rspec analog. !18800 (@blackst0ne) +- Apply NestingDepth (level 5) (pages/pipelines.scss). !18830 (Takuya Noguchi) +- Replace the `project/forked_merge_requests.feature` spinach test with an rspec analog. !18867 (@blackst0ne) +- Remove Spinach. !18869 (@blackst0ne) +- Add NOT NULL constraints to project_authorizations. !18980 +- Add helpful messages to empty wiki view. !19007 +- Increase text limit for GPG keys (mysql only). !19069 +- Take two for MR metrics population background migration. !19097 +- Remove Gemnasium badge from project README.md. !19136 (Takuya Noguchi) +- Update awesome_print to 1.8.0. !19163 (Takuya Noguchi) +- Update email_spec to 2.2.0. !19164 (Takuya Noguchi) +- Update redis-namespace to 1.6.0. !19166 (Takuya Noguchi) +- Update rdoc to 6.0.4. !19167 (Takuya Noguchi) +- Updates the version of kubeclient from 3.0 to 3.1.0. !19199 +- Fix UI broken in line profiling modal due to Bootstrap 4. !19253 (Takuya Noguchi) +- Add migration to disable the usage of DSA keys. !19299 +- Use the default strings of timeago.js for timeago. !19350 (Takuya Noguchi) +- Update selenium-webdriver to 3.12.0. !19351 (Takuya Noguchi) +- Include username in output when testing SSH to GitLab. !19358 +- Update screenshot in Gitlab.com integration documentation. !19433 (Tuğçe Nur Taş) +- Users can accept terms during registration. !19583 +- Fix issue count on sidebar. +- Add merge requests list endpoint for groups. +- Upgrade GitLab from Bootstrap 3 to 4. +- Make ActiveRecordSubscriber rails 5 compatible. +- Show a more helpful error for import status. +- Log response body to production_json.log when a controller responds with a 422 status. +- Log Workhorse queue duration for Grape API calls. +- Adjust SQL and transaction Prometheus buckets. +- Adding branches through the WebUI is handled by Gitaly. +- Remove shellout implementation for Repository checksums. +- Refs containting sha checks are done by Gitaly. +- Finding a wiki page is done by Gitaly by default. +- Workhorse will use Gitaly to create archives. +- Workhorse to send raw diff and patch for commits. + + ## 10.8.4 (2018-06-06) - No changes. diff --git a/changelogs/unreleased/18524-fix-double-brackets-in-wiki-markdown.yml b/changelogs/unreleased/18524-fix-double-brackets-in-wiki-markdown.yml deleted file mode 100644 index 9287243a7e3..00000000000 --- a/changelogs/unreleased/18524-fix-double-brackets-in-wiki-markdown.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix double-brackets being linkified in wiki markdown -merge_request: 18524 -author: brewingcode -type: fixed diff --git a/changelogs/unreleased/19861-expand-api-render-an-arbitrary-markdown-document.yml b/changelogs/unreleased/19861-expand-api-render-an-arbitrary-markdown-document.yml deleted file mode 100644 index a97e8a2b5cc..00000000000 --- a/changelogs/unreleased/19861-expand-api-render-an-arbitrary-markdown-document.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add API endpoint to render markdown text -merge_request: 18926 -author: "@blackst0ne" -type: added diff --git a/changelogs/unreleased/22647-width-contributors-graphs.yml b/changelogs/unreleased/22647-width-contributors-graphs.yml deleted file mode 100644 index 87be3a25d8a..00000000000 --- a/changelogs/unreleased/22647-width-contributors-graphs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix width of contributors graphs -merge_request: 18639 -author: Paul Vorbach -type: fixed diff --git a/changelogs/unreleased/22846-notifications-broken-during-email-address-change-before-email-confirmed.yml b/changelogs/unreleased/22846-notifications-broken-during-email-address-change-before-email-confirmed.yml deleted file mode 100644 index 2b4727c5f03..00000000000 --- a/changelogs/unreleased/22846-notifications-broken-during-email-address-change-before-email-confirmed.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix an issue where the notification email address would be set to an unconfirmed - email address -merge_request: 18474 -author: -type: fixed diff --git a/changelogs/unreleased/23465-print-markdown.yml b/changelogs/unreleased/23465-print-markdown.yml deleted file mode 100644 index ba950667acc..00000000000 --- a/changelogs/unreleased/23465-print-markdown.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix print styles for markdown pages -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/25045-add-variables-to-post-pipeline-api.yml b/changelogs/unreleased/25045-add-variables-to-post-pipeline-api.yml deleted file mode 100644 index 1e648b75248..00000000000 --- a/changelogs/unreleased/25045-add-variables-to-post-pipeline-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add variables to POST api/v4/projects/:id/pipeline -merge_request: 19124 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/25955-update-404-pages.yml b/changelogs/unreleased/25955-update-404-pages.yml deleted file mode 100644 index 121229a77b9..00000000000 --- a/changelogs/unreleased/25955-update-404-pages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update 404 and 403 pages with helpful actions. -merge_request: 19096 -author: -type: changed diff --git a/changelogs/unreleased/36862-subgroup-milestones.yml b/changelogs/unreleased/36862-subgroup-milestones.yml deleted file mode 100644 index 98b9dc41cb1..00000000000 --- a/changelogs/unreleased/36862-subgroup-milestones.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include milestones from parent groups when assigning a milestone to an issue or merge request -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/38542-application-control-panel-in-settings-page.yml b/changelogs/unreleased/38542-application-control-panel-in-settings-page.yml deleted file mode 100644 index 0654456ea45..00000000000 --- a/changelogs/unreleased/38542-application-control-panel-in-settings-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add deploy strategies to the Auto DevOps settings -merge_request: 19172 -author: -type: added diff --git a/changelogs/unreleased/38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster.yml b/changelogs/unreleased/38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster.yml deleted file mode 100644 index e7d0d37becd..00000000000 --- a/changelogs/unreleased/38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Dynamically fetch GCP cluster creation parameters. -merge_request: 17806 -author: -type: changed diff --git a/changelogs/unreleased/38919-wiki-empty-states.yml b/changelogs/unreleased/38919-wiki-empty-states.yml deleted file mode 100644 index 953fa29e659..00000000000 --- a/changelogs/unreleased/38919-wiki-empty-states.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add helpful messages to empty wiki view -merge_request: 19007 -author: -type: other diff --git a/changelogs/unreleased/39549-label-list-page-redesign-with-draggable-labels.yml b/changelogs/unreleased/39549-label-list-page-redesign-with-draggable-labels.yml deleted file mode 100644 index fb4fbf80575..00000000000 --- a/changelogs/unreleased/39549-label-list-page-redesign-with-draggable-labels.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Label list page redesign -merge_request: 18466 -author: -type: changed diff --git a/changelogs/unreleased/39584-nesting-depth-5-pages-pipelines.yml b/changelogs/unreleased/39584-nesting-depth-5-pages-pipelines.yml deleted file mode 100644 index 9f07fcdfa0b..00000000000 --- a/changelogs/unreleased/39584-nesting-depth-5-pages-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Apply NestingDepth (level 5) (pages/pipelines.scss) -merge_request: 18830 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/39710-search-placeholder-cut-off.yml b/changelogs/unreleased/39710-search-placeholder-cut-off.yml deleted file mode 100644 index 59290768c6a..00000000000 --- a/changelogs/unreleased/39710-search-placeholder-cut-off.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Fixes: Runners search input placeholder is cut off' -merge_request: 19015 -author: Jacopo Beschi @jacopo-beschi -type: fixed diff --git a/changelogs/unreleased/40725-move-mr-external-link-to-right.yml b/changelogs/unreleased/40725-move-mr-external-link-to-right.yml deleted file mode 100644 index e3ebeb5eb61..00000000000 --- a/changelogs/unreleased/40725-move-mr-external-link-to-right.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Moves MR widget external link icon to the right -merge_request: 18828 -author: Jacopo Beschi @jacopo-beschi -type: changed diff --git a/changelogs/unreleased/40855_remove_authentication_in_readonly_issue_api.yml b/changelogs/unreleased/40855_remove_authentication_in_readonly_issue_api.yml deleted file mode 100644 index 58686639594..00000000000 --- a/changelogs/unreleased/40855_remove_authentication_in_readonly_issue_api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: made listing and showing public issue apis available without authentication -merge_request: 18638 -author: haseebeqx -type: changed diff --git a/changelogs/unreleased/41587-osw-mr-metrics-migration-cleanup.yml b/changelogs/unreleased/41587-osw-mr-metrics-migration-cleanup.yml deleted file mode 100644 index f953d380808..00000000000 --- a/changelogs/unreleased/41587-osw-mr-metrics-migration-cleanup.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Take two for MR metrics population background migration -merge_request: 19097 -author: -type: other diff --git a/changelogs/unreleased/42531-open-invite-404.yml b/changelogs/unreleased/42531-open-invite-404.yml deleted file mode 100644 index 73729f4a929..00000000000 --- a/changelogs/unreleased/42531-open-invite-404.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Automatically accepts project/group invite by email after user signup -merge_request: 17634 -author: Jacopo Beschi @jacopo-beschi -type: changed diff --git a/changelogs/unreleased/42751-rename-master-to-maintainer.yml b/changelogs/unreleased/42751-rename-master-to-maintainer.yml deleted file mode 100644 index d7f499ecd52..00000000000 --- a/changelogs/unreleased/42751-rename-master-to-maintainer.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rename the Master role to Maintainer -merge_request: 19080 -author: -type: changed diff --git a/changelogs/unreleased/42751-rename-mr-maintainer-push.yml b/changelogs/unreleased/42751-rename-mr-maintainer-push.yml deleted file mode 100644 index aa29f6ed4b7..00000000000 --- a/changelogs/unreleased/42751-rename-mr-maintainer-push.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rephrasing Merge Request's 'allow edits from maintainer' functionality -merge_request: 19061 -author: -type: deprecated diff --git a/changelogs/unreleased/43367-fix-board-long-strings.yml b/changelogs/unreleased/43367-fix-board-long-strings.yml deleted file mode 100644 index 6228741601e..00000000000 --- a/changelogs/unreleased/43367-fix-board-long-strings.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix issue board bug with long strings in titles -merge_request: 18924 -author: -type: fixed diff --git a/changelogs/unreleased/43597-new-navigation-themes.yml b/changelogs/unreleased/43597-new-navigation-themes.yml deleted file mode 100644 index de703e46b3c..00000000000 --- a/changelogs/unreleased/43597-new-navigation-themes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add additional theme color options -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/43673-operations-tab-mvc.yml b/changelogs/unreleased/43673-operations-tab-mvc.yml deleted file mode 100644 index cd580e7a8d6..00000000000 --- a/changelogs/unreleased/43673-operations-tab-mvc.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move project sidebar sub-entries 'Environments' and 'Kubernetes' from 'CI/CD' to a new entry 'Operations' -merge_request: 18941 -author: -type: changed diff --git a/changelogs/unreleased/44184-issues_ical_feed.yml b/changelogs/unreleased/44184-issues_ical_feed.yml deleted file mode 100644 index 8151d82625a..00000000000 --- a/changelogs/unreleased/44184-issues_ical_feed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Export assigned issues in iCalendar feed -merge_request: 17783 -author: Imre Farkas -type: added diff --git a/changelogs/unreleased/44267-improve-failed-jobs-tab.yml b/changelogs/unreleased/44267-improve-failed-jobs-tab.yml deleted file mode 100644 index 9743704e23d..00000000000 --- a/changelogs/unreleased/44267-improve-failed-jobs-tab.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve Failed Jobs tab in the Pipeline detail page -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/44319-remove-gray-buttons.yml b/changelogs/unreleased/44319-remove-gray-buttons.yml deleted file mode 100644 index 9803dde8493..00000000000 --- a/changelogs/unreleased/44319-remove-gray-buttons.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove gray button styles -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/44579-ide-add-pipeline-to-status-bar.yml b/changelogs/unreleased/44579-ide-add-pipeline-to-status-bar.yml deleted file mode 100644 index 21e7c795815..00000000000 --- a/changelogs/unreleased/44579-ide-add-pipeline-to-status-bar.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add pipeline status to the status bar of the Web IDE -merge_request: -author: -type: added diff --git a/changelogs/unreleased/44790-disabled-emails-logging.yml b/changelogs/unreleased/44790-disabled-emails-logging.yml deleted file mode 100644 index 90125dc0300..00000000000 --- a/changelogs/unreleased/44790-disabled-emails-logging.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Stop logging email information when emails are disabled -merge_request: 18521 -author: Marc Shaw -type: fixed diff --git a/changelogs/unreleased/44799-api-naming-issue-scope.yml b/changelogs/unreleased/44799-api-naming-issue-scope.yml deleted file mode 100644 index 75c6ea4cd0d..00000000000 --- a/changelogs/unreleased/44799-api-naming-issue-scope.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rename issue scope created-by-me to created_by_me, and assigned-to-me to assigned_to_me -merge_request: 44799 -author: -type: deprecated diff --git a/changelogs/unreleased/45065-users-projects-json-sort.yml b/changelogs/unreleased/45065-users-projects-json-sort.yml deleted file mode 100644 index 89a1d7eb36f..00000000000 --- a/changelogs/unreleased/45065-users-projects-json-sort.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Order UsersController#projects.json by updated_at -merge_request: 18227 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/45190-create-notes-diff-files.yml b/changelogs/unreleased/45190-create-notes-diff-files.yml deleted file mode 100644 index efe322b682d..00000000000 --- a/changelogs/unreleased/45190-create-notes-diff-files.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Persist truncated note diffs on a new table -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/45404-remove-gemnasium-badge-from-project-s-readme-md.yml b/changelogs/unreleased/45404-remove-gemnasium-badge-from-project-s-readme-md.yml deleted file mode 100644 index af2cb65445c..00000000000 --- a/changelogs/unreleased/45404-remove-gemnasium-badge-from-project-s-readme-md.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove Gemnasium badge from project README.md -merge_request: 19136 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/45442-updates-updated-at-to-issue-on-time-spent.yml b/changelogs/unreleased/45442-updates-updated-at-to-issue-on-time-spent.yml deleted file mode 100644 index 0694206d4fb..00000000000 --- a/changelogs/unreleased/45442-updates-updated-at-to-issue-on-time-spent.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Updates updated_at on issuable when setting time spent -merge_request: 18757 -author: Jacopo Beschi @jacopo-beschi -type: added diff --git a/changelogs/unreleased/45505-lograge_formatter_encoding.yml b/changelogs/unreleased/45505-lograge_formatter_encoding.yml deleted file mode 100644 index 02f4c152966..00000000000 --- a/changelogs/unreleased/45505-lograge_formatter_encoding.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Enforce UTF-8 encoding on user input in LogrageWithTimestamp formatter and - filter out file content from logs -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/45520-remove-links-from-web-ide.yml b/changelogs/unreleased/45520-remove-links-from-web-ide.yml deleted file mode 100644 index 81d5c26992f..00000000000 --- a/changelogs/unreleased/45520-remove-links-from-web-ide.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change the IDE file buttons for an "Open in file view" button -merge_request: 19129 -author: Sam Beckham -type: changed diff --git a/changelogs/unreleased/45584-add-nip-io-domain-suggestion-in-auto-devops.yml b/changelogs/unreleased/45584-add-nip-io-domain-suggestion-in-auto-devops.yml deleted file mode 100644 index 31b4c29e03d..00000000000 --- a/changelogs/unreleased/45584-add-nip-io-domain-suggestion-in-auto-devops.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display help text below auto devops domain with nip.io domain name (#45561) -merge_request: 18496 -author: -type: added diff --git a/changelogs/unreleased/45702-fix-hashed-storage-repository-archive.yml b/changelogs/unreleased/45702-fix-hashed-storage-repository-archive.yml deleted file mode 100644 index 0f85ced06a9..00000000000 --- a/changelogs/unreleased/45702-fix-hashed-storage-repository-archive.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix repository archive generation when hashed storage is enabled -merge_request: 19441 -author: -type: fixed diff --git a/changelogs/unreleased/45715-remove-modal-retry.yml b/changelogs/unreleased/45715-remove-modal-retry.yml deleted file mode 100644 index 04f2ff5142e..00000000000 --- a/changelogs/unreleased/45715-remove-modal-retry.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove modalbox confirmation when retrying a pipeline -merge_request: 18879 -author: -type: changed diff --git a/changelogs/unreleased/45820-add-xcode-link.yml b/changelogs/unreleased/45820-add-xcode-link.yml deleted file mode 100644 index 9e61703ee10..00000000000 --- a/changelogs/unreleased/45820-add-xcode-link.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Open in Xcode link for xcode repositories -merge_request: -author: -type: added diff --git a/changelogs/unreleased/45821-avatar_api.yml b/changelogs/unreleased/45821-avatar_api.yml deleted file mode 100644 index e16b28c36a2..00000000000 --- a/changelogs/unreleased/45821-avatar_api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Avatar API -merge_request: 19121 -author: Imre Farkas -type: added diff --git a/changelogs/unreleased/45827-expose_readme_url_in_project_api.yml b/changelogs/unreleased/45827-expose_readme_url_in_project_api.yml deleted file mode 100644 index 7c495cf4dc0..00000000000 --- a/changelogs/unreleased/45827-expose_readme_url_in_project_api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose readme url in Project API -merge_request: 18960 -author: Imre Farkas -type: changed diff --git a/changelogs/unreleased/45850-close-mr-checkout-modal-on-escape.yml b/changelogs/unreleased/45850-close-mr-checkout-modal-on-escape.yml deleted file mode 100644 index c3955c9d8b3..00000000000 --- a/changelogs/unreleased/45850-close-mr-checkout-modal-on-escape.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Closes MR check out branch modal with escape -merge_request: Jacopo Beschi @jacopo-beschi -author: 19050 -type: added diff --git a/changelogs/unreleased/45934-ide-firefox-scroll-md-preview.yml b/changelogs/unreleased/45934-ide-firefox-scroll-md-preview.yml deleted file mode 100644 index b9e70bc5679..00000000000 --- a/changelogs/unreleased/45934-ide-firefox-scroll-md-preview.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix unscrollable Markdown preview of WebIDE on Firefox -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/46010-add-index-to-runner-type.yml b/changelogs/unreleased/46010-add-index-to-runner-type.yml deleted file mode 100644 index fb8340e37b2..00000000000 --- a/changelogs/unreleased/46010-add-index-to-runner-type.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add index on runner_type for ci_runners -merge_request: 18897 -author: -type: performance diff --git a/changelogs/unreleased/46019-add-missing-migration.yml b/changelogs/unreleased/46019-add-missing-migration.yml deleted file mode 100644 index e9c6c317de2..00000000000 --- a/changelogs/unreleased/46019-add-missing-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add missing migration for minimal Project build_timeout -merge_request: 18775 -author: -type: fixed diff --git a/changelogs/unreleased/46075-automatically-provide-deploy-token-when-autodevops-is-enabled.yml b/changelogs/unreleased/46075-automatically-provide-deploy-token-when-autodevops-is-enabled.yml deleted file mode 100644 index 6974be07716..00000000000 --- a/changelogs/unreleased/46075-automatically-provide-deploy-token-when-autodevops-is-enabled.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Automatize Deploy Token creation for Auto Devops -merge_request: 19507 -author: -type: added diff --git a/changelogs/unreleased/46082-runner-contacted_at-is-not-always-a-time-type.yml b/changelogs/unreleased/46082-runner-contacted_at-is-not-always-a-time-type.yml deleted file mode 100644 index 07f67251b24..00000000000 --- a/changelogs/unreleased/46082-runner-contacted_at-is-not-always-a-time-type.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Runner contacted at tooltip cache. -merge_request: 18810 -author: -type: fixed diff --git a/changelogs/unreleased/46193-fix-big-estimate.yml b/changelogs/unreleased/46193-fix-big-estimate.yml deleted file mode 100644 index d0da0c10033..00000000000 --- a/changelogs/unreleased/46193-fix-big-estimate.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes 500 error on /estimate BIG_VALUE -merge_request: 18964 -author: Jacopo Beschi @jacopo-beschi -type: fixed diff --git a/changelogs/unreleased/46354-deprecate_gemnasium_service.yml b/changelogs/unreleased/46354-deprecate_gemnasium_service.yml deleted file mode 100644 index c5ead45d883..00000000000 --- a/changelogs/unreleased/46354-deprecate_gemnasium_service.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Deprecate Gemnasium project service -merge_request: 18954 -author: -type: deprecated diff --git a/changelogs/unreleased/46361-does-not-log-failed-sign-in-attempts-when-the-database-is-in-read-only-mode.yml b/changelogs/unreleased/46361-does-not-log-failed-sign-in-attempts-when-the-database-is-in-read-only-mode.yml deleted file mode 100644 index e4255f11ecf..00000000000 --- a/changelogs/unreleased/46361-does-not-log-failed-sign-in-attempts-when-the-database-is-in-read-only-mode.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Does not log failed sign-in attempts when the database is in read-only mode -merge_request: 18957 -author: -type: fixed diff --git a/changelogs/unreleased/46427-add-keyboard-shortcut-environments.yml b/changelogs/unreleased/46427-add-keyboard-shortcut-environments.yml deleted file mode 100644 index 609968f3230..00000000000 --- a/changelogs/unreleased/46427-add-keyboard-shortcut-environments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds keyboard shortcut `g e` for Environments on Project pages -merge_request: 19002 -author: -type: added diff --git a/changelogs/unreleased/46427-add-keyboard-shortcut-kubernetes.yml b/changelogs/unreleased/46427-add-keyboard-shortcut-kubernetes.yml deleted file mode 100644 index 48e51b2615e..00000000000 --- a/changelogs/unreleased/46427-add-keyboard-shortcut-kubernetes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds keyboard shortcut `g k` for Kubernetes on Project pages -merge_request: 19002 -author: -type: added diff --git a/changelogs/unreleased/46427-change-keyboard-shortcut-of-activity-feed.yml b/changelogs/unreleased/46427-change-keyboard-shortcut-of-activity-feed.yml deleted file mode 100644 index 9a7cf0d6944..00000000000 --- a/changelogs/unreleased/46427-change-keyboard-shortcut-of-activity-feed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Changes keyboard shortcut of Activity feed to `g v` -merge_request: 19002 -author: -type: changed diff --git a/changelogs/unreleased/46427-remove-outdated-todos-shortcut.yml b/changelogs/unreleased/46427-remove-outdated-todos-shortcut.yml deleted file mode 100644 index f416e35030e..00000000000 --- a/changelogs/unreleased/46427-remove-outdated-todos-shortcut.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes outdated `g t` shortcut for TODO in favor of `Shift+T` -merge_request: 19002 -author: -type: removed diff --git a/changelogs/unreleased/46452-nomethoderror-undefined-method-previous_changes-for-nil-nilclass.yml b/changelogs/unreleased/46452-nomethoderror-undefined-method-previous_changes-for-nil-nilclass.yml deleted file mode 100644 index 89dee65f5a8..00000000000 --- a/changelogs/unreleased/46452-nomethoderror-undefined-method-previous_changes-for-nil-nilclass.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Check for nil AutoDevOps when saving project CI/CD settings. -merge_request: 19190 -author: -type: fixed diff --git a/changelogs/unreleased/46478-update-updated-at-on-mr.yml b/changelogs/unreleased/46478-update-updated-at-on-mr.yml deleted file mode 100644 index c58b4fc8f84..00000000000 --- a/changelogs/unreleased/46478-update-updated-at-on-mr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Updates updated_at on label changes -merge_request: 19065 -author: Jacopo Beschi @jacopo-beschi -type: fixed diff --git a/changelogs/unreleased/46487-add-support-for-jupyter-in-gitlab-via-kubernetes.yml b/changelogs/unreleased/46487-add-support-for-jupyter-in-gitlab-via-kubernetes.yml deleted file mode 100644 index 782ffd9a928..00000000000 --- a/changelogs/unreleased/46487-add-support-for-jupyter-in-gitlab-via-kubernetes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds JupyterHub to cluster applications -merge_request: 19019 -author: -type: added diff --git a/changelogs/unreleased/46552-fixes-redundant-message-for-failure-reasons.yml b/changelogs/unreleased/46552-fixes-redundant-message-for-failure-reasons.yml deleted file mode 100644 index 43427aaa242..00000000000 --- a/changelogs/unreleased/46552-fixes-redundant-message-for-failure-reasons.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes redundant script failure message from Job page -merge_request: 19138 -author: -type: changed diff --git a/changelogs/unreleased/46585-gdpr-terms-acceptance.yml b/changelogs/unreleased/46585-gdpr-terms-acceptance.yml deleted file mode 100644 index 84853846b0e..00000000000 --- a/changelogs/unreleased/46585-gdpr-terms-acceptance.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Add flash notice if user has already accepted terms and allow users to continue - to root path -merge_request: 19156 -author: -type: changed diff --git a/changelogs/unreleased/46648-timeout-searching-group-issues.yml b/changelogs/unreleased/46648-timeout-searching-group-issues.yml deleted file mode 100644 index 54401edf5cc..00000000000 --- a/changelogs/unreleased/46648-timeout-searching-group-issues.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve performance of group issues filtering on GitLab.com -merge_request: 19429 -author: -type: performance diff --git a/changelogs/unreleased/46844-update-awesome_print-to-1-8-0.yml b/changelogs/unreleased/46844-update-awesome_print-to-1-8-0.yml deleted file mode 100644 index e6dc9a6187b..00000000000 --- a/changelogs/unreleased/46844-update-awesome_print-to-1-8-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update awesome_print to 1.8.0 -merge_request: 19163 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/46845-update-email_spec-to-2-2-0.yml b/changelogs/unreleased/46845-update-email_spec-to-2-2-0.yml deleted file mode 100644 index bf501340769..00000000000 --- a/changelogs/unreleased/46845-update-email_spec-to-2-2-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update email_spec to 2.2.0 -merge_request: 19164 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/46846-update-redis-namespace-to-1-6-0.yml b/changelogs/unreleased/46846-update-redis-namespace-to-1-6-0.yml deleted file mode 100644 index 3707ad74b8f..00000000000 --- a/changelogs/unreleased/46846-update-redis-namespace-to-1-6-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update redis-namespace to 1.6.0 -merge_request: 19166 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/46849-update-rdoc-to-6-0-4.yml b/changelogs/unreleased/46849-update-rdoc-to-6-0-4.yml deleted file mode 100644 index cf0436df1a7..00000000000 --- a/changelogs/unreleased/46849-update-rdoc-to-6-0-4.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update rdoc to 6.0.4 -merge_request: 19167 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/46903-osw-fix-permitted-params-filtering-on-merge-scheduling.yml b/changelogs/unreleased/46903-osw-fix-permitted-params-filtering-on-merge-scheduling.yml deleted file mode 100644 index b3c8c8e4045..00000000000 --- a/changelogs/unreleased/46903-osw-fix-permitted-params-filtering-on-merge-scheduling.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust permitted params filtering on merge scheduling -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/46922-hashed-storage-single-project.yml b/changelogs/unreleased/46922-hashed-storage-single-project.yml deleted file mode 100644 index c293238a5a4..00000000000 --- a/changelogs/unreleased/46922-hashed-storage-single-project.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Hashed Storage: migration rake task now can be executed to specific project' -merge_request: 19268 -author: -type: changed diff --git a/changelogs/unreleased/46999-line-profiling-modal-width.yml b/changelogs/unreleased/46999-line-profiling-modal-width.yml deleted file mode 100644 index 130f50d1ec0..00000000000 --- a/changelogs/unreleased/46999-line-profiling-modal-width.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix UI broken in line profiling modal due to Bootstrap 4 -merge_request: 19253 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/47046-use-sortable-from-npm.yml b/changelogs/unreleased/47046-use-sortable-from-npm.yml deleted file mode 100644 index 35bd6f49e4b..00000000000 --- a/changelogs/unreleased/47046-use-sortable-from-npm.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use NPM provided version of SortableJS -merge_request: 19274 -author: -type: performance diff --git a/changelogs/unreleased/47113-modal-header-styling-is-broken.yml b/changelogs/unreleased/47113-modal-header-styling-is-broken.yml deleted file mode 100644 index 1c78e5d4211..00000000000 --- a/changelogs/unreleased/47113-modal-header-styling-is-broken.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes the styling on the modal headers -merge_request: 19312 -author: samdbeckham -type: fixed diff --git a/changelogs/unreleased/47182-use-the-default-strings-of-timeago-js.yml b/changelogs/unreleased/47182-use-the-default-strings-of-timeago-js.yml deleted file mode 100644 index 010b1db5aac..00000000000 --- a/changelogs/unreleased/47182-use-the-default-strings-of-timeago-js.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use the default strings of timeago.js for timeago -merge_request: 19350 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/47183-update-selenium-webdriver-to-3-12-0.yml b/changelogs/unreleased/47183-update-selenium-webdriver-to-3-12-0.yml deleted file mode 100644 index b0d51d810f2..00000000000 --- a/changelogs/unreleased/47183-update-selenium-webdriver-to-3-12-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update selenium-webdriver to 3.12.0 -merge_request: 19351 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/47189-github_import_visibility.yml b/changelogs/unreleased/47189-github_import_visibility.yml deleted file mode 100644 index a2a727a3227..00000000000 --- a/changelogs/unreleased/47189-github_import_visibility.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Use Github repo visibility during import while respecting restricted visibility - levels -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/47208-human-import-status-name-not-working.yml b/changelogs/unreleased/47208-human-import-status-name-not-working.yml deleted file mode 100644 index e1f603f988e..00000000000 --- a/changelogs/unreleased/47208-human-import-status-name-not-working.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Showing project import_status in a humanized form no longer gives an error -merge_request: 19470 -author: -type: fixed diff --git a/changelogs/unreleased/47408-migrateuploadsworker-is-doing-n-1-queries-on-migration.yml b/changelogs/unreleased/47408-migrateuploadsworker-is-doing-n-1-queries-on-migration.yml deleted file mode 100644 index c0df82f35f1..00000000000 --- a/changelogs/unreleased/47408-migrateuploadsworker-is-doing-n-1-queries-on-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Optimize the upload migration proces -merge_request: 15947 -author: -type: fixed diff --git a/changelogs/unreleased/47513-upload-migration-lease-key-is-incorrect-for-non-mounted-uploaders.yml b/changelogs/unreleased/47513-upload-migration-lease-key-is-incorrect-for-non-mounted-uploaders.yml deleted file mode 100644 index 010c4e9bce7..00000000000 --- a/changelogs/unreleased/47513-upload-migration-lease-key-is-incorrect-for-non-mounted-uploaders.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use upload ID for creating lease key for file uploaders. -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/47604-avatars-and-system-icons-for-mobile.yml b/changelogs/unreleased/47604-avatars-and-system-icons-for-mobile.yml deleted file mode 100644 index ff66385375f..00000000000 --- a/changelogs/unreleased/47604-avatars-and-system-icons-for-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make avatars/icons hidden on mobile -merge_request: 19585 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/47646-ui-glitch.yml b/changelogs/unreleased/47646-ui-glitch.yml deleted file mode 100644 index 384df4e2cc9..00000000000 --- a/changelogs/unreleased/47646-ui-glitch.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Line height fixed -merge_request: -author: Murat Dogan -type: fixed diff --git a/changelogs/unreleased/47672-set_inline_content_type_for_ics.yml b/changelogs/unreleased/47672-set_inline_content_type_for_ics.yml deleted file mode 100644 index 4bc883d41bd..00000000000 --- a/changelogs/unreleased/47672-set_inline_content_type_for_ics.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Render calendar feed inline when accessed from GitLab -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/47679-fix-failed-jobs-tab-ie11.yml b/changelogs/unreleased/47679-fix-failed-jobs-tab-ie11.yml deleted file mode 100644 index 48f3bc87eee..00000000000 --- a/changelogs/unreleased/47679-fix-failed-jobs-tab-ie11.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix overflowing Failed Jobs table in sm viewports on IE11 -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/47871-new-mr-tab-active-state.yml b/changelogs/unreleased/47871-new-mr-tab-active-state.yml deleted file mode 100644 index c3fc8672d82..00000000000 --- a/changelogs/unreleased/47871-new-mr-tab-active-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix active tab highlight when creating new merge request -merge_request: 19781 -author: Jan Beckmann -type: fixed diff --git a/changelogs/unreleased/ab-35364-throttle-updates-last-repository-at.yml b/changelogs/unreleased/ab-35364-throttle-updates-last-repository-at.yml deleted file mode 100644 index 8e468233637..00000000000 --- a/changelogs/unreleased/ab-35364-throttle-updates-last-repository-at.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Throttle updates to Project#last_repository_updated_at. -merge_request: 19183 -author: -type: performance diff --git a/changelogs/unreleased/ab-43706-composite-primary-keys.yml b/changelogs/unreleased/ab-43706-composite-primary-keys.yml deleted file mode 100644 index b17050a64c8..00000000000 --- a/changelogs/unreleased/ab-43706-composite-primary-keys.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add NOT NULL constraints to project_authorizations. -merge_request: 18980 -author: -type: other diff --git a/changelogs/unreleased/ab-45389-remove-double-checked-internal-id-generation.yml b/changelogs/unreleased/ab-45389-remove-double-checked-internal-id-generation.yml deleted file mode 100644 index d87604de0f8..00000000000 --- a/changelogs/unreleased/ab-45389-remove-double-checked-internal-id-generation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove double-checked internal id generation. -merge_request: 19181 -author: -type: performance diff --git a/changelogs/unreleased/ab-46530-mediumtext-for-gpg-keys.yml b/changelogs/unreleased/ab-46530-mediumtext-for-gpg-keys.yml deleted file mode 100644 index 88ef62ebc0e..00000000000 --- a/changelogs/unreleased/ab-46530-mediumtext-for-gpg-keys.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Increase text limit for GPG keys (mysql only). -merge_request: 19069 -author: -type: other diff --git a/changelogs/unreleased/add-artifacts_expire_at-to-api.yml b/changelogs/unreleased/add-artifacts_expire_at-to-api.yml deleted file mode 100644 index 7fe0d8b5720..00000000000 --- a/changelogs/unreleased/add-artifacts_expire_at-to-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose artifacts_expire_at field for job entity in api -merge_request: 18872 -author: Semyon Pupkov -type: added diff --git a/changelogs/unreleased/add-background-migration-to-fill-file-store.yml b/changelogs/unreleased/add-background-migration-to-fill-file-store.yml deleted file mode 100644 index ab6bde86fd4..00000000000 --- a/changelogs/unreleased/add-background-migration-to-fill-file-store.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add backgound migration for filling nullfied file_store columns -merge_request: 18557 -author: -type: performance diff --git a/changelogs/unreleased/add-background-migrations-for-not-archived-traces.yml b/changelogs/unreleased/add-background-migrations-for-not-archived-traces.yml deleted file mode 100644 index b1b23c477df..00000000000 --- a/changelogs/unreleased/add-background-migrations-for-not-archived-traces.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add background migrations for archiving legacy job traces -merge_request: 19194 -author: -type: performance diff --git a/changelogs/unreleased/add-moneky-patch-for-using-stream-upload-with-carrierwave.yml b/changelogs/unreleased/add-moneky-patch-for-using-stream-upload-with-carrierwave.yml deleted file mode 100644 index 22a2369a264..00000000000 --- a/changelogs/unreleased/add-moneky-patch-for-using-stream-upload-with-carrierwave.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix CarrierWave reads local files into memoery when migrates to ObjectStorage -merge_request: 19102 -author: -type: performance diff --git a/changelogs/unreleased/add-new-arg-to-git-rev-list-call.yml b/changelogs/unreleased/add-new-arg-to-git-rev-list-call.yml deleted file mode 100644 index 86680b6b117..00000000000 --- a/changelogs/unreleased/add-new-arg-to-git-rev-list-call.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve performance of LFS integrity check -merge_request: 19494 -author: -type: performance diff --git a/changelogs/unreleased/blackst0ne-remove-spinach.yml b/changelogs/unreleased/blackst0ne-remove-spinach.yml deleted file mode 100644 index 104da257bad..00000000000 --- a/changelogs/unreleased/blackst0ne-remove-spinach.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove Spinach -merge_request: 18869 -author: '@blackst0ne' -type: other diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-deploy-keys-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-deploy-keys-feature.yml deleted file mode 100644 index 7014de4ece7..00000000000 --- a/changelogs/unreleased/blackst0ne-replace-spinach-project-deploy-keys-feature.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Replace the `project/deploy_keys.feature` spinach test with an rspec analog' -merge_request: 18796 -author: '@blackst0ne' -type: other diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-ff-merge-requests-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-ff-merge-requests-feature.yml deleted file mode 100644 index 7802391ec64..00000000000 --- a/changelogs/unreleased/blackst0ne-replace-spinach-project-ff-merge-requests-feature.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Replace the `project/ff_merge_requests.feature` spinach test with an rspec analog' -merge_request: 18800 -author: '@blackst0ne' -type: other diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-forked-merge-requests-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-forked-merge-requests-feature.yml deleted file mode 100644 index 2ac43490c26..00000000000 --- a/changelogs/unreleased/blackst0ne-replace-spinach-project-forked-merge-requests-feature.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Replace the `project/forked_merge_requests.feature` spinach test with an rspec analog' -merge_request: 18867 -author: '@blackst0ne' -type: other diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-references-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-references-feature.yml deleted file mode 100644 index 968a937ca5a..00000000000 --- a/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-references-feature.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Replace the `project/issues/references.feature` spinach test with an rspec analog' -merge_request: 18769 -author: '@blackst0ne' -type: other diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-merge-requests-references-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-merge-requests-references-feature.yml deleted file mode 100644 index c0ba984bfdc..00000000000 --- a/changelogs/unreleased/blackst0ne-replace-spinach-project-merge-requests-references-feature.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Replace the `project/merge_requests/references.feature` spinach test with an rspec analog' -merge_request: 18794 -author: '@blackst0ne' -type: other diff --git a/changelogs/unreleased/blackst0ne-squash-and-merge-in-gitlab-core-ce.yml b/changelogs/unreleased/blackst0ne-squash-and-merge-in-gitlab-core-ce.yml deleted file mode 100644 index e603c835b5e..00000000000 --- a/changelogs/unreleased/blackst0ne-squash-and-merge-in-gitlab-core-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add `Squash and merge` to GitLab Core (CE) -merge_request: 18956 -author: "@blackst0ne" -type: added diff --git a/changelogs/unreleased/bootstrap-changelog.yml b/changelogs/unreleased/bootstrap-changelog.yml deleted file mode 100644 index fd58447769d..00000000000 --- a/changelogs/unreleased/bootstrap-changelog.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade GitLab from Bootstrap 3 to 4 -merge_request: -author: -type: other diff --git a/changelogs/unreleased/bump-kubeclient-version-3-1-0.yml b/changelogs/unreleased/bump-kubeclient-version-3-1-0.yml deleted file mode 100644 index 24f240410b0..00000000000 --- a/changelogs/unreleased/bump-kubeclient-version-3-1-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Updates the version of kubeclient from 3.0 to 3.1.0 -merge_request: 19199 -author: -type: other diff --git a/changelogs/unreleased/bvl-add-username-to-terms-message.yml b/changelogs/unreleased/bvl-add-username-to-terms-message.yml deleted file mode 100644 index b95d87e9265..00000000000 --- a/changelogs/unreleased/bvl-add-username-to-terms-message.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add username to terms message in git and API calls -merge_request: 19126 -author: -type: changed diff --git a/changelogs/unreleased/bvl-bump-gitlab-shell-7-1-3.yml b/changelogs/unreleased/bvl-bump-gitlab-shell-7-1-3.yml deleted file mode 100644 index 76bb25bc7d7..00000000000 --- a/changelogs/unreleased/bvl-bump-gitlab-shell-7-1-3.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include username in output when testing SSH to GitLab -merge_request: 19358 -author: -type: other diff --git a/changelogs/unreleased/bvl-graphql-start-34754.yml b/changelogs/unreleased/bvl-graphql-start-34754.yml deleted file mode 100644 index a31f46d3a61..00000000000 --- a/changelogs/unreleased/bvl-graphql-start-34754.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Setup graphql with initial project & merge request query -merge_request: 19008 -author: -type: added diff --git a/changelogs/unreleased/bvl-terms-on-registration.yml b/changelogs/unreleased/bvl-terms-on-registration.yml deleted file mode 100644 index 3e6e499dd02..00000000000 --- a/changelogs/unreleased/bvl-terms-on-registration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Users can accept terms during registration -merge_request: 19583 -author: -type: other diff --git a/changelogs/unreleased/ccr-incoming-email-regex-anchor.yml b/changelogs/unreleased/ccr-incoming-email-regex-anchor.yml deleted file mode 100644 index a0d787e570e..00000000000 --- a/changelogs/unreleased/ccr-incoming-email-regex-anchor.yml +++ /dev/null @@ -1,3 +0,0 @@ -title: Add anchor for incoming email regex -merge_request: !18917 -type: added diff --git a/changelogs/unreleased/collapsed-contextual-nav-update.yml b/changelogs/unreleased/collapsed-contextual-nav-update.yml deleted file mode 100644 index 31a32a9e1e9..00000000000 --- a/changelogs/unreleased/collapsed-contextual-nav-update.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Renamed 'Overview' to 'Project' in collapsed contextual navigation at a project - level -merge_request: 18996 -author: Constance Okoghenun -type: fixed diff --git a/changelogs/unreleased/commit-branch-tag-icon-update.yml b/changelogs/unreleased/commit-branch-tag-icon-update.yml deleted file mode 100644 index 136b7cbf0f4..00000000000 --- a/changelogs/unreleased/commit-branch-tag-icon-update.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Updated icons for branch and tag names in commit details -merge_request: 18953 -author: Constance Okoghenun -type: changed diff --git a/changelogs/unreleased/create-live-trace-only-if-job-is-complete.yml b/changelogs/unreleased/create-live-trace-only-if-job-is-complete.yml deleted file mode 100644 index f32c70cf884..00000000000 --- a/changelogs/unreleased/create-live-trace-only-if-job-is-complete.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Forbid to patch traces for finished jobs -merge_request: 18969 -author: -type: fixed diff --git a/changelogs/unreleased/dm-api-projects-members-preload.yml b/changelogs/unreleased/dm-api-projects-members-preload.yml deleted file mode 100644 index e04e7c37d13..00000000000 --- a/changelogs/unreleased/dm-api-projects-members-preload.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Only preload member records for the relevant projects/groups/user in projects - API -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/docs-42067-document-runner-registration-api.yml b/changelogs/unreleased/docs-42067-document-runner-registration-api.yml deleted file mode 100644 index 6b507174044..00000000000 --- a/changelogs/unreleased/docs-42067-document-runner-registration-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expand documentation for Runners API -merge_request: 16484 -author: -type: other diff --git a/changelogs/unreleased/dz-add-2fa-filter.yml b/changelogs/unreleased/dz-add-2fa-filter.yml deleted file mode 100644 index 82d501d6604..00000000000 --- a/changelogs/unreleased/dz-add-2fa-filter.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add 2FA filter to the group members page -merge_request: 18483 -author: -type: changed diff --git a/changelogs/unreleased/dz-redesign-group-settings-page.yml b/changelogs/unreleased/dz-redesign-group-settings-page.yml deleted file mode 100644 index 4a8dfbb61dc..00000000000 --- a/changelogs/unreleased/dz-redesign-group-settings-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Redesign group settings page into expandable sections -merge_request: 19184 -author: -type: changed diff --git a/changelogs/unreleased/feature-customizable-favicon.yml b/changelogs/unreleased/feature-customizable-favicon.yml deleted file mode 100644 index 0e5afc17c9e..00000000000 --- a/changelogs/unreleased/feature-customizable-favicon.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow changing the default favicon to a custom icon. -merge_request: 14497 -author: Alexis Reigel -type: added diff --git a/changelogs/unreleased/feature-expose-runner-ip-to-api.yml b/changelogs/unreleased/feature-expose-runner-ip-to-api.yml deleted file mode 100644 index e755cf5f2d4..00000000000 --- a/changelogs/unreleased/feature-expose-runner-ip-to-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose runner ip address to runners API -merge_request: 18799 -author: Lars Greiss -type: changed diff --git a/changelogs/unreleased/feature-gb-add-regexp-variables-expression.yml b/changelogs/unreleased/feature-gb-add-regexp-variables-expression.yml deleted file mode 100644 index d77c5b42497..00000000000 --- a/changelogs/unreleased/feature-gb-add-regexp-variables-expression.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for variables expression pattern matching syntax -merge_request: 18902 -author: -type: added diff --git a/changelogs/unreleased/fix-assignee-name-wrap.yml b/changelogs/unreleased/fix-assignee-name-wrap.yml deleted file mode 100644 index 2407288785f..00000000000 --- a/changelogs/unreleased/fix-assignee-name-wrap.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Wrapping problem on the issues page has been fixed -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-avatars-n-plus-one.yml b/changelogs/unreleased/fix-avatars-n-plus-one.yml deleted file mode 100644 index c5b42071f2b..00000000000 --- a/changelogs/unreleased/fix-avatars-n-plus-one.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix an N+1 when loading user avatars -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/fix-bitbucket_import_anonymous.yml b/changelogs/unreleased/fix-bitbucket_import_anonymous.yml deleted file mode 100644 index 6e214b3c957..00000000000 --- a/changelogs/unreleased/fix-bitbucket_import_anonymous.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Import bitbucket issues that are reported by an anonymous user -merge_request: 18199 -author: bartl -type: fixed diff --git a/changelogs/unreleased/fix-devops-remove-beta.yml b/changelogs/unreleased/fix-devops-remove-beta.yml deleted file mode 100644 index 326003eb956..00000000000 --- a/changelogs/unreleased/fix-devops-remove-beta.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removed "(Beta)" from "Auto DevOps" messages -merge_request: 18759 -author: -type: changed diff --git a/changelogs/unreleased/fix-gb-exclude-persisted-variables-from-environment-name.yml b/changelogs/unreleased/fix-gb-exclude-persisted-variables-from-environment-name.yml deleted file mode 100644 index 92426832f30..00000000000 --- a/changelogs/unreleased/fix-gb-exclude-persisted-variables-from-environment-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Exclude CI_PIPELINE_ID from variables supported in dynamic environment name -merge_request: 19032 -author: -type: fixed diff --git a/changelogs/unreleased/fix-gb-not-allow-to-trigger-skipped-manual-actions.yml b/changelogs/unreleased/fix-gb-not-allow-to-trigger-skipped-manual-actions.yml deleted file mode 100644 index c2a788d6ad0..00000000000 --- a/changelogs/unreleased/fix-gb-not-allow-to-trigger-skipped-manual-actions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not allow to trigger manual actions that were skipped -merge_request: 18985 -author: -type: fixed diff --git a/changelogs/unreleased/fix-http-proxy.yml b/changelogs/unreleased/fix-http-proxy.yml deleted file mode 100644 index 806b7d0a38c..00000000000 --- a/changelogs/unreleased/fix-http-proxy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed HTTP_PROXY environment not honored when reading remote traces. -merge_request: 19282 -author: NLR -type: fixed diff --git a/changelogs/unreleased/fix-missing-timeout.yml b/changelogs/unreleased/fix-missing-timeout.yml deleted file mode 100644 index e0a61eb866c..00000000000 --- a/changelogs/unreleased/fix-missing-timeout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Missing timeout value in object storage pre-authorization -merge_request: 19201 -author: -type: fixed diff --git a/changelogs/unreleased/fix-nbsp-after-sign-in-with-google.yml b/changelogs/unreleased/fix-nbsp-after-sign-in-with-google.yml deleted file mode 100644 index 73b478eff3e..00000000000 --- a/changelogs/unreleased/fix-nbsp-after-sign-in-with-google.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix   after sign-in with Google button -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-reactive-cache-retry-rate.yml b/changelogs/unreleased/fix-reactive-cache-retry-rate.yml deleted file mode 100644 index 044e7fe39c0..00000000000 --- a/changelogs/unreleased/fix-reactive-cache-retry-rate.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update commit status from external CI services less aggressively -merge_request: 18802 -author: -type: fixed diff --git a/changelogs/unreleased/fix-registry-created-at-tooltip.yml b/changelogs/unreleased/fix-registry-created-at-tooltip.yml deleted file mode 100644 index 911b3b10fd4..00000000000 --- a/changelogs/unreleased/fix-registry-created-at-tooltip.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Add missing tooltip to creation date on container registry overview' -merge_request: 18767 -author: Lars Greiss -type: fixed diff --git a/changelogs/unreleased/fix-shorcut-modal.yml b/changelogs/unreleased/fix-shorcut-modal.yml deleted file mode 100644 index 796a1523a61..00000000000 --- a/changelogs/unreleased/fix-shorcut-modal.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix modal width of shorcuts help page -merge_request: 18766 -author: Lars Greiss -type: fixed diff --git a/changelogs/unreleased/fix-unverified-hover-state.yml b/changelogs/unreleased/fix-unverified-hover-state.yml deleted file mode 100644 index 003138f9821..00000000000 --- a/changelogs/unreleased/fix-unverified-hover-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Unverified hover state color changed to black -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fj-34526-enabling-wiki-search-by-title.yml b/changelogs/unreleased/fj-34526-enabling-wiki-search-by-title.yml deleted file mode 100644 index 2ae2cf8a23e..00000000000 --- a/changelogs/unreleased/fj-34526-enabling-wiki-search-by-title.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added ability to search by wiki titles -merge_request: 19112 -author: -type: added diff --git a/changelogs/unreleased/fj-36819-remove-v3-api.yml b/changelogs/unreleased/fj-36819-remove-v3-api.yml deleted file mode 100644 index e5355252458..00000000000 --- a/changelogs/unreleased/fj-36819-remove-v3-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removed API v3 from the codebase -merge_request: 18970 -author: -type: removed diff --git a/changelogs/unreleased/fj-40401-support-import-lfs-objects.yml b/changelogs/unreleased/fj-40401-support-import-lfs-objects.yml deleted file mode 100644 index a8abdd943ba..00000000000 --- a/changelogs/unreleased/fj-40401-support-import-lfs-objects.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added support for LFS Download in the importing process -merge_request: 18871 -author: -type: fixed diff --git a/changelogs/unreleased/fj-45059-add-validation-to-webhook.yml b/changelogs/unreleased/fj-45059-add-validation-to-webhook.yml deleted file mode 100644 index e9350cc7e7e..00000000000 --- a/changelogs/unreleased/fj-45059-add-validation-to-webhook.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refactoring UrlValidators to include url blocking -merge_request: 18686 -author: -type: changed diff --git a/changelogs/unreleased/fj-46411-fix-badge-api-endpoint-route-with-relative-url.yml b/changelogs/unreleased/fj-46411-fix-badge-api-endpoint-route-with-relative-url.yml deleted file mode 100644 index bd4e5a43352..00000000000 --- a/changelogs/unreleased/fj-46411-fix-badge-api-endpoint-route-with-relative-url.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed badge api endpoint route when relative url is set -merge_request: 19004 -author: -type: fixed diff --git a/changelogs/unreleased/fj-46459-fix-expose-url-when-base-url-set.yml b/changelogs/unreleased/fj-46459-fix-expose-url-when-base-url-set.yml deleted file mode 100644 index 16b0ee06898..00000000000 --- a/changelogs/unreleased/fj-46459-fix-expose-url-when-base-url-set.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed bug where generated api urls didn't add the base url if set -merge_request: 19003 -author: -type: fixed diff --git a/changelogs/unreleased/fj-relax-url-validator-rules-for-user.yml b/changelogs/unreleased/fj-relax-url-validator-rules-for-user.yml deleted file mode 100644 index 4c72e4c5c1c..00000000000 --- a/changelogs/unreleased/fj-relax-url-validator-rules-for-user.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid checking the user format in every url validation -merge_request: 19575 -author: -type: changed diff --git a/changelogs/unreleased/fj-restore-users-v3-endpoint.yml b/changelogs/unreleased/fj-restore-users-v3-endpoint.yml deleted file mode 100644 index c5f952dfa88..00000000000 --- a/changelogs/unreleased/fj-restore-users-v3-endpoint.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Restore API v3 user endpoint -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/gh-importer-transactions.yml b/changelogs/unreleased/gh-importer-transactions.yml deleted file mode 100644 index 1489d60a3fb..00000000000 --- a/changelogs/unreleased/gh-importer-transactions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move PR IO operations out of a transaction -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/groups-controller-show-performance.yml b/changelogs/unreleased/groups-controller-show-performance.yml deleted file mode 100644 index bab54cc455e..00000000000 --- a/changelogs/unreleased/groups-controller-show-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve performance of GroupsController#show -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/ide-hide-merge-request-if-disabled.yml b/changelogs/unreleased/ide-hide-merge-request-if-disabled.yml deleted file mode 100644 index 9efef2c6839..00000000000 --- a/changelogs/unreleased/ide-hide-merge-request-if-disabled.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide merge request option in IDE when disabled -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/ide-url-util-relative-url-fix.yml b/changelogs/unreleased/ide-url-util-relative-url-fix.yml deleted file mode 100644 index 9f0f4a0f7be..00000000000 --- a/changelogs/unreleased/ide-url-util-relative-url-fix.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fixes Web IDE button on merge requests when GitLab is installed with relative - URL -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/ignore-writing-trace-if-it-already-archived.yml b/changelogs/unreleased/ignore-writing-trace-if-it-already-archived.yml deleted file mode 100644 index 5c342e2a131..00000000000 --- a/changelogs/unreleased/ignore-writing-trace-if-it-already-archived.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disallow updating job status if the job is not running -merge_request: 19101 -author: -type: fixed diff --git a/changelogs/unreleased/introduce-job-keep-alive-api-endpoint.yml b/changelogs/unreleased/introduce-job-keep-alive-api-endpoint.yml deleted file mode 100644 index 0789fc34f27..00000000000 --- a/changelogs/unreleased/introduce-job-keep-alive-api-endpoint.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make CI job update entrypoint to work as keep-alive endpoint -merge_request: 19543 -author: -type: changed diff --git a/changelogs/unreleased/issue-25256.yml b/changelogs/unreleased/issue-25256.yml deleted file mode 100644 index e981b5f9a8f..00000000000 --- a/changelogs/unreleased/issue-25256.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't trim incoming emails that create new issues -merge_request: -author: Cameron Crockett -type: fixed diff --git a/changelogs/unreleased/issue_38418.yml b/changelogs/unreleased/issue_38418.yml deleted file mode 100644 index 79452b27e4b..00000000000 --- a/changelogs/unreleased/issue_38418.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix issue count on sidebar -merge_request: -author: -type: other diff --git a/changelogs/unreleased/issue_44230.yml b/changelogs/unreleased/issue_44230.yml deleted file mode 100644 index 2c6dba6c0fb..00000000000 --- a/changelogs/unreleased/issue_44230.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Apply notification settings level of groups to all child objects -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/issue_45082.yml b/changelogs/unreleased/issue_45082.yml deleted file mode 100644 index b916a36c17b..00000000000 --- a/changelogs/unreleased/issue_45082.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add merge requests list endpoint for groups -merge_request: -author: -type: other diff --git a/changelogs/unreleased/jivl-add-dot-system-notes.yml b/changelogs/unreleased/jivl-add-dot-system-notes.yml deleted file mode 100644 index 2246bab1464..00000000000 --- a/changelogs/unreleased/jivl-add-dot-system-notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add dot to separate system notes content -merge_request: 18864 -author: -type: changed diff --git a/changelogs/unreleased/jivl-smarter-system-notes.yml b/changelogs/unreleased/jivl-smarter-system-notes.yml deleted file mode 100644 index e640981de9a..00000000000 --- a/changelogs/unreleased/jivl-smarter-system-notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for smarter system notes -merge_request: 17164 -author: -type: changed diff --git a/changelogs/unreleased/jprovazn-fix-resolvable.yml b/changelogs/unreleased/jprovazn-fix-resolvable.yml deleted file mode 100644 index e17c409e290..00000000000 --- a/changelogs/unreleased/jprovazn-fix-resolvable.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix resolvable check if note's commit could not be found. -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/jprovazn-null-byte.yml b/changelogs/unreleased/jprovazn-null-byte.yml deleted file mode 100644 index 4c4760ac412..00000000000 --- a/changelogs/unreleased/jprovazn-null-byte.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix filename matching when processing file or blob search results -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/jprovazn-pipeline-policy.yml b/changelogs/unreleased/jprovazn-pipeline-policy.yml deleted file mode 100644 index 2997c6c8667..00000000000 --- a/changelogs/unreleased/jprovazn-pipeline-policy.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Allow maintainers to retry pipelines on forked projects (if allowed in merge - request) -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/jprovazn-remote-upload-destroy.yml b/changelogs/unreleased/jprovazn-remote-upload-destroy.yml deleted file mode 100644 index 22e55920fa3..00000000000 --- a/changelogs/unreleased/jprovazn-remote-upload-destroy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix deletion of Object Store uploads -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/jprovazn-uploader-migration.yml b/changelogs/unreleased/jprovazn-uploader-migration.yml deleted file mode 100644 index 1db67e9ace2..00000000000 --- a/changelogs/unreleased/jprovazn-uploader-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Migrate any remaining jobs from deprecated `object_storage_upload` queue. -merge_request: -author: -type: deprecated diff --git a/changelogs/unreleased/jr-web-ide-shortcuts.yml b/changelogs/unreleased/jr-web-ide-shortcuts.yml deleted file mode 100644 index a895eab432a..00000000000 --- a/changelogs/unreleased/jr-web-ide-shortcuts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add shortcuts to Web IDE docs and modal -merge_request: 19044 -author: -type: changed diff --git a/changelogs/unreleased/live-trace-v2-persist-data.yml b/changelogs/unreleased/live-trace-v2-persist-data.yml deleted file mode 100644 index 3ac47b04218..00000000000 --- a/changelogs/unreleased/live-trace-v2-persist-data.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a cronworker to rescue stale live traces -merge_request: 18680 -author: -type: performance diff --git a/changelogs/unreleased/mattermost-api-v4.yml b/changelogs/unreleased/mattermost-api-v4.yml deleted file mode 100644 index 8c5033f2a0c..00000000000 --- a/changelogs/unreleased/mattermost-api-v4.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Updated Mattermost integration to use API v4 and only allow creation of Mattermost slash commands in the current user's teams -merge_request: 19043 -author: Harrison Healey -type: changed diff --git a/changelogs/unreleased/migrate-restore-repo-to-gitaly.yml b/changelogs/unreleased/migrate-restore-repo-to-gitaly.yml deleted file mode 100644 index 59f375de20e..00000000000 --- a/changelogs/unreleased/migrate-restore-repo-to-gitaly.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support restoring repositories into gitaly -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/move-disussion-actions-to-the-right.yml b/changelogs/unreleased/move-disussion-actions-to-the-right.yml deleted file mode 100644 index b79c6f36585..00000000000 --- a/changelogs/unreleased/move-disussion-actions-to-the-right.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move discussion actions to the right for small viewports -merge_request: 18476 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/mr-conflict-notification.yml b/changelogs/unreleased/mr-conflict-notification.yml deleted file mode 100644 index d3d5f1fc373..00000000000 --- a/changelogs/unreleased/mr-conflict-notification.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: When MR becomes unmergeable, notify and create todo for author and merge user -merge_request: 18042 -author: -type: added diff --git a/changelogs/unreleased/n-plus-one-notification-recipients.yml b/changelogs/unreleased/n-plus-one-notification-recipients.yml deleted file mode 100644 index 91c31e4c930..00000000000 --- a/changelogs/unreleased/n-plus-one-notification-recipients.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix some sources of excessive query counts when calculating notification recipients -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/new-label-spelling-error.yml b/changelogs/unreleased/new-label-spelling-error.yml deleted file mode 100644 index ad5f69688f3..00000000000 --- a/changelogs/unreleased/new-label-spelling-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes a spelling error on the new label page -merge_request: 19316 -author: samdbeckham -type: fixed diff --git a/changelogs/unreleased/optimise-pages-service-calling.yml b/changelogs/unreleased/optimise-pages-service-calling.yml deleted file mode 100644 index e017e6b01f1..00000000000 --- a/changelogs/unreleased/optimise-pages-service-calling.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Optimise PagesWorker usage -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/optimise-paused-runners.yml b/changelogs/unreleased/optimise-paused-runners.yml deleted file mode 100644 index 13097e507d3..00000000000 --- a/changelogs/unreleased/optimise-paused-runners.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Optimise paused runners to reduce amount of used requests -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/optimise-runner-update-cached-info.yml b/changelogs/unreleased/optimise-runner-update-cached-info.yml deleted file mode 100644 index 15fb9bcdf41..00000000000 --- a/changelogs/unreleased/optimise-runner-update-cached-info.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update runner cached informations without performing validations -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/osw-ignore-diff-header-when-persisting-diff-hunk.yml b/changelogs/unreleased/osw-ignore-diff-header-when-persisting-diff-hunk.yml deleted file mode 100644 index ef66deaa0ef..00000000000 --- a/changelogs/unreleased/osw-ignore-diff-header-when-persisting-diff-hunk.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust insufficient diff hunks being persisted on NoteDiffFile -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/patch-28.yml b/changelogs/unreleased/patch-28.yml deleted file mode 100644 index 1bbca138cae..00000000000 --- a/changelogs/unreleased/patch-28.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix FreeBSD can not upload artifacts due to wrong tmp path -merge_request: 19148 -author: -type: fixed diff --git a/changelogs/unreleased/per-project-pipeline-iid.yml b/changelogs/unreleased/per-project-pipeline-iid.yml deleted file mode 100644 index 78a513a9986..00000000000 --- a/changelogs/unreleased/per-project-pipeline-iid.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add per-project pipeline id -merge_request: 18558 -author: -type: added diff --git a/changelogs/unreleased/pipelines-index-performance.yml b/changelogs/unreleased/pipelines-index-performance.yml deleted file mode 100644 index 928c2ddab72..00000000000 --- a/changelogs/unreleased/pipelines-index-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve performance of project pipelines pages -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/presigned-multipart-uploads.yml b/changelogs/unreleased/presigned-multipart-uploads.yml deleted file mode 100644 index 52fae6534fd..00000000000 --- a/changelogs/unreleased/presigned-multipart-uploads.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support direct_upload with S3 Multipart uploads -merge_request: -author: -type: added diff --git a/changelogs/unreleased/rails5-active-sup-subscriber.yml b/changelogs/unreleased/rails5-active-sup-subscriber.yml deleted file mode 100644 index 439fa6f428e..00000000000 --- a/changelogs/unreleased/rails5-active-sup-subscriber.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make ActiveRecordSubscriber rails 5 compatible -merge_request: -author: -type: other diff --git a/changelogs/unreleased/rails5-fix-46230.yml b/changelogs/unreleased/rails5-fix-46230.yml deleted file mode 100644 index 8ec28604483..00000000000 --- a/changelogs/unreleased/rails5-fix-46230.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use strings as properties key in kubernetes service spec. -merge_request: 19265 -author: Jasper Maes -type: fixed diff --git a/changelogs/unreleased/rails5-fix-46236.yml b/changelogs/unreleased/rails5-fix-46236.yml deleted file mode 100644 index 9203b448bed..00000000000 --- a/changelogs/unreleased/rails5-fix-46236.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support rails5 in postgres indexes function and fix some migrations -merge_request: 19400 -author: Jasper Maes -type: fixed diff --git a/changelogs/unreleased/rails5-fix-46281.yml b/changelogs/unreleased/rails5-fix-46281.yml deleted file mode 100644 index ee0b8531988..00000000000 --- a/changelogs/unreleased/rails5-fix-46281.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rails5 fix arel from -merge_request: 19340 -author: Jasper Maes -type: fixed diff --git a/changelogs/unreleased/rails5-fix-47368.yml b/changelogs/unreleased/rails5-fix-47368.yml deleted file mode 100644 index 81bb1adabff..00000000000 --- a/changelogs/unreleased/rails5-fix-47368.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'Rails 5 fix unknown keywords: changes, key_id, project, gl_repository, action, - secret_token, protocol' -merge_request: 19466 -author: Jasper Maes -type: fixed diff --git a/changelogs/unreleased/rails5-fix-47376.yml b/changelogs/unreleased/rails5-fix-47376.yml deleted file mode 100644 index ac9950e908e..00000000000 --- a/changelogs/unreleased/rails5-fix-47376.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rails 5 fix glob spec -merge_request: 19469 -author: Jasper Maes -type: fixed diff --git a/changelogs/unreleased/rd-44364-deprecate-support-for-dsa-keys.yml b/changelogs/unreleased/rd-44364-deprecate-support-for-dsa-keys.yml deleted file mode 100644 index 1a52ffaaf79..00000000000 --- a/changelogs/unreleased/rd-44364-deprecate-support-for-dsa-keys.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add migration to disable the usage of DSA keys -merge_request: 19299 -author: -type: other diff --git a/changelogs/unreleased/reactive-caching-alive-bug.yml b/changelogs/unreleased/reactive-caching-alive-bug.yml deleted file mode 100644 index 2fdc3a7e7e1..00000000000 --- a/changelogs/unreleased/reactive-caching-alive-bug.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Updates ReactiveCaching clear_reactive_caching method to clear both data and - alive caching -merge_request: 19311 -author: -type: fixed diff --git a/changelogs/unreleased/refactor-move-squash-before-merge-vue-component.yml b/changelogs/unreleased/refactor-move-squash-before-merge-vue-component.yml deleted file mode 100644 index b8b2762a21d..00000000000 --- a/changelogs/unreleased/refactor-move-squash-before-merge-vue-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move SquashBeforeMerge vue component -merge_request: 18813 -author: George Tsiolis -type: performance diff --git a/changelogs/unreleased/registry-ux-improvements-remove-clipboard-prefix.yml b/changelogs/unreleased/registry-ux-improvements-remove-clipboard-prefix.yml deleted file mode 100644 index ddf7f51aa5e..00000000000 --- a/changelogs/unreleased/registry-ux-improvements-remove-clipboard-prefix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove docker pull prefix from registry clipboard feature -merge_request: 18933 -author: Lars Greiss -type: changed diff --git a/changelogs/unreleased/remove-unused-query-in-hooks.yml b/changelogs/unreleased/remove-unused-query-in-hooks.yml deleted file mode 100644 index ef40b2db5a9..00000000000 --- a/changelogs/unreleased/remove-unused-query-in-hooks.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unused running_or_pending_build_count -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/rename-merge-request-widget-author-component.yml b/changelogs/unreleased/rename-merge-request-widget-author-component.yml deleted file mode 100644 index 15e6eafd826..00000000000 --- a/changelogs/unreleased/rename-merge-request-widget-author-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rename merge request widget author component -merge_request: 19079 -author: George Tsiolis -type: changed diff --git a/changelogs/unreleased/security-dm-delete-deploy-key.yml b/changelogs/unreleased/security-dm-delete-deploy-key.yml deleted file mode 100644 index aa94e7b6072..00000000000 --- a/changelogs/unreleased/security-dm-delete-deploy-key.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix API to remove deploy key from project instead of deleting it entirely -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-fj-import-export-assignment.yml b/changelogs/unreleased/security-fj-import-export-assignment.yml deleted file mode 100644 index 4bfd71d431a..00000000000 --- a/changelogs/unreleased/security-fj-import-export-assignment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed bug that allowed importing arbitrary project attributes -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-users-can-update-their-password-without-entering-current-password.yml b/changelogs/unreleased/security-users-can-update-their-password-without-entering-current-password.yml deleted file mode 100644 index 824fbd41ab8..00000000000 --- a/changelogs/unreleased/security-users-can-update-their-password-without-entering-current-password.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent user passwords from being changed without providing the previous password -merge_request: -author: -type: security diff --git a/changelogs/unreleased/sh-add-uncached-query-limiter.yml b/changelogs/unreleased/sh-add-uncached-query-limiter.yml deleted file mode 100644 index 4318338c229..00000000000 --- a/changelogs/unreleased/sh-add-uncached-query-limiter.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove N+1 query for author in issues API -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/sh-batch-dependent-destroys.yml b/changelogs/unreleased/sh-batch-dependent-destroys.yml deleted file mode 100644 index e297badc1fa..00000000000 --- a/changelogs/unreleased/sh-batch-dependent-destroys.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix project destruction failing due to idle in transaction timeouts -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-bump-omniauth-gitlab.yml b/changelogs/unreleased/sh-bump-omniauth-gitlab.yml deleted file mode 100644 index 145fdf72020..00000000000 --- a/changelogs/unreleased/sh-bump-omniauth-gitlab.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump omniauth-gitlab to 1.0.3 -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/sh-enforce-unique-and-not-null-project-ids-project-features.yml b/changelogs/unreleased/sh-enforce-unique-and-not-null-project-ids-project-features.yml deleted file mode 100644 index aae42b66c84..00000000000 --- a/changelogs/unreleased/sh-enforce-unique-and-not-null-project-ids-project-features.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a unique and not null constraint on the project_features.project_id column -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-expire-content-cache-after-import.yml b/changelogs/unreleased/sh-expire-content-cache-after-import.yml deleted file mode 100644 index 8876a487b86..00000000000 --- a/changelogs/unreleased/sh-expire-content-cache-after-import.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expire Wiki content cache after importing a repository -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-admin-page-counts-take-2.yml b/changelogs/unreleased/sh-fix-admin-page-counts-take-2.yml deleted file mode 100644 index d9bd1af9380..00000000000 --- a/changelogs/unreleased/sh-fix-admin-page-counts-take-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix admin counters not working when PostgreSQL has secondaries -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-backup-specific-rake-task.yml b/changelogs/unreleased/sh-fix-backup-specific-rake-task.yml deleted file mode 100644 index 71b121710ee..00000000000 --- a/changelogs/unreleased/sh-fix-backup-specific-rake-task.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix backup creation and restore for specific Rake tasks -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-cross-site-origin-uploads-js.yml b/changelogs/unreleased/sh-fix-cross-site-origin-uploads-js.yml deleted file mode 100644 index 3c51aaae896..00000000000 --- a/changelogs/unreleased/sh-fix-cross-site-origin-uploads-js.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix cross-origin errors when attempting to download JavaScript attachments -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-events-nplus-one.yml b/changelogs/unreleased/sh-fix-events-nplus-one.yml deleted file mode 100644 index e5a974bef30..00000000000 --- a/changelogs/unreleased/sh-fix-events-nplus-one.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Eliminate N+1 queries with authors and push_data_payload in Events API -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/sh-fix-grape-logging-status-code.yml b/changelogs/unreleased/sh-fix-grape-logging-status-code.yml deleted file mode 100644 index aabf9a84bfb..00000000000 --- a/changelogs/unreleased/sh-fix-grape-logging-status-code.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix api_json.log not always reporting the right HTTP status code -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-issue-api-perf-n-plus-one.yml b/changelogs/unreleased/sh-fix-issue-api-perf-n-plus-one.yml deleted file mode 100644 index 57ba081326f..00000000000 --- a/changelogs/unreleased/sh-fix-issue-api-perf-n-plus-one.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Eliminate cached N+1 queries for projects in Issue API -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/sh-fix-pipeline-jobs-nplus-one.yml b/changelogs/unreleased/sh-fix-pipeline-jobs-nplus-one.yml deleted file mode 100644 index eac00f4fca6..00000000000 --- a/changelogs/unreleased/sh-fix-pipeline-jobs-nplus-one.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Eliminate N+1 queries for CI job artifacts in /api/prjoects/:id/pipelines/:pipeline_id/jobs -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/sh-fix-secrets-not-working.yml b/changelogs/unreleased/sh-fix-secrets-not-working.yml deleted file mode 100644 index 044a873ecd9..00000000000 --- a/changelogs/unreleased/sh-fix-secrets-not-working.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix attr_encryption key settings -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-source-project-nplus-one.yml b/changelogs/unreleased/sh-fix-source-project-nplus-one.yml deleted file mode 100644 index 9d78ad6408c..00000000000 --- a/changelogs/unreleased/sh-fix-source-project-nplus-one.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix N+1 with source_projects in merge requests API -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/sh-improve-import-status-error.yml b/changelogs/unreleased/sh-improve-import-status-error.yml deleted file mode 100644 index 6523280f9e6..00000000000 --- a/changelogs/unreleased/sh-improve-import-status-error.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show a more helpful error for import status -merge_request: -author: -type: other diff --git a/changelogs/unreleased/sh-log-422-responses.yml b/changelogs/unreleased/sh-log-422-responses.yml deleted file mode 100644 index c7dfdbb703b..00000000000 --- a/changelogs/unreleased/sh-log-422-responses.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Log response body to production_json.log when a controller responds with a - 422 status -merge_request: -author: -type: other diff --git a/changelogs/unreleased/sh-move-delete-groups-api-async.yml b/changelogs/unreleased/sh-move-delete-groups-api-async.yml deleted file mode 100644 index 1b200cac5c5..00000000000 --- a/changelogs/unreleased/sh-move-delete-groups-api-async.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move API group deletion to Sidekiq -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/sh-tag-queue-duration-api-calls.yml b/changelogs/unreleased/sh-tag-queue-duration-api-calls.yml deleted file mode 100644 index 686cceaab62..00000000000 --- a/changelogs/unreleased/sh-tag-queue-duration-api-calls.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Log Workhorse queue duration for Grape API calls -merge_request: -author: -type: other diff --git a/changelogs/unreleased/sh-use-grape-path-helpers.yml b/changelogs/unreleased/sh-use-grape-path-helpers.yml deleted file mode 100644 index c462c7e8194..00000000000 --- a/changelogs/unreleased/sh-use-grape-path-helpers.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Replace grape-route-helpers with our own grape-path-helpers -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/sql-buckets.yml b/changelogs/unreleased/sql-buckets.yml deleted file mode 100644 index afb13d5cb20..00000000000 --- a/changelogs/unreleased/sql-buckets.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adjust SQL and transaction Prometheus buckets -merge_request: -author: -type: other diff --git a/changelogs/unreleased/support-active-setting-while-registering-a-runner.yml b/changelogs/unreleased/support-active-setting-while-registering-a-runner.yml deleted file mode 100644 index 6c378fd450a..00000000000 --- a/changelogs/unreleased/support-active-setting-while-registering-a-runner.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add support for 'active' setting on Runner Registration API endpoint -merge_request: 18848 -author: -type: changed diff --git a/changelogs/unreleased/update-help-integration-screenshot.yml b/changelogs/unreleased/update-help-integration-screenshot.yml deleted file mode 100644 index b1f76a346e4..00000000000 --- a/changelogs/unreleased/update-help-integration-screenshot.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update screenshot in Gitlab.com integration documentation -merge_request: 19433 -author: Tuğçe Nur Taş -type: other diff --git a/changelogs/unreleased/update-wiki-modal.yml b/changelogs/unreleased/update-wiki-modal.yml deleted file mode 100644 index 00f2fc4f181..00000000000 --- a/changelogs/unreleased/update-wiki-modal.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: New design for wiki page deletion confirmation -merge_request: 18712 -author: Constance Okoghenun -type: added diff --git a/changelogs/unreleased/use-case-insensitive-ordering-for-dashboard-filters.yml b/changelogs/unreleased/use-case-insensitive-ordering-for-dashboard-filters.yml deleted file mode 100644 index 098e4b1d5fa..00000000000 --- a/changelogs/unreleased/use-case-insensitive-ordering-for-dashboard-filters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Use case in-sensitive ordering by name for dashboard" -merge_request: 18553 -author: "@vedharish" -type: fixed diff --git a/changelogs/unreleased/winh-make-it-right-now.yml b/changelogs/unreleased/winh-make-it-right-now.yml deleted file mode 100644 index 7b386c0b332..00000000000 --- a/changelogs/unreleased/winh-make-it-right-now.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use "right now" for short time periods -merge_request: 19095 -author: -type: changed diff --git a/changelogs/unreleased/zj-add-branch-mandatory.yml b/changelogs/unreleased/zj-add-branch-mandatory.yml deleted file mode 100644 index 82712ce842d..00000000000 --- a/changelogs/unreleased/zj-add-branch-mandatory.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adding branches through the WebUI is handled by Gitaly -merge_request: -author: -type: other diff --git a/changelogs/unreleased/zj-calculate-checksum-mandator.yml b/changelogs/unreleased/zj-calculate-checksum-mandator.yml deleted file mode 100644 index 83315a3c5dd..00000000000 --- a/changelogs/unreleased/zj-calculate-checksum-mandator.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove shellout implementation for Repository checksums -merge_request: -author: -type: other diff --git a/changelogs/unreleased/zj-ref-contains-sha-mandatory.yml b/changelogs/unreleased/zj-ref-contains-sha-mandatory.yml deleted file mode 100644 index 61bdce43c0e..00000000000 --- a/changelogs/unreleased/zj-ref-contains-sha-mandatory.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refs containting sha checks are done by Gitaly -merge_request: -author: -type: other diff --git a/changelogs/unreleased/zj-wiki-find-file-opt-out.yml b/changelogs/unreleased/zj-wiki-find-file-opt-out.yml deleted file mode 100644 index 5af53c56017..00000000000 --- a/changelogs/unreleased/zj-wiki-find-file-opt-out.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Finding a wiki page is done by Gitaly by default -merge_request: -author: -type: other diff --git a/changelogs/unreleased/zj-workhorse-archive-mandatory.yml b/changelogs/unreleased/zj-workhorse-archive-mandatory.yml deleted file mode 100644 index 3a4a351a2b9..00000000000 --- a/changelogs/unreleased/zj-workhorse-archive-mandatory.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Workhorse will use Gitaly to create archives -merge_request: -author: -type: other diff --git a/changelogs/unreleased/zj-workhorse-commit-patch-diff.yml b/changelogs/unreleased/zj-workhorse-commit-patch-diff.yml deleted file mode 100644 index bce68692d98..00000000000 --- a/changelogs/unreleased/zj-workhorse-commit-patch-diff.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Workhorse to send raw diff and patch for commits -merge_request: -author: -type: other -- cgit v1.2.1 From 7c11ed8c916a10f6d9c32635986008b48410531f Mon Sep 17 00:00:00 2001 From: Filipa Lacerda Date: Thu, 21 Jun 2018 08:44:21 +0100 Subject: Update VERSION to 11.1.0-pre --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 8ca9077d87b..0116f5d2c81 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.0.0-pre +11.1.0-pre -- cgit v1.2.1 From 2ac672280b914b24acecd2d4b113dea79023a5db Mon Sep 17 00:00:00 2001 From: Zeger-Jan van de Weg Date: Thu, 21 Jun 2018 10:12:51 +0200 Subject: Raw changes calculation is Gitaly only now Closes https://gitlab.com/gitlab-org/gitaly/issues/1138 --- lib/gitlab/git/repository.rb | 23 +++---------- spec/lib/gitlab/git/repository_spec.rb | 60 ++++++++++++++-------------------- 2 files changed, 29 insertions(+), 54 deletions(-) diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index b7965315eb2..7056d9c8756 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -529,32 +529,17 @@ module Gitlab def raw_changes_between(old_rev, new_rev) @raw_changes_between ||= {} - @raw_changes_between[[old_rev, new_rev]] ||= begin - return [] if new_rev.blank? || new_rev == Gitlab::Git::BLANK_SHA + @raw_changes_between[[old_rev, new_rev]] ||= + begin + return [] if new_rev.blank? || new_rev == Gitlab::Git::BLANK_SHA - gitaly_migrate(:raw_changes_between) do |is_enabled| - if is_enabled + wrapped_gitaly_errors do gitaly_repository_client.raw_changes_between(old_rev, new_rev) .each_with_object([]) do |msg, arr| msg.raw_changes.each { |change| arr << ::Gitlab::Git::RawDiffChange.new(change) } end - else - result = [] - - circuit_breaker.perform do - Open3.pipeline_r(git_diff_cmd(old_rev, new_rev), format_git_cat_file_script, git_cat_file_cmd) do |last_stdout, wait_threads| - last_stdout.each_line { |line| result << ::Gitlab::Git::RawDiffChange.new(line.chomp!) } - - if wait_threads.any? { |waiter| !waiter.value&.success? } - raise ::Gitlab::Git::Repository::GitError, "Unabled to obtain changes between #{old_rev} and #{new_rev}" - end - end - end - - result end end - end rescue ArgumentError => e raise Gitlab::Git::Repository::GitError.new(e) end diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index 595482f76d5..45f0006dc85 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -1043,50 +1043,40 @@ describe Gitlab::Git::Repository, seed_helper: true do end describe '#raw_changes_between' do - shared_examples 'raw changes' do - let(:old_rev) { } - let(:new_rev) { } - let(:changes) { repository.raw_changes_between(old_rev, new_rev) } + let(:old_rev) { } + let(:new_rev) { } + let(:changes) { repository.raw_changes_between(old_rev, new_rev) } - context 'initial commit' do - let(:old_rev) { Gitlab::Git::BLANK_SHA } - let(:new_rev) { '1a0b36b3cdad1d2ee32457c102a8c0b7056fa863' } + context 'initial commit' do + let(:old_rev) { Gitlab::Git::BLANK_SHA } + let(:new_rev) { '1a0b36b3cdad1d2ee32457c102a8c0b7056fa863' } - it 'returns the changes' do - expect(changes).to be_present - expect(changes.size).to eq(3) - end + it 'returns the changes' do + expect(changes).to be_present + expect(changes.size).to eq(3) end + end - context 'with an invalid rev' do - let(:old_rev) { 'foo' } - let(:new_rev) { 'bar' } + context 'with an invalid rev' do + let(:old_rev) { 'foo' } + let(:new_rev) { 'bar' } - it 'returns an error' do - expect { changes }.to raise_error(Gitlab::Git::Repository::GitError) - end - end - - context 'with valid revs' do - let(:old_rev) { 'fa1b1e6c004a68b7d8763b86455da9e6b23e36d6' } - let(:new_rev) { '4b4918a572fa86f9771e5ba40fbd48e1eb03e2c6' } - - it 'returns the changes' do - expect(changes.size).to eq(9) - expect(changes.first.operation).to eq(:modified) - expect(changes.first.new_path).to eq('.gitmodules') - expect(changes.last.operation).to eq(:added) - expect(changes.last.new_path).to eq('files/lfs/picture-invalid.png') - end + it 'returns an error' do + expect { changes }.to raise_error(Gitlab::Git::Repository::GitError) end end - context 'when gitaly is enabled' do - it_behaves_like 'raw changes' - end + context 'with valid revs' do + let(:old_rev) { 'fa1b1e6c004a68b7d8763b86455da9e6b23e36d6' } + let(:new_rev) { '4b4918a572fa86f9771e5ba40fbd48e1eb03e2c6' } - context 'when gitaly is disabled', :disable_gitaly do - it_behaves_like 'raw changes' + it 'returns the changes' do + expect(changes.size).to eq(9) + expect(changes.first.operation).to eq(:modified) + expect(changes.first.new_path).to eq('.gitmodules') + expect(changes.last.operation).to eq(:added) + expect(changes.last.new_path).to eq('files/lfs/picture-invalid.png') + end end end -- cgit v1.2.1 From 562f357ba5cf59f8325a87b9fba178e4c9830ad5 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Thu, 14 Jun 2018 21:04:44 +0800 Subject: Implement `expect_next_instance_of` and use it We need this because `expect_any_instance_of` doesn't work on prepended models. Now we could use the same code between CE/EE --- spec/lib/gitlab/bitbucket_import/project_creator_spec.rb | 4 +++- spec/lib/gitlab/gitlab_import/project_creator_spec.rb | 4 +++- spec/lib/gitlab/google_code_import/project_creator_spec.rb | 4 +++- .../lib/gitlab/legacy_github_import/project_creator_spec.rb | 5 ++++- spec/spec_helper.rb | 1 + spec/support/helpers/expect_next_instance_of.rb | 13 +++++++++++++ spec/workers/update_merge_requests_worker_spec.rb | 10 +++------- 7 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 spec/support/helpers/expect_next_instance_of.rb diff --git a/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb b/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb index c3f528dd6fc..ed6fa3d229f 100644 --- a/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb +++ b/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb @@ -25,7 +25,9 @@ describe Gitlab::BitbucketImport::ProjectCreator do end it 'creates project' do - allow_any_instance_of(Project).to receive(:add_import_job) + expect_next_instance_of(Project) do |project| + expect(project).to receive(:add_import_job) + end project_creator = described_class.new(repo, 'vim', namespace, user, access_params) project = project_creator.execute diff --git a/spec/lib/gitlab/gitlab_import/project_creator_spec.rb b/spec/lib/gitlab/gitlab_import/project_creator_spec.rb index 5ea086e4abd..b814f5fc76c 100644 --- a/spec/lib/gitlab/gitlab_import/project_creator_spec.rb +++ b/spec/lib/gitlab/gitlab_import/project_creator_spec.rb @@ -21,7 +21,9 @@ describe Gitlab::GitlabImport::ProjectCreator do end it 'creates project' do - allow_any_instance_of(Project).to receive(:add_import_job) + expect_next_instance_of(Project) do |project| + expect(project).to receive(:add_import_job) + end project_creator = described_class.new(repo, namespace, user, access_params) project = project_creator.execute diff --git a/spec/lib/gitlab/google_code_import/project_creator_spec.rb b/spec/lib/gitlab/google_code_import/project_creator_spec.rb index 24cd518c77b..b959e006292 100644 --- a/spec/lib/gitlab/google_code_import/project_creator_spec.rb +++ b/spec/lib/gitlab/google_code_import/project_creator_spec.rb @@ -16,7 +16,9 @@ describe Gitlab::GoogleCodeImport::ProjectCreator do end it 'creates project' do - allow_any_instance_of(Project).to receive(:add_import_job) + expect_next_instance_of(Project) do |project| + expect(project).to receive(:add_import_job) + end project_creator = described_class.new(repo, namespace, user) project = project_creator.execute diff --git a/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb b/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb index 972b17d5b12..3d4240fa4ba 100644 --- a/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb +++ b/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb @@ -17,7 +17,10 @@ describe Gitlab::LegacyGithubImport::ProjectCreator do before do namespace.add_owner(user) - allow_any_instance_of(Project).to receive(:add_import_job) + + expect_next_instance_of(Project) do |project| + expect(project).to receive(:add_import_job) + end end describe '#execute' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index dac609e2545..fdce8e84620 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -69,6 +69,7 @@ RSpec.configure do |config| config.include StubFeatureFlags config.include StubGitlabCalls config.include StubGitlabData + config.include ExpectNextInstanceOf config.include TestEnv config.include Devise::Test::ControllerHelpers, type: :controller config.include Devise::Test::IntegrationHelpers, type: :feature diff --git a/spec/support/helpers/expect_next_instance_of.rb b/spec/support/helpers/expect_next_instance_of.rb new file mode 100644 index 00000000000..b95046b2b42 --- /dev/null +++ b/spec/support/helpers/expect_next_instance_of.rb @@ -0,0 +1,13 @@ +module ExpectNextInstanceOf + def expect_next_instance_of(klass, *new_args) + receive_new = receive(:new) + receive_new.with(*new_args) if new_args.any? + + expect(klass).to receive_new + .and_wrap_original do |method, *original_args| + method.call(*original_args).tap do |instance| + yield(instance) + end + end + end +end diff --git a/spec/workers/update_merge_requests_worker_spec.rb b/spec/workers/update_merge_requests_worker_spec.rb index 80137815d2b..0b553db0ca4 100644 --- a/spec/workers/update_merge_requests_worker_spec.rb +++ b/spec/workers/update_merge_requests_worker_spec.rb @@ -18,13 +18,9 @@ describe UpdateMergeRequestsWorker do end it 'executes MergeRequests::RefreshService with expected values' do - expect(MergeRequests::RefreshService).to receive(:new) - .with(project, user).and_wrap_original do |method, *args| - method.call(*args).tap do |refresh_service| - expect(refresh_service) - .to receive(:execute).with(oldrev, newrev, ref) - end - end + expect_next_instance_of(MergeRequests::RefreshService, project, user) do |refresh_service| + expect(refresh_service).to receive(:execute).with(oldrev, newrev, ref) + end perform end -- cgit v1.2.1 From fda4d5540e4ce2631e317c1e256c221202900555 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Wed, 20 Jun 2018 21:29:15 +0800 Subject: Add docs around expect_next_instance_of --- doc/development/gotchas.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/doc/development/gotchas.md b/doc/development/gotchas.md index 5786287d00c..d25d856c3a3 100644 --- a/doc/development/gotchas.md +++ b/doc/development/gotchas.md @@ -92,6 +92,54 @@ describe API::Labels do end ``` +## Avoid using `allow_any_instance_of` in RSpec + +### Why + +* Because it is not isolated therefore it might be broken at times. +* Because it doesn't work whenever the method we want to stub was defined + in a prepended module, which is very likely the case in EE. We could see + error like this: + + 1.1) Failure/Error: allow_any_instance_of(ApplicationSetting).to receive_messages(messages) + Using `any_instance` to stub a method (elasticsearch_indexing) that has been defined on a prepended module (EE::ApplicationSetting) is not supported. + +### Alternative: `expect_next_instance_of` + +Instead of writing: + +```ruby +# Don't do this: +allow_any_instance_of(Project).to receive(:add_import_job) +``` + +We could write: + +```ruby +# Do this: +expect_next_instance_of(Project) do |project| + expect(project).to receive(:add_import_job) +end +``` + +If we also want to expect the instance was initialized with some particular +arguments, we could also pass it to `expect_next_instance_of` like: + +```ruby +# Do this: +expect_next_instance_of(MergeRequests::RefreshService, project, user) do |refresh_service| + expect(refresh_service).to receive(:execute).with(oldrev, newrev, ref) +end +``` + +This would expect the following: + +```ruby +# Above expects: +refresh_service = MergeRequests::RefreshService.new(project, user) +refresh_service.execute(oldrev, newrev, ref) +``` + ## Do not `rescue Exception` See ["Why is it bad style to `rescue Exception => e` in Ruby?"][Exception]. -- cgit v1.2.1 From 0f5d9d22f8b0b54762b8c1f96b48c658e734be74 Mon Sep 17 00:00:00 2001 From: George Tsiolis Date: Thu, 21 Jun 2018 12:34:10 +0300 Subject: Update pipeline icon in web ide sidebar --- app/assets/javascripts/ide/components/panes/right.vue | 2 +- changelogs/unreleased/update-pipeline-icon-in-web-ide-sidebar.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/update-pipeline-icon-in-web-ide-sidebar.yml diff --git a/app/assets/javascripts/ide/components/panes/right.vue b/app/assets/javascripts/ide/components/panes/right.vue index dedc2988618..5cd2c9ce188 100644 --- a/app/assets/javascripts/ide/components/panes/right.vue +++ b/app/assets/javascripts/ide/components/panes/right.vue @@ -69,7 +69,7 @@ export default { > diff --git a/changelogs/unreleased/update-pipeline-icon-in-web-ide-sidebar.yml b/changelogs/unreleased/update-pipeline-icon-in-web-ide-sidebar.yml new file mode 100644 index 00000000000..3f1f3c643e2 --- /dev/null +++ b/changelogs/unreleased/update-pipeline-icon-in-web-ide-sidebar.yml @@ -0,0 +1,5 @@ +--- +title: Update pipeline icon in web ide sidebar +merge_request: 20058 +author: George Tsiolis +type: changed -- cgit v1.2.1 From 1d116f3ecdf64d82178e614594c6929c0e07d928 Mon Sep 17 00:00:00 2001 From: Andrei Vukolov Date: Thu, 21 Jun 2018 10:08:59 +0000 Subject: Update wrong initial setting transfer in application_settings_controller.rb --- app/controllers/admin/application_settings_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb index cdfe3d6ab1e..ef84d664075 100644 --- a/app/controllers/admin/application_settings_controller.rb +++ b/app/controllers/admin/application_settings_controller.rb @@ -52,7 +52,7 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController private def set_application_setting - @application_setting = ApplicationSetting.current_without_cache + @application_setting = Gitlab::CurrentSettings#current_application_settings end def application_setting_params -- cgit v1.2.1 From 6fef87f17fa6fde7c15668faa43b563eebc0a918 Mon Sep 17 00:00:00 2001 From: blackst0ne Date: Thu, 21 Jun 2018 21:44:31 +1100 Subject: [Rails5] Force the `protect_from_forgery` callback run first Since Rails 5.0 the `protect_from_forgery` callback doesn't run first by default anymore. [1] Instead it gets inserted into callbacks chain where callbacks get called in order. This commit forces the callback to run first. [1]: https://github.com/rails/rails/commit/39794037817703575c35a75f1961b01b83791191 --- app/controllers/application_controller.rb | 2 +- app/controllers/health_controller.rb | 2 +- app/controllers/metrics_controller.rb | 2 +- app/controllers/omniauth_callbacks_controller.rb | 2 +- ...blackst0ne-fix-protect-from-forgery-in-application-controller.yml | 5 +++++ lib/gitlab/request_forgery_protection.rb | 2 +- 6 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 changelogs/unreleased/blackst0ne-fix-protect-from-forgery-in-application-controller.yml diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 56312f801fb..21cc6dfdd16 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -27,7 +27,7 @@ class ApplicationController < ActionController::Base after_action :set_page_title_header, if: -> { request.format == :json } - protect_from_forgery with: :exception + protect_from_forgery with: :exception, prepend: true helper_method :can? helper_method :import_sources_enabled?, :github_import_enabled?, :gitea_import_enabled?, :github_import_configured?, :gitlab_import_enabled?, :gitlab_import_configured?, :bitbucket_import_enabled?, :bitbucket_import_configured?, :google_code_import_enabled?, :fogbugz_import_enabled?, :git_import_enabled?, :gitlab_project_import_enabled? diff --git a/app/controllers/health_controller.rb b/app/controllers/health_controller.rb index 16abf7bab7e..e54f372344d 100644 --- a/app/controllers/health_controller.rb +++ b/app/controllers/health_controller.rb @@ -1,5 +1,5 @@ class HealthController < ActionController::Base - protect_from_forgery with: :exception, except: :storage_check + protect_from_forgery with: :exception, except: :storage_check, prepend: true include RequiresWhitelistedMonitoringClient CHECKS = [ diff --git a/app/controllers/metrics_controller.rb b/app/controllers/metrics_controller.rb index 33b682d2859..0400ffcfee5 100644 --- a/app/controllers/metrics_controller.rb +++ b/app/controllers/metrics_controller.rb @@ -1,7 +1,7 @@ class MetricsController < ActionController::Base include RequiresWhitelistedMonitoringClient - protect_from_forgery with: :exception + protect_from_forgery with: :exception, prepend: true def index response = if Gitlab::Metrics.prometheus_metrics_enabled? diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index 27fd5f7ba37..ba62d2d5142 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -2,7 +2,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController include AuthenticatesWithTwoFactor include Devise::Controllers::Rememberable - protect_from_forgery except: [:kerberos, :saml, :cas3] + protect_from_forgery except: [:kerberos, :saml, :cas3], prepend: true def handle_omniauth omniauth_flow(Gitlab::Auth::OAuth) diff --git a/changelogs/unreleased/blackst0ne-fix-protect-from-forgery-in-application-controller.yml b/changelogs/unreleased/blackst0ne-fix-protect-from-forgery-in-application-controller.yml new file mode 100644 index 00000000000..da75ea8b09e --- /dev/null +++ b/changelogs/unreleased/blackst0ne-fix-protect-from-forgery-in-application-controller.yml @@ -0,0 +1,5 @@ +--- +title: "[Rails5] Force the callback run first" +merge_request: 20055 +author: "@blackst0ne" +type: fixed diff --git a/lib/gitlab/request_forgery_protection.rb b/lib/gitlab/request_forgery_protection.rb index ccfe0d6bed3..a502ad8a541 100644 --- a/lib/gitlab/request_forgery_protection.rb +++ b/lib/gitlab/request_forgery_protection.rb @@ -5,7 +5,7 @@ module Gitlab module RequestForgeryProtection class Controller < ActionController::Base - protect_from_forgery with: :exception + protect_from_forgery with: :exception, prepend: true rescue_from ActionController::InvalidAuthenticityToken do |e| logger.warn "This CSRF token verification failure is handled internally by `GitLab::RequestForgeryProtection`" -- cgit v1.2.1 From 57a4013a468946b05aac36cf7eb2dc5741f2dec2 Mon Sep 17 00:00:00 2001 From: George Tsiolis Date: Thu, 21 Jun 2018 14:38:14 +0300 Subject: Fix boards issue highlight --- app/assets/stylesheets/pages/boards.scss | 4 ---- changelogs/unreleased/fix-boards-issue-highlight.yml | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 changelogs/unreleased/fix-boards-issue-highlight.yml diff --git a/app/assets/stylesheets/pages/boards.scss b/app/assets/stylesheets/pages/boards.scss index 7c1d1626f1c..750d2c8b990 100644 --- a/app/assets/stylesheets/pages/boards.scss +++ b/app/assets/stylesheets/pages/boards.scss @@ -290,10 +290,6 @@ &.is-active, &.is-active .board-card-assignee:hover a { background-color: $row-hover; - - &:first-child:not(:only-child) { - box-shadow: -10px 0 10px 1px $row-hover; - } } .badge { diff --git a/changelogs/unreleased/fix-boards-issue-highlight.yml b/changelogs/unreleased/fix-boards-issue-highlight.yml new file mode 100644 index 00000000000..0cc3faa81ca --- /dev/null +++ b/changelogs/unreleased/fix-boards-issue-highlight.yml @@ -0,0 +1,5 @@ +--- +title: Fix boards issue highlight +merge_request: 20063 +author: George Tsiolis +type: changed -- cgit v1.2.1 From 099eb8ae407bf3cce0e01acc386055ad8151b68e Mon Sep 17 00:00:00 2001 From: Ahmad Hassan Date: Thu, 21 Jun 2018 13:56:00 +0200 Subject: Restore custom hooks for wiki --- lib/backup/repository.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/backup/repository.rb b/lib/backup/repository.rb index 221ba52b490..50a5e340191 100644 --- a/lib/backup/repository.rb +++ b/lib/backup/repository.rb @@ -206,6 +206,8 @@ module Backup progress.print " * #{wiki.full_path} ... " begin wiki.repository.create_from_bundle(path_to_wiki_bundle) + restore_custom_hooks(wiki) + progress.puts "[DONE]".color(:green) rescue => e progress.puts "[Failed] restoring #{wiki.full_path} wiki".color(:red) -- cgit v1.2.1 From 06df012818a292a0c3f6e510acfc8f62cc384547 Mon Sep 17 00:00:00 2001 From: Filipa Lacerda Date: Thu, 21 Jun 2018 13:07:05 +0100 Subject: Moves remove_issue component into a .vue file --- .../javascripts/boards/components/board_sidebar.js | 4 +- .../boards/components/sidebar/remove_issue.js | 73 ---------------------- .../boards/components/sidebar/remove_issue.vue | 73 ++++++++++++++++++++++ 3 files changed, 75 insertions(+), 75 deletions(-) delete mode 100644 app/assets/javascripts/boards/components/sidebar/remove_issue.js create mode 100644 app/assets/javascripts/boards/components/sidebar/remove_issue.vue diff --git a/app/assets/javascripts/boards/components/board_sidebar.js b/app/assets/javascripts/boards/components/board_sidebar.js index b717c4b0fd4..8e041664f68 100644 --- a/app/assets/javascripts/boards/components/board_sidebar.js +++ b/app/assets/javascripts/boards/components/board_sidebar.js @@ -9,7 +9,7 @@ import eventHub from '../../sidebar/event_hub'; import assigneeTitle from '../../sidebar/components/assignees/assignee_title.vue'; import assignees from '../../sidebar/components/assignees/assignees.vue'; import DueDateSelectors from '../../due_date_select'; -import './sidebar/remove_issue'; +import removeBtn from './sidebar/remove_issue.vue'; import IssuableContext from '../../issuable_context'; import LabelsSelect from '../../labels_select'; import subscriptions from '../../sidebar/components/subscriptions/subscriptions.vue'; @@ -24,7 +24,7 @@ gl.issueBoards.BoardSidebar = Vue.extend({ components: { assigneeTitle, assignees, - removeBtn: gl.issueBoards.RemoveIssueBtn, + removeBtn, subscriptions, }, props: { diff --git a/app/assets/javascripts/boards/components/sidebar/remove_issue.js b/app/assets/javascripts/boards/components/sidebar/remove_issue.js deleted file mode 100644 index 0a0820ec5fd..00000000000 --- a/app/assets/javascripts/boards/components/sidebar/remove_issue.js +++ /dev/null @@ -1,73 +0,0 @@ -import Vue from 'vue'; -import Flash from '../../../flash'; -import { __ } from '../../../locale'; - -const Store = gl.issueBoards.BoardsStore; - -window.gl = window.gl || {}; -window.gl.issueBoards = window.gl.issueBoards || {}; - -gl.issueBoards.RemoveIssueBtn = Vue.extend({ - props: { - issue: { - type: Object, - required: true, - }, - list: { - type: Object, - required: true, - }, - }, - computed: { - updateUrl() { - return this.issue.path; - }, - }, - methods: { - removeIssue() { - const issue = this.issue; - const lists = issue.getLists(); - const listLabelIds = lists.map(list => list.label.id); - - let labelIds = issue.labels - .map(label => label.id) - .filter(id => !listLabelIds.includes(id)); - if (labelIds.length === 0) { - labelIds = ['']; - } - - const data = { - issue: { - label_ids: labelIds, - }, - }; - - // Post the remove data - Vue.http.patch(this.updateUrl, data).catch(() => { - Flash(__('Failed to remove issue from board, please try again.')); - - lists.forEach((list) => { - list.addIssue(issue); - }); - }); - - // Remove from the frontend store - lists.forEach((list) => { - list.removeIssue(issue); - }); - - Store.detail.issue = {}; - }, - }, - template: ` -

- -
- `, -}); diff --git a/app/assets/javascripts/boards/components/sidebar/remove_issue.vue b/app/assets/javascripts/boards/components/sidebar/remove_issue.vue new file mode 100644 index 00000000000..4ccfe503ef4 --- /dev/null +++ b/app/assets/javascripts/boards/components/sidebar/remove_issue.vue @@ -0,0 +1,73 @@ + + -- cgit v1.2.1 From 3e66795ef1ff1228906239763910b051d8afcc37 Mon Sep 17 00:00:00 2001 From: Felipe Artur Date: Thu, 21 Jun 2018 12:22:40 +0000 Subject: Changes tab VUE refactoring --- app/assets/javascripts/autosave.js | 4 +- app/assets/javascripts/awards_handler.js | 191 ++++--- .../diff_notes/components/resolve_btn.js | 61 ++- .../javascripts/diff_notes/diff_notes_bundle.js | 30 +- .../javascripts/diff_notes/services/resolve.js | 40 +- app/assets/javascripts/diffs/components/app.vue | 197 +++++++ .../javascripts/diffs/components/changed_files.vue | 184 +++++++ .../diffs/components/changed_files_dropdown.vue | 124 +++++ .../diffs/components/compare_versions.vue | 55 ++ .../diffs/components/compare_versions_dropdown.vue | 165 ++++++ .../javascripts/diffs/components/diff_content.vue | 38 ++ .../diffs/components/diff_discussions.vue | 39 ++ .../javascripts/diffs/components/diff_file.vue | 191 +++++++ .../diffs/components/diff_file_header.vue | 254 +++++++++ .../diffs/components/diff_gutter_avatars.vue | 105 ++++ .../diffs/components/diff_line_gutter_content.vue | 203 ++++++++ .../diffs/components/diff_line_note_form.vue | 93 ++++ .../javascripts/diffs/components/edit_button.vue | 42 ++ .../diffs/components/hidden_files_warning.vue | 51 ++ .../diffs/components/inline_diff_view.vue | 117 +++++ .../javascripts/diffs/components/no_changes.vue | 49 ++ .../diffs/components/parallel_diff_view.vue | 224 ++++++++ app/assets/javascripts/diffs/constants.js | 24 + app/assets/javascripts/diffs/index.js | 39 ++ .../javascripts/diffs/mixins/changed_files.js | 38 ++ .../javascripts/diffs/mixins/diff_content.js | 89 ++++ app/assets/javascripts/diffs/store/actions.js | 99 ++++ app/assets/javascripts/diffs/store/getters.js | 16 + app/assets/javascripts/diffs/store/index.js | 11 + .../javascripts/diffs/store/modules/index.js | 25 + .../javascripts/diffs/store/mutation_types.js | 11 + app/assets/javascripts/diffs/store/mutations.js | 85 ++++ app/assets/javascripts/diffs/store/utils.js | 172 +++++++ app/assets/javascripts/lib/utils/common_utils.js | 139 +++-- app/assets/javascripts/lib/utils/dom_utils.js | 7 +- app/assets/javascripts/lib/utils/text_utility.js | 21 + app/assets/javascripts/merge_request.js | 1 + app/assets/javascripts/merge_request_tabs.js | 11 +- app/assets/javascripts/mr_notes/index.js | 51 +- app/assets/javascripts/mr_notes/stores/actions.js | 7 + app/assets/javascripts/mr_notes/stores/getters.js | 5 + app/assets/javascripts/mr_notes/stores/index.js | 15 + .../javascripts/mr_notes/stores/modules/index.js | 12 + .../javascripts/mr_notes/stores/mutation_types.js | 3 + .../javascripts/mr_notes/stores/mutations.js | 7 + app/assets/javascripts/notes.js | 253 ++------- .../javascripts/notes/components/comment_form.vue | 51 +- .../notes/components/diff_with_note.vue | 125 +++-- .../notes/components/discussion_counter.vue | 19 +- .../javascripts/notes/components/note_actions.vue | 20 +- .../javascripts/notes/components/note_body.vue | 9 +- .../notes/components/note_edited_text.vue | 13 +- .../javascripts/notes/components/note_form.vue | 53 +- .../javascripts/notes/components/note_header.vue | 11 +- .../notes/components/noteable_discussion.vue | 207 +++++--- .../javascripts/notes/components/noteable_note.vue | 51 +- .../javascripts/notes/components/notes_app.vue | 82 +-- app/assets/javascripts/notes/constants.js | 2 +- app/assets/javascripts/notes/index.js | 81 +-- app/assets/javascripts/notes/mixins/autosave.js | 6 +- app/assets/javascripts/notes/mixins/noteable.js | 9 +- app/assets/javascripts/notes/mixins/resolvable.js | 36 +- .../javascripts/notes/services/notes_service.js | 6 +- app/assets/javascripts/notes/stores/actions.js | 41 +- app/assets/javascripts/notes/stores/getters.js | 71 ++- app/assets/javascripts/notes/stores/index.js | 26 +- .../javascripts/notes/stores/modules/index.js | 26 + .../javascripts/notes/stores/mutation_types.js | 4 +- app/assets/javascripts/notes/stores/mutations.js | 96 ++-- .../merge_requests/init_merge_request_show.js | 17 +- .../pages/projects/merge_requests/show/index.js | 6 +- app/assets/javascripts/shortcuts_issuable.js | 24 +- .../states/mr_widget_squash_before_merge.js | 15 + .../vue_shared/components/markdown/field.vue | 2 +- .../vue_shared/components/markdown/header.vue | 2 +- .../vue_shared/components/notes/skeleton_note.vue | 13 +- .../vue_shared/components/notes/system_note.vue | 141 +++-- app/assets/stylesheets/framework/animations.scss | 9 + app/assets/stylesheets/framework/blocks.scss | 1 + app/assets/stylesheets/highlight/dark.scss | 4 +- app/assets/stylesheets/highlight/monokai.scss | 4 +- .../stylesheets/highlight/solarized_dark.scss | 4 +- .../stylesheets/highlight/solarized_light.scss | 4 +- app/assets/stylesheets/pages/diff.scss | 20 +- app/assets/stylesheets/pages/merge_requests.scss | 4 +- app/assets/stylesheets/pages/note_form.scss | 16 - app/assets/stylesheets/pages/notes.scss | 62 ++- app/controllers/concerns/issuable_actions.rb | 2 +- app/controllers/concerns/notes_actions.rb | 6 +- app/controllers/projects/blob_controller.rb | 44 +- app/controllers/projects/discussions_controller.rb | 9 +- .../projects/merge_requests/diffs_controller.rb | 25 +- .../projects/merge_requests_controller.rb | 3 + app/finders/notes_finder.rb | 2 +- app/helpers/merge_requests_helper.rb | 2 + app/helpers/notes_helper.rb | 6 +- app/models/concerns/issuable.rb | 4 + app/models/discussion.rb | 4 + app/models/issue.rb | 4 + app/models/merge_request.rb | 4 + app/models/note.rb | 1 + app/serializers/blob_entity.rb | 4 +- app/serializers/diff_file_entity.rb | 123 ++++- app/serializers/diffs_entity.rb | 65 +++ app/serializers/diffs_serializer.rb | 3 + app/serializers/discussion_entity.rb | 49 +- app/serializers/merge_request_diff_entity.rb | 46 ++ app/serializers/merge_request_user_entity.rb | 24 + app/serializers/merge_request_widget_entity.rb | 12 +- app/serializers/note_entity.rb | 28 +- app/views/projects/issues/_discussion.html.haml | 3 +- app/views/projects/merge_requests/show.html.haml | 35 +- app/views/shared/notes/_note.html.haml | 2 +- app/views/shared/notes/_notes_with_form.html.haml | 7 +- app/views/shared/runners/show.html.haml | 14 +- lib/gitlab/diff/file.rb | 31 +- lib/gitlab/diff/line.rb | 33 +- lib/gitlab/diff/parser.rb | 8 +- locale/gitlab.pot | 151 +++++- spec/controllers/projects/blob_controller_spec.rb | 60 ++- .../projects/discussions_controller_spec.rb | 23 +- .../controllers/projects/issues_controller_spec.rb | 2 +- .../merge_requests/diffs_controller_spec.rb | 29 +- spec/controllers/projects/notes_controller_spec.rb | 14 +- .../issuables/markdown_references/jira_spec.rb | 2 +- spec/features/issuables/shortcuts_issuable_spec.rb | 23 +- ..._issue_for_discussions_in_merge_request_spec.rb | 14 +- ..._for_single_discussion_in_merge_request_spec.rb | 22 +- .../user_creates_image_diff_notes_spec.rb | 6 +- .../merge_request/user_locks_discussion_spec.rb | 4 +- .../merge_request/user_posts_diff_notes_spec.rb | 27 +- .../merge_request/user_posts_notes_spec.rb | 24 +- .../merge_request/user_resolves_conflicts_spec.rb | 21 +- ...lves_diff_notes_and_discussions_resolve_spec.rb | 44 +- ...user_resolves_outdated_diff_discussions_spec.rb | 2 +- .../user_scrolls_to_note_on_load_spec.rb | 10 +- .../user_sees_avatar_on_diff_notes_spec.rb | 6 +- spec/features/merge_request/user_sees_diff_spec.rb | 15 +- .../merge_request/user_sees_discussions_spec.rb | 8 +- .../user_sees_mini_pipeline_graph_spec.rb | 3 +- .../user_sees_notes_from_forked_project_spec.rb | 2 +- .../merge_request/user_sees_system_notes_spec.rb | 2 +- .../merge_request/user_sees_versions_spec.rb | 6 +- .../merge_request/user_uses_slash_commands_spec.rb | 33 +- spec/features/participants_autocomplete_spec.rb | 6 +- .../commit/user_comments_on_commit_spec.rb | 109 ++++ .../merge_requests/user_comments_on_diff_spec.rb | 8 +- .../user_comments_on_merge_request_spec.rb | 3 +- .../merge_requests/user_views_diffs_spec.rb | 12 +- spec/features/projects/view_on_env_spec.rb | 4 +- spec/finders/notes_finder_spec.rb | 2 +- .../api/schemas/entities/merge_request_widget.json | 1 + spec/javascripts/awards_handler_spec.js | 106 ++-- spec/javascripts/behaviors/quick_submit_spec.js | 81 +-- spec/javascripts/diffs/components/app_spec.js | 1 + .../components/changed_files_dropdown_spec.js | 1 + .../diffs/components/changed_files_spec.js | 100 ++++ .../components/compare_versions_dropdown_spec.js | 1 + .../diffs/components/compare_versions_spec.js | 1 + .../diffs/components/diff_content_spec.js | 1 + .../diffs/components/diff_discussions_spec.js | 24 + .../diffs/components/diff_file_header_spec.js | 433 ++++++++++++++++ .../javascripts/diffs/components/diff_file_spec.js | 88 ++++ .../diffs/components/diff_gutter_avatars_spec.js | 115 +++++ .../components/diff_line_gutter_content_spec.js | 153 ++++++ .../diffs/components/diff_line_note_form_spec.js | 68 +++ .../diffs/components/edit_button_spec.js | 1 + .../diffs/components/hidden_files_warning_spec.js | 1 + .../diffs/components/inline_diff_view_spec.js | 111 ++++ .../diffs/components/no_changes_spec.js | 1 + .../diffs/components/parallel_diff_view_spec.js | 224 ++++++++ .../diffs/mock_data/diff_discussions.js | 496 ++++++++++++++++++ spec/javascripts/diffs/mock_data/diff_file.js | 220 ++++++++ spec/javascripts/diffs/store/actions_spec.js | 210 ++++++++ spec/javascripts/diffs/store/getters_spec.js | 24 + spec/javascripts/diffs/store/mutations_spec.js | 147 ++++++ spec/javascripts/diffs/store/utils_spec.js | 179 +++++++ spec/javascripts/fixtures/commit.rb | 33 ++ spec/javascripts/fixtures/snippet.rb | 1 + spec/javascripts/helpers/index.js | 3 + .../javascripts/helpers/init_vue_mr_page_helper.js | 40 ++ spec/javascripts/lib/utils/common_utils_spec.js | 70 +++ spec/javascripts/lib/utils/text_utility_spec.js | 16 + spec/javascripts/matchers.js | 26 +- spec/javascripts/merge_request_notes_spec.js | 108 ---- spec/javascripts/merge_request_tabs_spec.js | 565 ++++++--------------- .../notes/components/comment_form_spec.js | 94 ++-- .../notes/components/diff_file_header_spec.js | 93 ---- .../notes/components/diff_with_note_spec.js | 20 +- .../notes/components/discussion_counter_spec.js | 58 +++ .../notes/components/note_actions_spec.js | 12 +- spec/javascripts/notes/components/note_app_spec.js | 68 ++- .../notes/components/note_awards_list_spec.js | 8 +- .../javascripts/notes/components/note_body_spec.js | 7 +- .../javascripts/notes/components/note_form_spec.js | 28 +- .../notes/components/note_header_spec.js | 30 +- .../components/note_signed_out_widget_spec.js | 20 +- .../notes/components/noteable_discussion_spec.js | 83 ++- .../notes/components/noteable_note_spec.js | 15 +- spec/javascripts/notes/mock_data.js | 13 + spec/javascripts/notes/stores/actions_spec.js | 40 +- spec/javascripts/notes/stores/getters_spec.js | 20 +- spec/javascripts/notes/stores/mutation_spec.js | 104 ++-- spec/javascripts/notes_spec.js | 151 ++---- .../pipelines/pipelines_table_row_spec.js | 27 +- spec/javascripts/shortcuts_issuable_spec.js | 77 ++- spec/javascripts/shortcuts_spec.js | 19 +- spec/javascripts/test_bundle.js | 3 +- .../components/notes/placeholder_note_spec.js | 20 +- .../components/notes/system_note_spec.js | 14 +- spec/javascripts/zen_mode_spec.js | 59 ++- spec/models/note_spec.rb | 10 + spec/serializers/blob_entity_spec.rb | 20 + spec/serializers/diff_file_entity_spec.rb | 48 +- spec/serializers/diffs_entity_spec.rb | 28 + spec/serializers/discussion_entity_spec.rb | 34 +- spec/serializers/merge_request_diff_entity_spec.rb | 24 + spec/serializers/merge_request_user_entity_spec.rb | 19 + .../features/reportable_note_shared_examples.rb | 2 +- spec/support/helpers/merge_request_diff_helpers.rb | 2 +- .../serializers/note_entity_examples.rb | 4 +- 221 files changed, 8933 insertions(+), 2282 deletions(-) create mode 100644 app/assets/javascripts/diffs/components/app.vue create mode 100644 app/assets/javascripts/diffs/components/changed_files.vue create mode 100644 app/assets/javascripts/diffs/components/changed_files_dropdown.vue create mode 100644 app/assets/javascripts/diffs/components/compare_versions.vue create mode 100644 app/assets/javascripts/diffs/components/compare_versions_dropdown.vue create mode 100644 app/assets/javascripts/diffs/components/diff_content.vue create mode 100644 app/assets/javascripts/diffs/components/diff_discussions.vue create mode 100644 app/assets/javascripts/diffs/components/diff_file.vue create mode 100644 app/assets/javascripts/diffs/components/diff_file_header.vue create mode 100644 app/assets/javascripts/diffs/components/diff_gutter_avatars.vue create mode 100644 app/assets/javascripts/diffs/components/diff_line_gutter_content.vue create mode 100644 app/assets/javascripts/diffs/components/diff_line_note_form.vue create mode 100644 app/assets/javascripts/diffs/components/edit_button.vue create mode 100644 app/assets/javascripts/diffs/components/hidden_files_warning.vue create mode 100644 app/assets/javascripts/diffs/components/inline_diff_view.vue create mode 100644 app/assets/javascripts/diffs/components/no_changes.vue create mode 100644 app/assets/javascripts/diffs/components/parallel_diff_view.vue create mode 100644 app/assets/javascripts/diffs/constants.js create mode 100644 app/assets/javascripts/diffs/index.js create mode 100644 app/assets/javascripts/diffs/mixins/changed_files.js create mode 100644 app/assets/javascripts/diffs/mixins/diff_content.js create mode 100644 app/assets/javascripts/diffs/store/actions.js create mode 100644 app/assets/javascripts/diffs/store/getters.js create mode 100644 app/assets/javascripts/diffs/store/index.js create mode 100644 app/assets/javascripts/diffs/store/modules/index.js create mode 100644 app/assets/javascripts/diffs/store/mutation_types.js create mode 100644 app/assets/javascripts/diffs/store/mutations.js create mode 100644 app/assets/javascripts/diffs/store/utils.js create mode 100644 app/assets/javascripts/mr_notes/stores/actions.js create mode 100644 app/assets/javascripts/mr_notes/stores/getters.js create mode 100644 app/assets/javascripts/mr_notes/stores/index.js create mode 100644 app/assets/javascripts/mr_notes/stores/modules/index.js create mode 100644 app/assets/javascripts/mr_notes/stores/mutation_types.js create mode 100644 app/assets/javascripts/mr_notes/stores/mutations.js create mode 100644 app/assets/javascripts/notes/stores/modules/index.js create mode 100644 app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_squash_before_merge.js create mode 100644 app/serializers/diffs_entity.rb create mode 100644 app/serializers/diffs_serializer.rb create mode 100644 app/serializers/merge_request_diff_entity.rb create mode 100644 app/serializers/merge_request_user_entity.rb create mode 100644 spec/features/projects/commit/user_comments_on_commit_spec.rb create mode 100644 spec/javascripts/diffs/components/app_spec.js create mode 100644 spec/javascripts/diffs/components/changed_files_dropdown_spec.js create mode 100644 spec/javascripts/diffs/components/changed_files_spec.js create mode 100644 spec/javascripts/diffs/components/compare_versions_dropdown_spec.js create mode 100644 spec/javascripts/diffs/components/compare_versions_spec.js create mode 100644 spec/javascripts/diffs/components/diff_content_spec.js create mode 100644 spec/javascripts/diffs/components/diff_discussions_spec.js create mode 100644 spec/javascripts/diffs/components/diff_file_header_spec.js create mode 100644 spec/javascripts/diffs/components/diff_file_spec.js create mode 100644 spec/javascripts/diffs/components/diff_gutter_avatars_spec.js create mode 100644 spec/javascripts/diffs/components/diff_line_gutter_content_spec.js create mode 100644 spec/javascripts/diffs/components/diff_line_note_form_spec.js create mode 100644 spec/javascripts/diffs/components/edit_button_spec.js create mode 100644 spec/javascripts/diffs/components/hidden_files_warning_spec.js create mode 100644 spec/javascripts/diffs/components/inline_diff_view_spec.js create mode 100644 spec/javascripts/diffs/components/no_changes_spec.js create mode 100644 spec/javascripts/diffs/components/parallel_diff_view_spec.js create mode 100644 spec/javascripts/diffs/mock_data/diff_discussions.js create mode 100644 spec/javascripts/diffs/mock_data/diff_file.js create mode 100644 spec/javascripts/diffs/store/actions_spec.js create mode 100644 spec/javascripts/diffs/store/getters_spec.js create mode 100644 spec/javascripts/diffs/store/mutations_spec.js create mode 100644 spec/javascripts/diffs/store/utils_spec.js create mode 100644 spec/javascripts/fixtures/commit.rb create mode 100644 spec/javascripts/helpers/index.js create mode 100644 spec/javascripts/helpers/init_vue_mr_page_helper.js delete mode 100644 spec/javascripts/merge_request_notes_spec.js delete mode 100644 spec/javascripts/notes/components/diff_file_header_spec.js create mode 100644 spec/javascripts/notes/components/discussion_counter_spec.js create mode 100644 spec/serializers/blob_entity_spec.rb create mode 100644 spec/serializers/diffs_entity_spec.rb create mode 100644 spec/serializers/merge_request_diff_entity_spec.rb create mode 100644 spec/serializers/merge_request_user_entity_spec.rb diff --git a/app/assets/javascripts/autosave.js b/app/assets/javascripts/autosave.js index 959e6289502..fa00a3cf386 100644 --- a/app/assets/javascripts/autosave.js +++ b/app/assets/javascripts/autosave.js @@ -31,7 +31,9 @@ export default class Autosave { // https://github.com/vuejs/vue/issues/2804#issuecomment-216968137 const event = new Event('change', { bubbles: true, cancelable: false }); const field = this.field.get(0); - field.dispatchEvent(event); + if (field) { + field.dispatchEvent(event); + } } save() { diff --git a/app/assets/javascripts/awards_handler.js b/app/assets/javascripts/awards_handler.js index eb0f06efab4..70f20c5c7cf 100644 --- a/app/assets/javascripts/awards_handler.js +++ b/app/assets/javascripts/awards_handler.js @@ -11,7 +11,8 @@ import axios from './lib/utils/axios_utils'; const animationEndEventString = 'animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd'; const transitionEndEventString = 'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd'; -const requestAnimationFrame = window.requestAnimationFrame || +const requestAnimationFrame = + window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.setTimeout; @@ -37,21 +38,28 @@ class AwardsHandler { this.emoji = emoji; this.eventListeners = []; // If the user shows intent let's pre-build the menu - this.registerEventListener('one', $(document), 'mouseenter focus', '.js-add-award', 'mouseenter focus', () => { - const $menu = $('.emoji-menu'); - if ($menu.length === 0) { - requestAnimationFrame(() => { - this.createEmojiMenu(); - }); - } - }); - this.registerEventListener('on', $(document), 'click', '.js-add-award', (e) => { + this.registerEventListener( + 'one', + $(document), + 'mouseenter focus', + '.js-add-award', + 'mouseenter focus', + () => { + const $menu = $('.emoji-menu'); + if ($menu.length === 0) { + requestAnimationFrame(() => { + this.createEmojiMenu(); + }); + } + }, + ); + this.registerEventListener('on', $(document), 'click', '.js-add-award', e => { e.stopPropagation(); e.preventDefault(); this.showEmojiMenu($(e.currentTarget)); }); - this.registerEventListener('on', $('html'), 'click', (e) => { + this.registerEventListener('on', $('html'), 'click', e => { const $target = $(e.target); if (!$target.closest('.emoji-menu').length) { $('.js-awards-block.current').removeClass('current'); @@ -61,12 +69,14 @@ class AwardsHandler { } } }); - this.registerEventListener('on', $(document), 'click', '.js-emoji-btn', (e) => { + this.registerEventListener('on', $(document), 'click', '.js-emoji-btn', e => { e.preventDefault(); const $target = $(e.currentTarget); const $glEmojiElement = $target.find('gl-emoji'); const $spriteIconElement = $target.find('.icon'); - const emojiName = ($glEmojiElement.length ? $glEmojiElement : $spriteIconElement).data('name'); + const emojiName = ($glEmojiElement.length ? $glEmojiElement : $spriteIconElement).data( + 'name', + ); $target.closest('.js-awards-block').addClass('current'); this.addAward(this.getVotesBlock(), this.getAwardUrl(), emojiName); @@ -83,7 +93,10 @@ class AwardsHandler { showEmojiMenu($addBtn) { if ($addBtn.hasClass('js-note-emoji')) { - $addBtn.closest('.note').find('.js-awards-block').addClass('current'); + $addBtn + .closest('.note') + .find('.js-awards-block') + .addClass('current'); } else { $addBtn.closest('.js-awards-block').addClass('current'); } @@ -177,32 +190,38 @@ class AwardsHandler { const remainingCategories = Object.keys(categoryMap).slice(1); const allCategoriesAddedPromise = remainingCategories.reduce( (promiseChain, categoryNameKey) => - promiseChain.then(() => - new Promise((resolve) => { - const emojisInCategory = categoryMap[categoryNameKey]; - const categoryMarkup = this.renderCategory( - categoryLabelMap[categoryNameKey], - emojisInCategory, - ); - requestAnimationFrame(() => { - emojiContentElement.insertAdjacentHTML('beforeend', categoryMarkup); - resolve(); - }); - }), - ), + promiseChain.then( + () => + new Promise(resolve => { + const emojisInCategory = categoryMap[categoryNameKey]; + const categoryMarkup = this.renderCategory( + categoryLabelMap[categoryNameKey], + emojisInCategory, + ); + requestAnimationFrame(() => { + emojiContentElement.insertAdjacentHTML('beforeend', categoryMarkup); + resolve(); + }); + }), + ), Promise.resolve(), ); - allCategoriesAddedPromise.then(() => { - // Used for tests - // We check for the menu in case it was destroyed in the meantime - if (menu) { - menu.dispatchEvent(new CustomEvent('build-emoji-menu-finish')); - } - }).catch((err) => { - emojiContentElement.insertAdjacentHTML('beforeend', '

We encountered an error while adding the remaining categories

'); - throw new Error(`Error occurred in addRemainingEmojiMenuCategories: ${err.message}`); - }); + allCategoriesAddedPromise + .then(() => { + // Used for tests + // We check for the menu in case it was destroyed in the meantime + if (menu) { + menu.dispatchEvent(new CustomEvent('build-emoji-menu-finish')); + } + }) + .catch(err => { + emojiContentElement.insertAdjacentHTML( + 'beforeend', + '

We encountered an error while adding the remaining categories

', + ); + throw new Error(`Error occurred in addRemainingEmojiMenuCategories: ${err.message}`); + }); } renderCategory(name, emojiList, opts = {}) { @@ -211,7 +230,9 @@ class AwardsHandler { ${name}
    - ${emojiList.map(emojiName => ` + ${emojiList + .map( + emojiName => `
  • - `).join('\n')} + `, + ) + .join('\n')}
`; } @@ -232,7 +255,7 @@ class AwardsHandler { top: `${$addBtn.offset().top + $addBtn.outerHeight()}px`, }; if (position === 'right') { - css.left = `${($addBtn.offset().left - $menu.outerWidth()) + 20}px`; + css.left = `${$addBtn.offset().left - $menu.outerWidth() + 20}px`; $menu.addClass('is-aligned-right'); } else { css.left = `${$addBtn.offset().left}px`; @@ -416,7 +439,10 @@ class AwardsHandler { `; const $emojiButton = $(buttonHtml); - $emojiButton.insertBefore(votesBlock.find('.js-award-holder')).find('.emoji-icon').data('name', emojiName); + $emojiButton + .insertBefore(votesBlock.find('.js-award-holder')) + .find('.emoji-icon') + .data('name', emojiName); this.animateEmoji($emojiButton); $('.award-control').tooltip(); votesBlock.removeClass('current'); @@ -426,7 +452,7 @@ class AwardsHandler { const className = 'pulse animated once short'; $emoji.addClass(className); - this.registerEventListener('on', $emoji, animationEndEventString, (e) => { + this.registerEventListener('on', $emoji, animationEndEventString, e => { $(e.currentTarget).removeClass(className); }); } @@ -444,15 +470,16 @@ class AwardsHandler { if (this.isUserAuthored($emojiButton)) { this.userAuthored($emojiButton); } else { - axios.post(awardUrl, { - name: emoji, - }) - .then(({ data }) => { - if (data.ok) { - callback(); - } - }) - .catch(() => flash(__('Something went wrong on our end.'))); + axios + .post(awardUrl, { + name: emoji, + }) + .then(({ data }) => { + if (data.ok) { + callback(); + } + }) + .catch(() => flash(__('Something went wrong on our end.'))); } } @@ -486,26 +513,33 @@ class AwardsHandler { } getFrequentlyUsedEmojis() { - return this.frequentlyUsedEmojis || (() => { - const frequentlyUsedEmojis = _.uniq((Cookies.get('frequently_used_emojis') || '').split(',')); - this.frequentlyUsedEmojis = frequentlyUsedEmojis.filter( - inputName => this.emoji.isEmojiNameValid(inputName), - ); - - return this.frequentlyUsedEmojis; - })(); + return ( + this.frequentlyUsedEmojis || + (() => { + const frequentlyUsedEmojis = _.uniq( + (Cookies.get('frequently_used_emojis') || '').split(','), + ); + this.frequentlyUsedEmojis = frequentlyUsedEmojis.filter(inputName => + this.emoji.isEmojiNameValid(inputName), + ); + + return this.frequentlyUsedEmojis; + })() + ); } setupSearch() { const $search = $('.js-emoji-menu-search'); - this.registerEventListener('on', $search, 'input', (e) => { - const term = $(e.target).val().trim(); + this.registerEventListener('on', $search, 'input', e => { + const term = $(e.target) + .val() + .trim(); this.searchEmojis(term); }); const $menu = $('.emoji-menu'); - this.registerEventListener('on', $menu, transitionEndEventString, (e) => { + this.registerEventListener('on', $menu, transitionEndEventString, e => { if (e.target === e.currentTarget) { // Clear the search this.searchEmojis(''); @@ -523,19 +557,26 @@ class AwardsHandler { // Generate a search result block const h5 = $('
').text('Search results'); const foundEmojis = this.findMatchingEmojiElements(term).show(); - const ul = $('