From f7ae5366cc28c4fefdc2bb1b0dcfaa9650812db9 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 18 Jan 2021 21:11:05 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- Gemfile | 3 - Gemfile.lock | 2 - app/assets/images/board-intro.svg | 1 + .../images/trial-learn-gitlab-gold-board.png | Bin 36343 -> 0 bytes .../javascripts/diffs/components/diff_row.vue | 22 +++++-- .../mergeability_check_service.rb | 5 -- .../deploy_tokens/_revoke_modal.html.haml | 4 +- ...zation-not-displaying-in-inline-mr-dif.yml | 5 ++ ...sindeploytokens_revoke_modal-html-haml.yml | 5 ++ changelogs/unreleased/puma-nakayoshi_fork.yml | 5 ++ .../development/merge_ref_auto_sync_lock.yml | 8 --- config/puma.example.development.rb | 5 ++ config/puma.rb.example | 5 ++ .../puma_actioncable.example.development.rb | 5 ++ .../diffs/components/diff_row_spec.js | 54 ++++++++++++++++++ .../mergeability_check_service_spec.rb | 8 --- 16 files changed, 105 insertions(+), 32 deletions(-) create mode 100644 app/assets/images/board-intro.svg delete mode 100644 app/assets/images/trial-learn-gitlab-gold-board.png create mode 100644 changelogs/unreleased/297569-inline-code-coverage-visualization-not-displaying-in-inline-mr-dif.yml create mode 100644 changelogs/unreleased/ApplyGitLabUIbuttonstylestobuttonsindeploytokens_revoke_modal-html-haml.yml create mode 100644 changelogs/unreleased/puma-nakayoshi_fork.yml delete mode 100644 config/feature_flags/development/merge_ref_auto_sync_lock.yml diff --git a/Gemfile b/Gemfile index 3b76862fc21..c7ed1cd4d71 100644 --- a/Gemfile +++ b/Gemfile @@ -4,9 +4,6 @@ gem 'rails', '~> 6.0.3.1' gem 'bootsnap', '~> 1.4.6' -# Improves copy-on-write performance for MRI -gem 'nakayoshi_fork', '~> 0.0.4' - # Responders respond_to and respond_with gem 'responders', '~> 3.0' diff --git a/Gemfile.lock b/Gemfile.lock index e91ea69279b..b370024b95b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -727,7 +727,6 @@ GEM ruby2_keywords (~> 0.0.1) mustermann-grape (1.0.1) mustermann (>= 1.0.0) - nakayoshi_fork (0.0.4) nap (1.1.0) nenv (0.3.0) net-http-persistent (4.0.0) @@ -1426,7 +1425,6 @@ DEPENDENCIES mini_magick (~> 4.10.1) minitest (~> 5.11.0) multi_json (~> 1.14.1) - nakayoshi_fork (~> 0.0.4) net-ldap (~> 0.16.3) net-ntp net-ssh (~> 6.0) diff --git a/app/assets/images/board-intro.svg b/app/assets/images/board-intro.svg new file mode 100644 index 00000000000..8f04077d598 --- /dev/null +++ b/app/assets/images/board-intro.svg @@ -0,0 +1 @@ + diff --git a/app/assets/images/trial-learn-gitlab-gold-board.png b/app/assets/images/trial-learn-gitlab-gold-board.png deleted file mode 100644 index 615f3662213be69b0ad3e13d323b6cc77bcccfef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36343 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 diff --git a/app/assets/javascripts/diffs/components/diff_row.vue b/app/assets/javascripts/diffs/components/diff_row.vue index 9054a8aec04..db03da966c3 100644 --- a/app/assets/javascripts/diffs/components/diff_row.vue +++ b/app/assets/javascripts/diffs/components/diff_row.vue @@ -76,7 +76,12 @@ export default { parallelViewLeftLineType() { return utils.parallelViewLeftLineType(this.line, this.isHighlighted || this.isCommented); }, - coverageState() { + coverageStateLeft() { + if (!this.inline || !this.line.left) return {}; + return this.fileLineCoverage(this.filePath, this.line.left.new_line); + }, + coverageStateRight() { + if (!this.line.right) return {}; return this.fileLineCoverage(this.filePath, this.line.right.new_line); }, classNameMapCellLeft() { @@ -243,7 +248,12 @@ export default { > -
+
'.html_safe, name: token.name, b_end: ''.html_safe } = s_('DeployTokens|This action cannot be undone.') .modal-footer.gl-flex-direction-row - %a{ href: '#', data: { dismiss: 'modal' }, class: 'btn btn-default' }= _('Cancel') - = link_to s_('DeployTokens|Revoke %{name}') % { name: token.name }, revoke_deploy_token_path(group_or_project, token), method: :put, class: 'btn btn-danger text-truncate' + %a{ href: '#', data: { dismiss: 'modal' }, class: 'gl-button btn btn-default' }= _('Cancel') + = link_to s_('DeployTokens|Revoke %{name}') % { name: token.name }, revoke_deploy_token_path(group_or_project, token), method: :put, class: 'gl-button btn btn-danger text-truncate' diff --git a/changelogs/unreleased/297569-inline-code-coverage-visualization-not-displaying-in-inline-mr-dif.yml b/changelogs/unreleased/297569-inline-code-coverage-visualization-not-displaying-in-inline-mr-dif.yml new file mode 100644 index 00000000000..1c368613fca --- /dev/null +++ b/changelogs/unreleased/297569-inline-code-coverage-visualization-not-displaying-in-inline-mr-dif.yml @@ -0,0 +1,5 @@ +--- +title: Fix coverage not showing for inline diffs +merge_request: 51652 +author: +type: fixed diff --git a/changelogs/unreleased/ApplyGitLabUIbuttonstylestobuttonsindeploytokens_revoke_modal-html-haml.yml b/changelogs/unreleased/ApplyGitLabUIbuttonstylestobuttonsindeploytokens_revoke_modal-html-haml.yml new file mode 100644 index 00000000000..578d4128ad6 --- /dev/null +++ b/changelogs/unreleased/ApplyGitLabUIbuttonstylestobuttonsindeploytokens_revoke_modal-html-haml.yml @@ -0,0 +1,5 @@ +--- +title: Update button style of Revoke button on Deploy Tokens page +merge_request: 51079 +author: nuwe1 +type: other diff --git a/changelogs/unreleased/puma-nakayoshi_fork.yml b/changelogs/unreleased/puma-nakayoshi_fork.yml new file mode 100644 index 00000000000..f282be7a56f --- /dev/null +++ b/changelogs/unreleased/puma-nakayoshi_fork.yml @@ -0,0 +1,5 @@ +--- +title: Use Puma `nakayoshi_fork` +merge_request: 51467 +author: +type: performance diff --git a/config/feature_flags/development/merge_ref_auto_sync_lock.yml b/config/feature_flags/development/merge_ref_auto_sync_lock.yml deleted file mode 100644 index 3aec2b4e062..00000000000 --- a/config/feature_flags/development/merge_ref_auto_sync_lock.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: merge_ref_auto_sync_lock -introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31082 -rollout_issue_url: -milestone: '12.2' -type: development -group: group::code review -default_enabled: true diff --git a/config/puma.example.development.rb b/config/puma.example.development.rb index 7e616ee4768..28c2af3acb3 100644 --- a/config/puma.example.development.rb +++ b/config/puma.example.development.rb @@ -84,6 +84,11 @@ if defined?(wait_for_less_busy_worker) wait_for_less_busy_worker ENV.fetch('PUMA_WAIT_FOR_LESS_BUSY_WORKER', 0.001).to_f end +# https://github.com/puma/puma/blob/master/5.0-Upgrade.md#nakayoshi_fork +if defined?(nakayoshi_fork) + nakayoshi_fork unless ENV['DISABLE_PUMA_NAKAYOSHI_FORK'] == 'true' +end + # Use json formatter require_relative "/home/git/gitlab/lib/gitlab/puma_logging/json_formatter" diff --git a/config/puma.rb.example b/config/puma.rb.example index 25e38626260..9fc354a8fe8 100644 --- a/config/puma.rb.example +++ b/config/puma.rb.example @@ -74,6 +74,11 @@ if defined?(wait_for_less_busy_worker) wait_for_less_busy_worker ENV.fetch('PUMA_WAIT_FOR_LESS_BUSY_WORKER', 0.001).to_f end +# https://github.com/puma/puma/blob/master/5.0-Upgrade.md#nakayoshi_fork +if defined?(nakayoshi_fork) + nakayoshi_fork unless ENV['DISABLE_PUMA_NAKAYOSHI_FORK'] == 'true' +end + # Use json formatter require_relative "/home/git/gitlab/lib/gitlab/puma_logging/json_formatter" diff --git a/config/puma_actioncable.example.development.rb b/config/puma_actioncable.example.development.rb index 106932606e0..d0da3dcd8f2 100644 --- a/config/puma_actioncable.example.development.rb +++ b/config/puma_actioncable.example.development.rb @@ -84,6 +84,11 @@ if defined?(wait_for_less_busy_worker) wait_for_less_busy_worker ENV.fetch('PUMA_WAIT_FOR_LESS_BUSY_WORKER', 0.001).to_f end +# https://github.com/puma/puma/blob/master/5.0-Upgrade.md#nakayoshi_fork +if defined?(nakayoshi_fork) + nakayoshi_fork unless ENV['DISABLE_PUMA_NAKAYOSHI_FORK'] == 'true' +end + # Use json formatter require_relative "/home/git/gitlab/lib/gitlab/puma_logging/json_formatter" diff --git a/spec/frontend/diffs/components/diff_row_spec.js b/spec/frontend/diffs/components/diff_row_spec.js index f0d335b88e5..c06d8e78316 100644 --- a/spec/frontend/diffs/components/diff_row_spec.js +++ b/spec/frontend/diffs/components/diff_row_spec.js @@ -3,6 +3,8 @@ import { getByTestId, fireEvent } from '@testing-library/dom'; import Vuex from 'vuex'; import diffsModule from '~/diffs/store/modules'; import DiffRow from '~/diffs/components/diff_row.vue'; +import diffFileMockData from '../mock_data/diff_file'; +import { mapParallel } from '~/diffs/components/diff_row_utils'; describe('DiffRow', () => { const testLines = [ @@ -157,4 +159,56 @@ describe('DiffRow', () => { expect(wrapper.emitted().stopdragging).toBeTruthy(); }); }); + + describe('sets coverage title and class', () => { + const thisLine = diffFileMockData.parallel_diff_lines[2]; + const rightLine = diffFileMockData.parallel_diff_lines[2].right; + + const mockDiffContent = { + diffFile: diffFileMockData, + shouldRenderDraftRow: jest.fn(), + hasParallelDraftLeft: jest.fn(), + hasParallelDraftRight: jest.fn(), + draftForLine: jest.fn(), + }; + + const applyMap = mapParallel(mockDiffContent); + const props = { + line: applyMap(thisLine), + fileHash: diffFileMockData.file_hash, + filePath: diffFileMockData.file_path, + contextLinesPath: 'contextLinesPath', + isHighlighted: false, + }; + const name = diffFileMockData.file_path; + const line = rightLine.new_line; + + it('for lines with coverage', () => { + const coverageFiles = { files: { [name]: { [line]: 5 } } }; + const wrapper = createWrapper({ props, state: { coverageFiles } }); + const coverage = wrapper.find('.line-coverage.right-side'); + + expect(coverage.attributes('title')).toContain('Test coverage: 5 hits'); + expect(coverage.classes('coverage')).toBeTruthy(); + }); + + it('for lines without coverage', () => { + const coverageFiles = { files: { [name]: { [line]: 0 } } }; + const wrapper = createWrapper({ props, state: { coverageFiles } }); + const coverage = wrapper.find('.line-coverage.right-side'); + + expect(coverage.attributes('title')).toContain('No test coverage'); + expect(coverage.classes('no-coverage')).toBeTruthy(); + }); + + it('for unknown lines', () => { + const coverageFiles = {}; + const wrapper = createWrapper({ props, state: { coverageFiles } }); + const coverage = wrapper.find('.line-coverage.right-side'); + + expect(coverage.attributes('title')).toBeFalsy(); + expect(coverage.classes('coverage')).toBeFalsy(); + expect(coverage.classes('no-coverage')).toBeFalsy(); + }); + }); }); diff --git a/spec/services/merge_requests/mergeability_check_service_spec.rb b/spec/services/merge_requests/mergeability_check_service_spec.rb index 5f335b3250b..17bfa9d7368 100644 --- a/spec/services/merge_requests/mergeability_check_service_spec.rb +++ b/spec/services/merge_requests/mergeability_check_service_spec.rb @@ -124,14 +124,6 @@ RSpec.describe MergeRequests::MergeabilityCheckService, :clean_gitlab_redis_shar it_behaves_like 'mergeable merge request' - context 'when lock is disabled' do - before do - stub_feature_flags(merge_ref_auto_sync_lock: false) - end - - it_behaves_like 'mergeable merge request' - end - context 'when concurrent calls' do it 'waits first lock and returns "cached" result in subsequent calls' do threads = execute_within_threads(amount: 3)