From e82af4a6b340f6c49ec18bd13fc9974cf08b097e Mon Sep 17 00:00:00 2001 From: Filipa Lacerda Date: Fri, 13 Oct 2017 17:33:47 +0000 Subject: Merge branch '39111-remove-n-shortcut' into 'master' Remove global dropdown shortcut from help modal Closes #39111 See merge request gitlab-org/gitlab-ce!14876 (cherry picked from commit 93139aa84aaef72812dad70f38e2f60b206eecde) cb29df7f Remove global dropdown shortcut from help modal --- app/views/help/_shortcuts.html.haml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/views/help/_shortcuts.html.haml b/app/views/help/_shortcuts.html.haml index b18b3dd5766..29b23ae2e52 100644 --- a/app/views/help/_shortcuts.html.haml +++ b/app/views/help/_shortcuts.html.haml @@ -15,10 +15,6 @@ %tr %th %th Global Shortcuts - %tr - %td.shortcut - .key n - %td Main Navigation %tr %td.shortcut .key s -- cgit v1.2.3 From 4c552a52260d2192a3bb654a0a83d8aea9551d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Mon, 16 Oct 2017 08:12:46 +0000 Subject: Merge branch 'fix/sm/38960-collect-usage-pings-gcp-cluster-enabled-and-gcp-cluster-disabled-instead-of-gcp-cluster-count' into 'master' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Collect usage pings `Gcp::Cluster.enabled` and `Gcp::Cluster.disabled`, instead of `Gcp::Cluster.count` Closes #38960 See merge request gitlab-org/gitlab-ce!14807 (cherry picked from commit 076231798dd9716479d8eef118678eeb7c2c7b11) a6b2387d Collect usage pings `Gcp::Cluster.enabled` and `Gcp::Cluster.disabled`, instead… --- app/models/gcp/cluster.rb | 3 +++ lib/gitlab/usage_data.rb | 2 ++ spec/lib/gitlab/usage_data_spec.rb | 2 ++ spec/models/gcp/cluster_spec.rb | 24 ++++++++++++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/app/models/gcp/cluster.rb b/app/models/gcp/cluster.rb index 18bd6a6dcb4..162a690c0e3 100644 --- a/app/models/gcp/cluster.rb +++ b/app/models/gcp/cluster.rb @@ -7,6 +7,9 @@ module Gcp belongs_to :user belongs_to :service + scope :enabled, -> { where(enabled: true) } + scope :disabled, -> { where(enabled: false) } + default_value_for :gcp_cluster_zone, 'us-central1-a' default_value_for :gcp_cluster_size, 3 default_value_for :gcp_machine_type, 'n1-standard-4' diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb index 3f3ba77d47f..70a403652e7 100644 --- a/lib/gitlab/usage_data.rb +++ b/lib/gitlab/usage_data.rb @@ -49,6 +49,8 @@ module Gitlab deployments: Deployment.count, environments: ::Environment.count, gcp_clusters: ::Gcp::Cluster.count, + gcp_clusters_enabled: ::Gcp::Cluster.enabled.count, + gcp_clusters_disabled: ::Gcp::Cluster.disabled.count, in_review_folder: ::Environment.in_review_folder.count, groups: Group.count, issues: Issue.count, diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 777e9c8e21d..a7b65e94706 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -61,6 +61,8 @@ describe Gitlab::UsageData do deployments environments gcp_clusters + gcp_clusters_enabled + gcp_clusters_disabled in_review_folder groups issues diff --git a/spec/models/gcp/cluster_spec.rb b/spec/models/gcp/cluster_spec.rb index 350fbc257d9..8f39fff6394 100644 --- a/spec/models/gcp/cluster_spec.rb +++ b/spec/models/gcp/cluster_spec.rb @@ -7,6 +7,30 @@ describe Gcp::Cluster do it { is_expected.to validate_presence_of(:gcp_cluster_zone) } + describe '.enabled' do + subject { described_class.enabled } + + let!(:cluster) { create(:gcp_cluster, enabled: true) } + + before do + create(:gcp_cluster, enabled: false) + end + + it { is_expected.to contain_exactly(cluster) } + end + + describe '.disabled' do + subject { described_class.disabled } + + let!(:cluster) { create(:gcp_cluster, enabled: false) } + + before do + create(:gcp_cluster, enabled: true) + end + + it { is_expected.to contain_exactly(cluster) } + end + describe '#default_value_for' do let(:cluster) { described_class.new } -- cgit v1.2.3 From 6526efa657e874e286c851f3890ed775c330ab74 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Mon, 16 Oct 2017 09:10:09 +0000 Subject: Merge branch 'implements-closing-docs' into 'master' Docs for Add "implements" to the default issue closing message regex See merge request gitlab-org/gitlab-ce!14880 (cherry picked from commit fde837d53120a24b2ba512327185f0705e56c9c6) 82f9e809 Update automatic_issue_closing.md --- doc/user/project/issues/automatic_issue_closing.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/user/project/issues/automatic_issue_closing.md b/doc/user/project/issues/automatic_issue_closing.md index d6f3a7d5555..10dede255ec 100644 --- a/doc/user/project/issues/automatic_issue_closing.md +++ b/doc/user/project/issues/automatic_issue_closing.md @@ -19,7 +19,7 @@ When not specified, the default issue closing pattern as shown below will be used: ```bash -((?:[Cc]los(?:e[sd]?|ing)|[Ff]ix(?:e[sd]|ing)?|[Rr]esolv(?:e[sd]?|ing))(:?) +(?:(?:issues? +)?%{issue_ref}(?:(?:, *| +and +)?)|([A-Z][A-Z0-9_]+-\d+))+) +((?:[Cc]los(?:e[sd]?|ing)|[Ff]ix(?:e[sd]|ing)?|[Rr]esolv(?:e[sd]?|ing)|[Ii]mplement(?:s|ed|ing)?)(:?) +(?:(?:issues? +)?%{issue_ref}(?:(?:, *| +and +)?)|([A-Z][A-Z0-9_]+-\d+))+) ``` Note that `%{issue_ref}` is a complex regular expression defined inside GitLab's @@ -34,6 +34,7 @@ This translates to the following keywords: - Close, Closes, Closed, Closing, close, closes, closed, closing - Fix, Fixes, Fixed, Fixing, fix, fixes, fixed, fixing - Resolve, Resolves, Resolved, Resolving, resolve, resolves, resolved, resolving +- Implement, Implements, Implemented, Implementing, implement, implements, implemented, implementing --- -- cgit v1.2.3 From 587d0465ae92951594b8d3de044bb83da13fab8b Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Mon, 16 Oct 2017 09:11:31 +0000 Subject: Merge branch 'an/popen-deadline' into 'master' Popen with a timeout See merge request gitlab-org/gitlab-ce!14872 (cherry picked from commit 8aa6e7ef030a9e7522c533c7e177a618f37265ec) b88e8aae Popen with a timeout f09a7b3c Linter fixes --- app/models/repository.rb | 2 +- changelogs/unreleased/an-popen-deadline.yml | 5 ++ lib/gitlab/git/popen.rb | 63 +++++++++++++ lib/gitlab/git/repository.rb | 7 ++ spec/lib/gitlab/git/popen_spec.rb | 132 ++++++++++++++++++++++++++++ 5 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/an-popen-deadline.yml create mode 100644 spec/lib/gitlab/git/popen_spec.rb diff --git a/app/models/repository.rb b/app/models/repository.rb index bf526ca1762..43521a0ddd3 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -1127,7 +1127,7 @@ class Repository def last_commit_id_for_path_by_shelling_out(sha, path) args = %W(rev-list --max-count=1 #{sha} -- #{path}) - run_git(args).first.strip + raw_repository.run_git_with_timeout(args, Gitlab::Git::Popen::FAST_GIT_PROCESS_TIMEOUT).first.strip end def repository_storage_path diff --git a/changelogs/unreleased/an-popen-deadline.yml b/changelogs/unreleased/an-popen-deadline.yml new file mode 100644 index 00000000000..4b74c63ed5c --- /dev/null +++ b/changelogs/unreleased/an-popen-deadline.yml @@ -0,0 +1,5 @@ +--- +title: Use a timeout on certain git operations +merge_request: 14872 +author: +type: security diff --git a/lib/gitlab/git/popen.rb b/lib/gitlab/git/popen.rb index 3d2fc471d28..b45da6020ee 100644 --- a/lib/gitlab/git/popen.rb +++ b/lib/gitlab/git/popen.rb @@ -5,6 +5,8 @@ require 'open3' module Gitlab module Git module Popen + FAST_GIT_PROCESS_TIMEOUT = 15.seconds + def popen(cmd, path, vars = {}) unless cmd.is_a?(Array) raise "System commands must be given as an array of strings" @@ -27,6 +29,67 @@ module Gitlab [@cmd_output, @cmd_status] end + + def popen_with_timeout(cmd, timeout, path, vars = {}) + unless cmd.is_a?(Array) + raise "System commands must be given as an array of strings" + end + + path ||= Dir.pwd + vars['PWD'] = path + + unless File.directory?(path) + FileUtils.mkdir_p(path) + end + + rout, wout = IO.pipe + rerr, werr = IO.pipe + + pid = Process.spawn(vars, *cmd, out: wout, err: werr, chdir: path, pgroup: true) + + begin + status = process_wait_with_timeout(pid, timeout) + + # close write ends so we could read them + wout.close + werr.close + + cmd_output = rout.readlines.join + cmd_output << rerr.readlines.join # Copying the behaviour of `popen` which merges stderr into output + + [cmd_output, status.exitstatus] + rescue Timeout::Error => e + kill_process_group_for_pid(pid) + + raise e + ensure + wout.close unless wout.closed? + werr.close unless werr.closed? + + rout.close + rerr.close + end + end + + def process_wait_with_timeout(pid, timeout) + deadline = timeout.seconds.from_now + wait_time = 0.01 + + while deadline > Time.now + sleep(wait_time) + _, status = Process.wait2(pid, Process::WNOHANG) + + return status unless status.nil? + end + + raise Timeout::Error, "Timeout waiting for process ##{pid}" + end + + def kill_process_group_for_pid(pid) + Process.kill("KILL", -pid) + Process.wait(pid) + rescue Errno::ESRCH + end end end end diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 0f059bef808..19cbae070ef 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -1057,6 +1057,13 @@ module Gitlab end end + # Refactoring aid; allows us to copy code from app/models/repository.rb + def run_git_with_timeout(args, timeout, env: {}) + circuit_breaker.perform do + popen_with_timeout([Gitlab.config.git.bin_path, *args], timeout, path, env) + end + end + # Refactoring aid; allows us to copy code from app/models/repository.rb def commit(ref = 'HEAD') Gitlab::Git::Commit.find(self, ref) diff --git a/spec/lib/gitlab/git/popen_spec.rb b/spec/lib/gitlab/git/popen_spec.rb new file mode 100644 index 00000000000..2b65bc1cf15 --- /dev/null +++ b/spec/lib/gitlab/git/popen_spec.rb @@ -0,0 +1,132 @@ +require 'spec_helper' + +describe 'Gitlab::Git::Popen' do + let(:path) { Rails.root.join('tmp').to_s } + + let(:klass) do + Class.new(Object) do + include Gitlab::Git::Popen + end + end + + context 'popen' do + context 'zero status' do + let(:result) { klass.new.popen(%w(ls), path) } + let(:output) { result.first } + let(:status) { result.last } + + it { expect(status).to be_zero } + it { expect(output).to include('tests') } + end + + context 'non-zero status' do + let(:result) { klass.new.popen(%w(cat NOTHING), path) } + let(:output) { result.first } + let(:status) { result.last } + + it { expect(status).to eq(1) } + it { expect(output).to include('No such file or directory') } + end + + context 'unsafe string command' do + it 'raises an error when it gets called with a string argument' do + expect { klass.new.popen('ls', path) }.to raise_error(RuntimeError) + end + end + + context 'with custom options' do + let(:vars) { { 'foobar' => 123, 'PWD' => path } } + let(:options) { { chdir: path } } + + it 'calls popen3 with the provided environment variables' do + expect(Open3).to receive(:popen3).with(vars, 'ls', options) + + klass.new.popen(%w(ls), path, { 'foobar' => 123 }) + end + end + + context 'use stdin' do + let(:result) { klass.new.popen(%w[cat], path) { |stdin| stdin.write 'hello' } } + let(:output) { result.first } + let(:status) { result.last } + + it { expect(status).to be_zero } + it { expect(output).to eq('hello') } + end + end + + context 'popen_with_timeout' do + let(:timeout) { 1.second } + + context 'no timeout' do + context 'zero status' do + let(:result) { klass.new.popen_with_timeout(%w(ls), timeout, path) } + let(:output) { result.first } + let(:status) { result.last } + + it { expect(status).to be_zero } + it { expect(output).to include('tests') } + end + + context 'non-zero status' do + let(:result) { klass.new.popen_with_timeout(%w(cat NOTHING), timeout, path) } + let(:output) { result.first } + let(:status) { result.last } + + it { expect(status).to eq(1) } + it { expect(output).to include('No such file or directory') } + end + + context 'unsafe string command' do + it 'raises an error when it gets called with a string argument' do + expect { klass.new.popen_with_timeout('ls', timeout, path) }.to raise_error(RuntimeError) + end + end + end + + context 'timeout' do + context 'timeout' do + it "raises a Timeout::Error" do + expect { klass.new.popen_with_timeout(%w(sleep 1000), timeout, path) }.to raise_error(Timeout::Error) + end + + it "handles processes that do not shutdown correctly" do + expect { klass.new.popen_with_timeout(['bash', '-c', "trap -- '' SIGTERM; sleep 1000"], timeout, path) }.to raise_error(Timeout::Error) + end + end + + context 'timeout period' do + let(:time_taken) do + begin + start = Time.now + klass.new.popen_with_timeout(%w(sleep 1000), timeout, path) + rescue + Time.now - start + end + end + + it { expect(time_taken).to be >= timeout } + end + + context 'clean up' do + let(:instance) { klass.new } + + it 'kills the child process' do + expect(instance).to receive(:kill_process_group_for_pid).and_wrap_original do |m, *args| + # is the PID, and it should not be running at this point + m.call(*args) + + pid = args.first + begin + Process.getpgid(pid) + raise "The child process should have been killed" + rescue Errno::ESRCH + end + end + + expect { instance.popen_with_timeout(['bash', '-c', "trap -- '' SIGTERM; sleep 1000"], timeout, path) }.to raise_error(Timeout::Error) + end + end + end + end +end -- cgit v1.2.3 From 5f938194debcc998de449c5ed31bd02d9e081fa7 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Mon, 16 Oct 2017 11:05:30 +0000 Subject: Merge branch 'winh-indeterminate-dropdown' into 'master' Fix alignment for indeterminate marker in dropdowns Closes #38963 See merge request gitlab-org/gitlab-ce!14809 (cherry picked from commit 22ef1c1a4b7927b664c5b589d222970af08fd814) 56e6dab0 Fix alignment for indeterminate marker in dropdowns --- app/assets/stylesheets/framework/dropdowns.scss | 1 + changelogs/unreleased/winh-indeterminate-dropdown.yml | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 changelogs/unreleased/winh-indeterminate-dropdown.yml diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index 9dcf332eee2..a9d804e735d 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -838,6 +838,7 @@ a { padding: 8px 40px; + &.is-indeterminate::before, &.is-active::before { left: 16px; } diff --git a/changelogs/unreleased/winh-indeterminate-dropdown.yml b/changelogs/unreleased/winh-indeterminate-dropdown.yml new file mode 100644 index 00000000000..61205d1643e --- /dev/null +++ b/changelogs/unreleased/winh-indeterminate-dropdown.yml @@ -0,0 +1,5 @@ +--- +title: Fix alignment for indeterminate marker in dropdowns +merge_request: 14809 +author: +type: fixed -- cgit v1.2.3 From cdcba65dd622cabd5bce65c0f7a862bf77b7feb0 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Mon, 16 Oct 2017 12:19:52 +0000 Subject: Merge branch 'patch-19' into 'master' update postgresql requirements See merge request gitlab-org/gitlab-ce!14885 (cherry picked from commit 03699653d6946a4b6ee178214d864d1add4f5cf1) dbfc82df update postgresql requirements --- doc/install/requirements.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/install/requirements.md b/doc/install/requirements.md index 17fe80fa93d..3d7becd18fc 100644 --- a/doc/install/requirements.md +++ b/doc/install/requirements.md @@ -121,8 +121,8 @@ Existing users using GitLab with MySQL/MariaDB are advised to ### PostgreSQL Requirements -As of GitLab 9.3, PostgreSQL 9.2 or newer is required, and earlier versions are -not supported. We highly recommend users to use at least PostgreSQL 9.6 as this +As of GitLab 10.0, PostgreSQL 9.6 or newer is required, and earlier versions are +not supported. We highly recommend users to use PostgreSQL 9.6 as this is the PostgreSQL version used for development and testing. Users using PostgreSQL must ensure the `pg_trgm` extension is loaded into every -- cgit v1.2.3 From 17771216011a8de1eca4e341cf27a79f9ae6068a Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Mon, 16 Oct 2017 16:16:43 +0000 Subject: Merge branch 'fl-autodevops-fix' into 'master' Remove banner from pipelines page Closes #38641, #39051, and #38827 See merge request gitlab-org/gitlab-ce!14849 (cherry picked from commit 7996be6070439f6faf379c116764ea45090fb930) 87cff693 Remove banner from pipelines page c88fef16 Format banner like service desk 05f21311 Update link to settings page instead of documentation page 68343b99 Improve mobile view ea852324 Removes unneeded CSS 4eac69c5 Remove extra class breaking layout in smaller screens db5ebef3 Improve check for permissions on empty project page --- app/assets/javascripts/dispatcher.js | 12 ++++------ app/assets/stylesheets/framework.scss | 1 + app/assets/stylesheets/framework/banner.scss | 25 +++++++++++++++++++ app/views/projects/empty.html.haml | 9 +++++-- app/views/projects/merge_requests/index.html.haml | 2 -- app/views/projects/pipelines/index.html.haml | 2 -- app/views/projects/tree/show.html.haml | 2 -- app/views/shared/_auto_devops_callout.html.haml | 29 ++++++++++++----------- app/views/shared/icons/_icon_autodevops.svg | 2 +- changelogs/unreleased/fl-autodevops-fix.yml | 5 ++++ 10 files changed, 58 insertions(+), 31 deletions(-) create mode 100644 app/assets/stylesheets/framework/banner.scss create mode 100644 changelogs/unreleased/fl-autodevops-fix.yml diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js index 1edd460f380..d7995b59a7b 100644 --- a/app/assets/javascripts/dispatcher.js +++ b/app/assets/javascripts/dispatcher.js @@ -161,9 +161,6 @@ import AjaxLoadingSpinner from './ajax_loading_spinner'; const filteredSearchManager = new gl.FilteredSearchManager(page === 'projects:issues:index' ? 'issues' : 'merge_requests'); filteredSearchManager.setup(); } - if (page === 'projects:merge_requests:index') { - new UserCallout({ setCalloutPerProject: true }); - } const pagePrefix = page === 'projects:merge_requests:index' ? 'merge_request_' : 'issue_'; IssuableIndex.init(pagePrefix); @@ -345,7 +342,10 @@ import AjaxLoadingSpinner from './ajax_loading_spinner'; case 'projects:show': shortcut_handler = new ShortcutsNavigation(); new NotificationsForm(); - new UserCallout({ setCalloutPerProject: true }); + new UserCallout({ + setCalloutPerProject: true, + className: 'js-autodevops-banner', + }); if ($('#tree-slider').length) new TreeView(); if ($('.blob-viewer').length) new BlobViewer(); @@ -365,9 +365,6 @@ import AjaxLoadingSpinner from './ajax_loading_spinner'; case 'projects:pipelines:new': new NewBranchForm($('.js-new-pipeline-form')); break; - case 'projects:pipelines:index': - new UserCallout({ setCalloutPerProject: true }); - break; case 'projects:pipelines:builds': case 'projects:pipelines:failures': case 'projects:pipelines:show': @@ -425,7 +422,6 @@ import AjaxLoadingSpinner from './ajax_loading_spinner'; new TreeView(); new BlobViewer(); new NewCommitForm($('.js-create-dir-form')); - new UserCallout({ setCalloutPerProject: true }); $('#tree-slider').waitForImages(function() { ajaxGet(document.querySelector('.js-tree-content').dataset.logsPath); }); diff --git a/app/assets/stylesheets/framework.scss b/app/assets/stylesheets/framework.scss index 0d7a5cba928..aa61ddc6a2c 100644 --- a/app/assets/stylesheets/framework.scss +++ b/app/assets/stylesheets/framework.scss @@ -7,6 +7,7 @@ @import "framework/animations"; @import "framework/avatar"; @import "framework/asciidoctor"; +@import "framework/banner"; @import "framework/blocks"; @import "framework/buttons"; @import "framework/badges"; diff --git a/app/assets/stylesheets/framework/banner.scss b/app/assets/stylesheets/framework/banner.scss new file mode 100644 index 00000000000..6433b0c7855 --- /dev/null +++ b/app/assets/stylesheets/framework/banner.scss @@ -0,0 +1,25 @@ +.banner-callout { + display: flex; + position: relative; + flex-wrap: wrap; + + .banner-close { + position: absolute; + top: 10px; + right: 10px; + opacity: 1; + + .dismiss-icon { + color: $gl-text-color; + font-size: $gl-font-size; + } + } + + .banner-graphic { + margin: 20px auto; + } + + &.banner-non-empty-state { + border-bottom: 1px solid $border-color; + } +} diff --git a/app/views/projects/empty.html.haml b/app/views/projects/empty.html.haml index 3f3ce10419f..c9956183e12 100644 --- a/app/views/projects/empty.html.haml +++ b/app/views/projects/empty.html.haml @@ -24,10 +24,15 @@ %p You will need to be owner or have the master permission level for the initial push, as the master branch is automatically protected. + - if show_auto_devops_callout?(@project) + %p + - link = link_to(s_('AutoDevOps|Auto DevOps (Beta)'), project_settings_ci_cd_path(@project, anchor: 'js-general-pipeline-settings')) + = s_('AutoDevOps|You can activate %{link_to_settings} for this project.').html_safe % { link_to_settings: link } + %p + = s_('AutoDevOps|It will automatically build, test, and deploy your application based on a predefined CI/CD configuration.') + - if can?(current_user, :push_code, @project) %div{ class: container_class } - - if show_auto_devops_callout?(@project) - = render 'shared/auto_devops_callout' .prepend-top-20 .empty_wrapper %h3.page-title-empty diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml index 6b8dcb3e60b..8da2243adef 100644 --- a/app/views/projects/merge_requests/index.html.haml +++ b/app/views/projects/merge_requests/index.html.haml @@ -13,8 +13,6 @@ - if @project.merge_requests.exists? %div{ class: container_class } - - if show_auto_devops_callout?(@project) - = render 'shared/auto_devops_callout' .top-area = render 'shared/issuable/nav', type: :merge_requests .nav-controls diff --git a/app/views/projects/pipelines/index.html.haml b/app/views/projects/pipelines/index.html.haml index a10a7c23924..f8627a3818b 100644 --- a/app/views/projects/pipelines/index.html.haml +++ b/app/views/projects/pipelines/index.html.haml @@ -2,8 +2,6 @@ - page_title "Pipelines" %div{ 'class' => container_class } - - if show_auto_devops_callout?(@project) - = render 'shared/auto_devops_callout' #pipelines-list-vue{ data: { endpoint: project_pipelines_path(@project, format: :json), "help-page-path" => help_page_path('ci/quick_start/README'), "help-auto-devops-path" => help_page_path('topics/autodevops/index.md'), diff --git a/app/views/projects/tree/show.html.haml b/app/views/projects/tree/show.html.haml index 0cc6674842a..745a6040488 100644 --- a/app/views/projects/tree/show.html.haml +++ b/app/views/projects/tree/show.html.haml @@ -12,7 +12,5 @@ = webpack_bundle_tag 'repo' %div{ class: [container_class, ("limit-container-width" unless fluid_layout)] } - - if show_auto_devops_callout?(@project) && !show_new_repo? - = render 'shared/auto_devops_callout' = render 'projects/last_push' = render 'projects/files', commit: @last_commit, project: @project, ref: @ref, content_url: project_tree_path(@project, @id) diff --git a/app/views/shared/_auto_devops_callout.html.haml b/app/views/shared/_auto_devops_callout.html.haml index 7c633175a06..934d65e8b42 100644 --- a/app/views/shared/_auto_devops_callout.html.haml +++ b/app/views/shared/_auto_devops_callout.html.haml @@ -1,15 +1,16 @@ -.user-callout{ data: { uid: 'auto_devops_settings_dismissed', project_path: project_path(@project) } } - .bordered-box.landing.content-block - %button.btn.btn-default.close.js-close-callout{ type: 'button', - 'aria-label' => 'Dismiss Auto DevOps box' } - = icon('times', class: 'dismiss-icon', 'aria-hidden' => 'true') - .svg-container - = custom_icon('icon_autodevops') - .user-callout-copy - %h4= s_('AutoDevOps|Auto DevOps (Beta)') - %p= s_('AutoDevOps|Auto DevOps can be activated for this project. It will automatically build, test, and deploy your application based on a predefined CI/CD configuration.') - %p - - link = link_to(s_('AutoDevOps|Auto DevOps documentation'), help_page_path('topics/autodevops/index.md'), target: '_blank', rel: 'noopener noreferrer') - = s_('AutoDevOps|Learn more in the %{link_to_documentation}').html_safe % { link_to_documentation: link } +.js-autodevops-banner.banner-callout.banner-non-empty-state.append-bottom-20{ data: { uid: 'auto_devops_settings_dismissed', project_path: project_path(@project) } } + .banner-graphic + = custom_icon('icon_autodevops') - = link_to s_('AutoDevOps|Enable in settings'), project_settings_ci_cd_path(@project, anchor: 'js-general-pipeline-settings'), class: 'btn btn-primary js-close-callout' + .prepend-top-10.prepend-left-10.append-bottom-10 + %h5= s_('AutoDevOps|Auto DevOps (Beta)') + %p= s_('AutoDevOps|It will automatically build, test, and deploy your application based on a predefined CI/CD configuration.') + %p + - link = link_to(s_('AutoDevOps|Auto DevOps documentation'), help_page_path('topics/autodevops/index.md'), target: '_blank', rel: 'noopener noreferrer') + = s_('AutoDevOps|Learn more in the %{link_to_documentation}').html_safe % { link_to_documentation: link } + .prepend-top-10 + = link_to s_('AutoDevOps|Enable in settings'), project_settings_ci_cd_path(@project, anchor: 'js-general-pipeline-settings'), class: 'btn js-close-callout' + + %button.btn-transparent.banner-close.close.js-close-callout{ type: 'button', + 'aria-label' => 'Dismiss Auto DevOps box' } + = icon('times', class: 'dismiss-icon', 'aria-hidden' => 'true') diff --git a/app/views/shared/icons/_icon_autodevops.svg b/app/views/shared/icons/_icon_autodevops.svg index 807ff27bb67..7e47c084bde 100644 --- a/app/views/shared/icons/_icon_autodevops.svg +++ b/app/views/shared/icons/_icon_autodevops.svg @@ -1,4 +1,4 @@ - + diff --git a/changelogs/unreleased/fl-autodevops-fix.yml b/changelogs/unreleased/fl-autodevops-fix.yml new file mode 100644 index 00000000000..21b739231a8 --- /dev/null +++ b/changelogs/unreleased/fl-autodevops-fix.yml @@ -0,0 +1,5 @@ +--- +title: Improve autodevops banner UX and render it only in project page +merge_request: +author: +type: fixed -- cgit v1.2.3 From 081fe8187f5bb7e6d131e5f45eb54d35e0a26664 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Mon, 16 Oct 2017 17:07:02 +0000 Subject: Merge branch 'update-new-project-docs' into 'master' Update new project docs See merge request gitlab-org/gitlab-ce!14893 (cherry picked from commit 7685314fd22f27b45e2e8522f922f5b52538063d) e11ef753 Update new project docs --- doc/gitlab-basics/create-project.md | 2 +- doc/gitlab-basics/img/create_new_project_info.png | Bin 82725 -> 75470 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/gitlab-basics/create-project.md b/doc/gitlab-basics/create-project.md index 67ef189fee9..e18711f3392 100644 --- a/doc/gitlab-basics/create-project.md +++ b/doc/gitlab-basics/create-project.md @@ -17,7 +17,7 @@ [Project Templates](https://gitlab.com/gitlab-org/project-templates): this will kickstart your repository code and CI automatically. Otherwise, if you have a project in a different repository, you can [import it] by - clicking an **Import project from** button provided this is enabled in + clicking on the **Import project** tab, provided this is enabled in your GitLab instance. Ask your administrator if not. 1. Provide the following information: diff --git a/doc/gitlab-basics/img/create_new_project_info.png b/doc/gitlab-basics/img/create_new_project_info.png index ef8753e224b..ce4f7d1204b 100644 Binary files a/doc/gitlab-basics/img/create_new_project_info.png and b/doc/gitlab-basics/img/create_new_project_info.png differ -- cgit v1.2.3 From 548ccf30806f0fd8c174ab4bdf002f0f40da29ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Tue, 17 Oct 2017 11:01:41 +0000 Subject: Merge branch 'bump-git-2-13-6' into 'master' Bump Git version to 2.13.6 See merge request gitlab-org/gitlab-ce!14906 (cherry picked from commit 4220cd0fa25b89fe70ff74d21f6cf8f72d9a2cd8) ca2d1f9f Bump Git version to 2.13.6 --- doc/install/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/install/installation.md b/doc/install/installation.md index 2c93297ca2f..2a004152d5e 100644 --- a/doc/install/installation.md +++ b/doc/install/installation.md @@ -80,7 +80,7 @@ Make sure you have the right version of Git installed # Install Git sudo apt-get install -y git-core - # Make sure Git is version 2.13.0 or higher + # Make sure Git is version 2.13.6 or higher git --version Is the system packaged Git too old? Remove it and compile from source. -- cgit v1.2.3 From b2894dbceb7cce3e9ae00527724be515a290e809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Tue, 17 Oct 2017 13:36:25 +0000 Subject: Merge branch '39181-gitlab-backgroundmigration-deserializemergerequestdiffsandcommits-error-nomethoderror-undefined-method-map-for-nil-nilclass' into 'master' Resolve "Gitlab::BackgroundMigration::DeserializeMergeRequestDiffsAndCommits::Error: # Date: Tue, 17 Oct 2017 13:53:42 +0000 Subject: Merge branch 'prevent-creating-multiple-application-settings' into 'master' Prevent creating multiple ApplicationSetting by forcing it to always have id=1 Closes #34728 See merge request gitlab-org/gitlab-ce!14718 (cherry picked from commit 65a1cbc600cf36ff5db9644072e4bf1e2b8e5cde) c909b6aa Prevent creating multiple ApplicationSetting by forcing it to always have id=1 --- app/models/application_setting.rb | 2 ++ .../prevent-creating-multiple-application-settings.yml | 5 +++++ spec/models/application_setting_spec.rb | 10 ++++++++++ 3 files changed, 17 insertions(+) create mode 100644 changelogs/unreleased/prevent-creating-multiple-application-settings.yml diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index c0cc60d5ebf..5b5bb3cbe2c 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -33,6 +33,8 @@ class ApplicationSetting < ActiveRecord::Base attr_accessor :domain_whitelist_raw, :domain_blacklist_raw + default_value_for :id, 1 + validates :uuid, presence: true validates :session_expire_delay, diff --git a/changelogs/unreleased/prevent-creating-multiple-application-settings.yml b/changelogs/unreleased/prevent-creating-multiple-application-settings.yml new file mode 100644 index 00000000000..fd49028b9e9 --- /dev/null +++ b/changelogs/unreleased/prevent-creating-multiple-application-settings.yml @@ -0,0 +1,5 @@ +--- +title: Prevent creating multiple ApplicationSetting instances +merge_request: +author: +type: fixed diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index 78cacf9ff5d..eff84c308b5 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -209,6 +209,16 @@ describe ApplicationSetting do end end + context 'restrict creating duplicates' do + before do + described_class.create_from_defaults + end + + it 'raises an record creation violation if already created' do + expect { described_class.create_from_defaults }.to raise_error(ActiveRecord::RecordNotUnique) + end + end + context 'restricted signup domains' do it 'sets single domain' do setting.domain_whitelist_raw = 'example.com' -- cgit v1.2.3 From bb1dd1258a328923669e7cbe8e186012a3c25689 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Tue, 17 Oct 2017 15:42:05 +0000 Subject: Merge branch 'bvl-fix-deleting-forked-projects' into 'master' Fix errors when deleting a forked project Closes #39196 See merge request gitlab-org/gitlab-ce!14916 (cherry picked from commit 85d8ab52ca27c5bcd9036aa81a9f0ace9794ee0d) 2c0b6776 Fix errors when deleting a forked project --- app/models/project.rb | 2 +- app/services/projects/unlink_fork_service.rb | 2 +- .../unreleased/bvl-fix-deleting-forked-projects.yml | 5 +++++ spec/services/projects/destroy_service_spec.rb | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/bvl-fix-deleting-forked-projects.yml diff --git a/app/models/project.rb b/app/models/project.rb index 57e91ab3b88..984ef015f4a 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1262,7 +1262,7 @@ class Project < ActiveRecord::Base # self.forked_from_project will be nil before the project is saved, so # we need to go through the relation - original_project = forked_project_link.forked_from_project + original_project = forked_project_link&.forked_from_project return true unless original_project level <= original_project.visibility_level diff --git a/app/services/projects/unlink_fork_service.rb b/app/services/projects/unlink_fork_service.rb index abe414d0c05..2b82e5732e4 100644 --- a/app/services/projects/unlink_fork_service.rb +++ b/app/services/projects/unlink_fork_service.rb @@ -15,8 +15,8 @@ module Projects refresh_forks_count(@project.forked_from_project) - @project.forked_project_link.destroy @project.fork_network_member.destroy + @project.forked_project_link.destroy end def refresh_forks_count(project) diff --git a/changelogs/unreleased/bvl-fix-deleting-forked-projects.yml b/changelogs/unreleased/bvl-fix-deleting-forked-projects.yml new file mode 100644 index 00000000000..95f56facc4b --- /dev/null +++ b/changelogs/unreleased/bvl-fix-deleting-forked-projects.yml @@ -0,0 +1,5 @@ +--- +title: Fix error when updating a forked project with deleted `ForkedProjectLink` +merge_request: 14916 +author: +type: fixed diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb index c90bad46295..0bec2054f50 100644 --- a/spec/services/projects/destroy_service_spec.rb +++ b/spec/services/projects/destroy_service_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Projects::DestroyService do + include ProjectForksHelper + let!(:user) { create(:user) } let!(:project) { create(:project, :repository, namespace: user.namespace) } let!(:path) { project.repository.path_to_repo } @@ -212,6 +214,21 @@ describe Projects::DestroyService do end end + context 'for a forked project with LFS objects' do + let(:forked_project) { fork_project(project, user) } + + before do + project.lfs_objects << create(:lfs_object) + forked_project.forked_project_link.destroy + forked_project.reload + end + + it 'destroys the fork' do + expect { destroy_project(forked_project, user) } + .not_to raise_error + end + end + context 'as the root of a fork network' do let!(:fork_network) { create(:fork_network, root_project: project) } -- cgit v1.2.3 From 5b96af98521f583cb9a63270c4060f19095a86ac Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 18 Oct 2017 09:02:32 +0000 Subject: Merge branch 'kt/bug/fix-revision-and-size-for-container-registry' into 'master' Add short_revision and use total_size Closes #39203 See merge request gitlab-org/gitlab-ce!14917 (cherry picked from commit 0fa2f14857ceb5b5b52595555bb2c3e6e930e1f7) 5ee58c1c Add short_revision and use total_size 6d2338c7 Fix failed test 6ac0a69b Fix broken test --- app/assets/javascripts/registry/stores/mutations.js | 2 +- app/serializers/container_tag_entity.rb | 2 +- .../kt-bug-fix-revision-and-size-for-container-registry.yml | 5 +++++ spec/fixtures/api/schemas/registry/tag.json | 5 +++++ spec/javascripts/registry/mock_data.js | 8 ++++---- spec/serializers/container_tag_entity_spec.rb | 2 +- 6 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 changelogs/unreleased/kt-bug-fix-revision-and-size-for-container-registry.yml diff --git a/app/assets/javascripts/registry/stores/mutations.js b/app/assets/javascripts/registry/stores/mutations.js index e40382e7afc..208c3c39866 100644 --- a/app/assets/javascripts/registry/stores/mutations.js +++ b/app/assets/javascripts/registry/stores/mutations.js @@ -38,7 +38,7 @@ export default { tag: element.name, revision: element.revision, shortRevision: element.short_revision, - size: element.size, + size: element.total_size, layers: element.layers, location: element.location, createdAt: element.created_at, diff --git a/app/serializers/container_tag_entity.rb b/app/serializers/container_tag_entity.rb index ec1fc349586..26a68c43807 100644 --- a/app/serializers/container_tag_entity.rb +++ b/app/serializers/container_tag_entity.rb @@ -1,7 +1,7 @@ class ContainerTagEntity < Grape::Entity include RequestAwareEntity - expose :name, :location, :revision, :total_size, :created_at + expose :name, :location, :revision, :short_revision, :total_size, :created_at expose :destroy_path, if: -> (*) { can_destroy? } do |tag| project_registry_repository_tag_path(project, tag.repository, tag.name, format: :json) diff --git a/changelogs/unreleased/kt-bug-fix-revision-and-size-for-container-registry.yml b/changelogs/unreleased/kt-bug-fix-revision-and-size-for-container-registry.yml new file mode 100644 index 00000000000..acbb24d16fc --- /dev/null +++ b/changelogs/unreleased/kt-bug-fix-revision-and-size-for-container-registry.yml @@ -0,0 +1,5 @@ +--- +title: Fix revision and total size missing for Container Registry +merge_request: +author: +type: fixed diff --git a/spec/fixtures/api/schemas/registry/tag.json b/spec/fixtures/api/schemas/registry/tag.json index 5bc307e0e64..3a2c88791e1 100644 --- a/spec/fixtures/api/schemas/registry/tag.json +++ b/spec/fixtures/api/schemas/registry/tag.json @@ -14,6 +14,11 @@ "revision": { "type": "string" }, + "short_revision": { + "type": "string", + "minLength": 9, + "maxLength": 9 + }, "total_size": { "type": "integer" }, diff --git a/spec/javascripts/registry/mock_data.js b/spec/javascripts/registry/mock_data.js index 18600d00bff..6bffb47be55 100644 --- a/spec/javascripts/registry/mock_data.js +++ b/spec/javascripts/registry/mock_data.js @@ -26,7 +26,7 @@ export const registryServerResponse = [ name: 'centos7', short_revision: 'b118ab5b0', revision: 'b118ab5b0e90b7cb5127db31d5321ac14961d097516a8e0e72084b6cdc783b43', - size: 679, + total_size: 679, layers: 19, location: 'location', created_at: 1505828744434, @@ -36,7 +36,7 @@ export const registryServerResponse = [ name: 'centos6', short_revision: 'b118ab5b0', revision: 'b118ab5b0e90b7cb5127db31d5321ac14961d097516a8e0e72084b6cdc783b43', - size: 679, + total_size: 679, layers: 19, location: 'location', created_at: 1505828744434, @@ -70,7 +70,7 @@ export const parsedRegistryServerResponse = [ tag: registryServerResponse[0].name, revision: registryServerResponse[0].revision, shortRevision: registryServerResponse[0].short_revision, - size: registryServerResponse[0].size, + size: registryServerResponse[0].total_size, layers: registryServerResponse[0].layers, location: registryServerResponse[0].location, createdAt: registryServerResponse[0].created_at, @@ -81,7 +81,7 @@ export const parsedRegistryServerResponse = [ tag: registryServerResponse[1].name, revision: registryServerResponse[1].revision, shortRevision: registryServerResponse[1].short_revision, - size: registryServerResponse[1].size, + size: registryServerResponse[1].total_size, layers: registryServerResponse[1].layers, location: registryServerResponse[1].location, createdAt: registryServerResponse[1].created_at, diff --git a/spec/serializers/container_tag_entity_spec.rb b/spec/serializers/container_tag_entity_spec.rb index 6dcc5204516..4beb50c70f8 100644 --- a/spec/serializers/container_tag_entity_spec.rb +++ b/spec/serializers/container_tag_entity_spec.rb @@ -22,7 +22,7 @@ describe ContainerTagEntity do end it 'exposes required informations' do - expect(subject).to include(:name, :location, :revision, :total_size, :created_at) + expect(subject).to include(:name, :location, :revision, :short_revision, :total_size, :created_at) end context 'when user can manage repositories' do -- cgit v1.2.3 From f629db71b93603e043d8c254350b020907656672 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Mon, 16 Oct 2017 15:06:58 +0000 Subject: Merge branch '39017-gitlabusagepingworker-is-not-running-on-gitlab-com' into 'master' Resolve "GitlabUsagePingWorker is not running on GitLab.com" See merge request gitlab-org/gitlab-ce!14867 (cherry picked from commit 07e330896755b5a84f92042e7437ab78dfeeaae4) f4e94c6f Make usage ping scheduling more robust --- ...17-gitlabusagepingworker-is-not-running-on-gitlab-com.yml | 5 +++++ config/initializers/1_settings.rb | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 changelogs/unreleased/39017-gitlabusagepingworker-is-not-running-on-gitlab-com.yml diff --git a/changelogs/unreleased/39017-gitlabusagepingworker-is-not-running-on-gitlab-com.yml b/changelogs/unreleased/39017-gitlabusagepingworker-is-not-running-on-gitlab-com.yml new file mode 100644 index 00000000000..89506f88637 --- /dev/null +++ b/changelogs/unreleased/39017-gitlabusagepingworker-is-not-running-on-gitlab-com.yml @@ -0,0 +1,5 @@ +--- +title: Make usage ping scheduling more robust +merge_request: +author: +type: fixed diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index a4b7c1a3919..b790df565c6 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -113,12 +113,14 @@ class Settings < Settingslogic URI.parse(url_without_path).host end - # Random cron time every Sunday to load balance usage pings - def cron_random_weekly_time + # Runs every minute in a random ten-minute period on Sundays, to balance the + # load on the server receiving these pings. The usage ping is safe to run + # multiple times because of a 24 hour exclusive lock. + def cron_for_usage_ping hour = rand(24) - minute = rand(60) + minute = rand(6) - "#{minute} #{hour} * * 0" + "#{minute}0-#{minute}9 #{hour} * * 0" end end end @@ -398,7 +400,7 @@ Settings.cron_jobs['stuck_import_jobs_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['stuck_import_jobs_worker']['cron'] ||= '15 * * * *' Settings.cron_jobs['stuck_import_jobs_worker']['job_class'] = 'StuckImportJobsWorker' Settings.cron_jobs['gitlab_usage_ping_worker'] ||= Settingslogic.new({}) -Settings.cron_jobs['gitlab_usage_ping_worker']['cron'] ||= Settings.__send__(:cron_random_weekly_time) +Settings.cron_jobs['gitlab_usage_ping_worker']['cron'] ||= Settings.__send__(:cron_for_usage_ping) Settings.cron_jobs['gitlab_usage_ping_worker']['job_class'] = 'GitlabUsagePingWorker' Settings.cron_jobs['schedule_update_user_activity_worker'] ||= Settingslogic.new({}) -- cgit v1.2.3 From e6555fb16c00488996e05704c73b26c8586ccd78 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 18 Oct 2017 11:10:41 +0000 Subject: Merge branch '39201-improve-google-image' into 'master' Replace google login image Closes #39201 See merge request gitlab-org/gitlab-ce!14919 (cherry picked from commit 1d72952dc340024cba9bba94d87e871e043164f9) 5df66e6b Replace google login image --- app/assets/images/auth_buttons/signin_with_google.png | Bin 3983 -> 8001 bytes app/views/projects/clusters/login.html.haml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/images/auth_buttons/signin_with_google.png b/app/assets/images/auth_buttons/signin_with_google.png index b1327b4f7b4..f27bb243304 100644 Binary files a/app/assets/images/auth_buttons/signin_with_google.png and b/app/assets/images/auth_buttons/signin_with_google.png differ diff --git a/app/views/projects/clusters/login.html.haml b/app/views/projects/clusters/login.html.haml index ae132672b7e..fde030b500b 100644 --- a/app/views/projects/clusters/login.html.haml +++ b/app/views/projects/clusters/login.html.haml @@ -10,7 +10,7 @@ .col-sm-8.col-sm-offset-4.signin-with-google - if @authorize_url = link_to @authorize_url do - = image_tag('auth_buttons/signin_with_google.png') + = image_tag('auth_buttons/signin_with_google.png', width: '191px') - else - link = link_to(s_('ClusterIntegration|properly configured'), help_page_path("integration/google"), target: '_blank', rel: 'noopener noreferrer') = s_('Google authentication is not %{link_to_documentation}. Ask your GitLab administrator if you want to use this service.').html_safe % { link_to_documentation: link } -- cgit v1.2.3 From 0f4141f79058a3265f65ad1420fedc060000723c Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 18 Oct 2017 12:13:11 +0000 Subject: Merge branch 'fix-resolved-side-by-side' into 'master' Fix resolved discussions not expanding on side by side view Closes #39209 See merge request gitlab-org/gitlab-ce!14918 (cherry picked from commit acadf527117d759b6b8ca27245a8d85d01f77bc2) f8cf00fd Fix resolved discussions not expanding on side by side view 07c81f23 Add specs 3581c6db Improve spec --- .../_parallel_diff_discussion.html.haml | 4 +-- .../unreleased/fix-resolved-side-by-side.yml | 5 ++++ .../merge_requests/diff_notes_resolve_spec.rb | 29 ++++++++++++++++++---- 3 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 changelogs/unreleased/fix-resolved-side-by-side.yml diff --git a/app/views/discussions/_parallel_diff_discussion.html.haml b/app/views/discussions/_parallel_diff_discussion.html.haml index 253cd336882..079d9083dff 100644 --- a/app/views/discussions/_parallel_diff_discussion.html.haml +++ b/app/views/discussions/_parallel_diff_discussion.html.haml @@ -4,7 +4,7 @@ %td.notes_line.old %td.notes_content.parallel.old .content{ class: ('hide' unless discussions_left.any?(&:expanded?)) } - = render partial: "discussions/notes", collection: discussions_left, as: :discussion, line_type: 'old' + = render partial: "discussions/notes", collection: discussions_left, as: :discussion, line_type: 'old', locals: { disable_collapse_class: true } - else %td.notes_line.old= ("") %td.notes_content.parallel.old @@ -14,7 +14,7 @@ %td.notes_line.new %td.notes_content.parallel.new .content{ class: ('hide' unless discussions_right.any?(&:expanded?)) } - = render partial: "discussions/notes", collection: discussions_right, as: :discussion, line_type: 'new' + = render partial: "discussions/notes", collection: discussions_right, as: :discussion, line_type: 'new', locals: { disable_collapse_class: true } - else %td.notes_line.new= ("") %td.notes_content.parallel.new diff --git a/changelogs/unreleased/fix-resolved-side-by-side.yml b/changelogs/unreleased/fix-resolved-side-by-side.yml new file mode 100644 index 00000000000..424130c3eb0 --- /dev/null +++ b/changelogs/unreleased/fix-resolved-side-by-side.yml @@ -0,0 +1,5 @@ +--- +title: Fix resolved discussions not expanding on side by side view +merge_request: +author: +type: fixed diff --git a/spec/features/merge_requests/diff_notes_resolve_spec.rb b/spec/features/merge_requests/diff_notes_resolve_spec.rb index 475c8586f45..3db0729cafb 100644 --- a/spec/features/merge_requests/diff_notes_resolve_spec.rb +++ b/spec/features/merge_requests/diff_notes_resolve_spec.rb @@ -97,14 +97,33 @@ feature 'Diff notes resolve', :js do visit_merge_request end - it 'hides when resolve discussion is clicked' do - expect(page).to have_selector('.discussion-body', visible: false) + describe 'timeline view' do + it 'hides when resolve discussion is clicked' do + expect(page).to have_selector('.discussion-body', visible: false) + end + + it 'shows resolved discussion when toggled' do + find(".timeline-content .discussion[data-discussion-id='#{note.discussion_id}'] .discussion-toggle-button").click + + expect(page.find(".timeline-content #note_#{note.noteable_id}")).to be_visible + end end - it 'shows resolved discussion when toggled' do - find(".timeline-content .discussion[data-discussion-id='#{note.discussion_id}'] .discussion-toggle-button").click + describe 'side-by-side view' do + before do + page.within('.merge-request-tabs') { click_link 'Changes' } + page.find('#parallel-diff-btn').click + end - expect(page.find(".timeline-content #note_#{note.noteable_id}")).to be_visible + it 'hides when resolve discussion is clicked' do + expect(page).to have_selector('.diffs .diff-file .notes_holder', visible: false) + end + + it 'shows resolved discussion when toggled' do + find('.diff-comment-avatar-holders').click + + expect(find('.diffs .diff-file .notes_holder')).to be_visible + end end end -- cgit v1.2.3 From 888b43affc3d5c287b409294b6ec95b5d56d617a Mon Sep 17 00:00:00 2001 From: Tim Zallmann Date: Wed, 18 Oct 2017 12:37:11 +0000 Subject: Merge branch 'bvl-fix-locale-path' into 'master' Render region codes for locale assets with an `_` instead of a `-` Closes #39225 See merge request gitlab-org/gitlab-ce!14924 (cherry picked from commit 4733570c3d710f3124718fa1173f3068eb932281) 939469cd Build the locale path with an `_` instead of a `-` --- app/helpers/application_helper.rb | 4 ++++ app/views/layouts/_head.html.haml | 2 +- changelogs/unreleased/bvl-fix-locale-path.yml | 5 +++++ spec/helpers/application_helper_spec.rb | 8 ++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/bvl-fix-locale-path.yml diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 8d02d5de5c3..4754a67450f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -309,4 +309,8 @@ module ApplicationHelper def show_new_repo? cookies["new_repo"] == "true" && body_data_page != 'projects:show' end + + def locale_path + asset_path("locale/#{Gitlab::I18n.locale}/app.js") + end end diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml index f1b32274664..1597621fa78 100644 --- a/app/views/layouts/_head.html.haml +++ b/app/views/layouts/_head.html.haml @@ -37,7 +37,7 @@ - if content_for?(:library_javascripts) = yield :library_javascripts - = javascript_include_tag asset_path("locale/#{I18n.locale.to_s || I18n.default_locale.to_s}/app.js") unless I18n.locale == :en + = javascript_include_tag locale_path unless I18n.locale == :en = webpack_bundle_tag "webpack_runtime" = webpack_bundle_tag "common" = webpack_bundle_tag "main" diff --git a/changelogs/unreleased/bvl-fix-locale-path.yml b/changelogs/unreleased/bvl-fix-locale-path.yml new file mode 100644 index 00000000000..97e0e000e3c --- /dev/null +++ b/changelogs/unreleased/bvl-fix-locale-path.yml @@ -0,0 +1,5 @@ +--- +title: Correctly render asset path for locales with a region +merge_request: 14924 +author: +type: fixed diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 87ae1fa5660..66785cf32da 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -309,4 +309,12 @@ describe ApplicationHelper do end end end + + describe '#locale_path' do + it 'returns the locale path with an `_`' do + Gitlab::I18n.locale = 'pt-BR' + + expect(helper.locale_path).to include('assets/locale/pt_BR/app') + end + end end -- cgit v1.2.3 From 4c8cd0941380fac24642df66f0ce66929b3bfa60 Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Wed, 18 Oct 2017 16:16:51 +0000 Subject: Merge branch 'pms-fix-tooltip-padding' into 'master' Fix tooltip padding to align to 8px grid See merge request gitlab-org/gitlab-ce!14928 (cherry picked from commit fee7a879e2f3b1347da75eb64c4f5a24fea2625f) fca91e61 Fix tooltip padding to align to 8px grid --- app/assets/stylesheets/framework/tooltips.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/framework/tooltips.scss b/app/assets/stylesheets/framework/tooltips.scss index 93baf73cb78..98f28987a82 100644 --- a/app/assets/stylesheets/framework/tooltips.scss +++ b/app/assets/stylesheets/framework/tooltips.scss @@ -3,5 +3,5 @@ border-radius: $border-radius-default; line-height: 16px; font-weight: $gl-font-weight-normal; - padding: $gl-btn-padding; + padding: 8px; } -- cgit v1.2.3 From 83b59da6549d3137f1424ee9bf16b95e4f72173e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 18 Oct 2017 16:37:16 +0000 Subject: Merge branch '39253-jobs-fail-because-of-brazilian-portuguese-translations' into 'master' Resolve "Jobs fail because of Brazilian Portuguese translations" Closes #39253 See merge request gitlab-org/gitlab-ce!14939 (cherry picked from commit 9c71fb0de2f0a7482b1a59c673142981ecdab26f) 0139b318 Prevent ApplicationHelper specs from polluting later ones --- spec/helpers/application_helper_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 66785cf32da..7a241b02d28 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -312,9 +312,9 @@ describe ApplicationHelper do describe '#locale_path' do it 'returns the locale path with an `_`' do - Gitlab::I18n.locale = 'pt-BR' - - expect(helper.locale_path).to include('assets/locale/pt_BR/app') + Gitlab::I18n.with_locale('pt-BR') do + expect(helper.locale_path).to include('assets/locale/pt_BR/app') + end end end end -- cgit v1.2.3