Commit 98b54d27 authored by Pawel Chojnacki's avatar Pawel Chojnacki

Merge remote-tracking branch 'upstream/master' into 5029-support-cluster-metrics

parents cac6a6d9 674be13f
This diff is collapsed.
import Vue from 'vue'; import Vue from 'vue';
import '../vue_shared/vue_resource_interceptor';
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
Vue.config.productionTip = false; Vue.config.productionTip = false;
......
module DeploymentPlatform module DeploymentPlatform
# EE would override this and utilize the extra argument
def deployment_platform(environment: nil) def deployment_platform(environment: nil)
@deployment_platform ||= @deployment_platform ||=
find_cluster_platform_kubernetes || find_cluster_platform_kubernetes ||
......
...@@ -137,10 +137,6 @@ class Environment < ActiveRecord::Base ...@@ -137,10 +137,6 @@ class Environment < ActiveRecord::Base
end end
end end
def deployment_platform
project.deployment_platform(environment: self)
end
def has_terminals? def has_terminals?
deployment_platform.present? && available? && last_deployment.present? deployment_platform.present? && available? && last_deployment.present?
end end
...@@ -232,6 +228,10 @@ class Environment < ActiveRecord::Base ...@@ -232,6 +228,10 @@ class Environment < ActiveRecord::Base
self.environment_type || self.name self.environment_type || self.name
end end
def deployment_platform
project.deployment_platform(environment: self)
end
private private
# Slugifying a name may remove the uniqueness guarantee afforded by it being # Slugifying a name may remove the uniqueness guarantee afforded by it being
......
...@@ -915,20 +915,20 @@ class Repository ...@@ -915,20 +915,20 @@ class Repository
raw_repository.ancestor?(ancestor_id, descendant_id) raw_repository.ancestor?(ancestor_id, descendant_id)
end end
def fetch_as_mirror(url, forced: false, refmap: :all_refs, remote_name: nil) def fetch_as_mirror(url, forced: false, refmap: :all_refs, remote_name: nil, prune: true)
unless remote_name unless remote_name
remote_name = "tmp-#{SecureRandom.hex}" remote_name = "tmp-#{SecureRandom.hex}"
tmp_remote_name = true tmp_remote_name = true
end end
add_remote(remote_name, url, mirror_refmap: refmap) add_remote(remote_name, url, mirror_refmap: refmap)
fetch_remote(remote_name, forced: forced) fetch_remote(remote_name, forced: forced, prune: prune)
ensure ensure
async_remove_remote(remote_name) if tmp_remote_name async_remove_remote(remote_name) if tmp_remote_name
end end
def fetch_remote(remote, forced: false, ssh_auth: nil, no_tags: false) def fetch_remote(remote, forced: false, ssh_auth: nil, no_tags: false, prune: true)
gitlab_shell.fetch_remote(raw_repository, remote, ssh_auth: ssh_auth, forced: forced, no_tags: no_tags) gitlab_shell.fetch_remote(raw_repository, remote, ssh_auth: ssh_auth, forced: forced, no_tags: no_tags, prune: prune)
end end
def async_remove_remote(remote_name) def async_remove_remote(remote_name)
......
...@@ -2,9 +2,6 @@ ...@@ -2,9 +2,6 @@
= content_for :meta_tags do = content_for :meta_tags do
= auto_discovery_link_tag(:atom, params.merge(rss_url_options), title: "#{@group.name} issues") = auto_discovery_link_tag(:atom, params.merge(rss_url_options), title: "#{@group.name} issues")
- content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
- if group_issues_count(state: 'all').zero? - if group_issues_count(state: 'all').zero?
= render 'shared/empty_states/issues', project_select_button: true = render 'shared/empty_states/issues', project_select_button: true
- else - else
......
- @no_container = true - @no_container = true
- page_title "Cycle Analytics" - page_title "Cycle Analytics"
- content_for :page_specific_javascripts do
= webpack_bundle_tag('common_vue')
#cycle-analytics{ class: container_class, "v-cloak" => "true", data: { request_path: project_cycle_analytics_path(@project) } } #cycle-analytics{ class: container_class, "v-cloak" => "true", data: { request_path: project_cycle_analytics_path(@project) } }
- if @cycle_analytics_no_data - if @cycle_analytics_no_data
......
...@@ -3,9 +3,6 @@ ...@@ -3,9 +3,6 @@
- @content_class = "limit-container-width" unless fluid_layout - @content_class = "limit-container-width" unless fluid_layout
- expanded = Rails.env.test? - expanded = Rails.env.test?
- content_for :page_specific_javascripts do
= webpack_bundle_tag('common_vue')
.project-edit-container .project-edit-container
%section.settings.general-settings.no-animate{ class: ('expanded' if expanded) } %section.settings.general-settings.no-animate{ class: ('expanded' if expanded) }
.settings-header .settings-header
......
...@@ -2,9 +2,6 @@ ...@@ -2,9 +2,6 @@
- page_title "Environments" - page_title "Environments"
- add_to_breadcrumbs("Pipelines", project_pipelines_path(@project)) - add_to_breadcrumbs("Pipelines", project_pipelines_path(@project))
- content_for :page_specific_javascripts do
= webpack_bundle_tag("common_vue")
#environments-list-view{ data: { environments_data: environments_list_data, #environments-list-view{ data: { environments_data: environments_list_data,
"can-create-deployment" => can?(current_user, :create_deployment, @project).to_s, "can-create-deployment" => can?(current_user, :create_deployment, @project).to_s,
"can-read-environment" => can?(current_user, :read_environment, @project).to_s, "can-read-environment" => can?(current_user, :read_environment, @project).to_s,
......
...@@ -4,9 +4,6 @@ ...@@ -4,9 +4,6 @@
- page_title "Issues" - page_title "Issues"
- new_issue_email = @project.new_issuable_address(current_user, 'issue') - new_issue_email = @project.new_issuable_address(current_user, 'issue')
- content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
= content_for :meta_tags do = content_for :meta_tags do
= auto_discovery_link_tag(:atom, params.merge(rss_url_options), title: "#{@project.name} issues") = auto_discovery_link_tag(:atom, params.merge(rss_url_options), title: "#{@project.name} issues")
......
...@@ -6,9 +6,6 @@ ...@@ -6,9 +6,6 @@
- page_title "Merge Requests" - page_title "Merge Requests"
- new_merge_request_email = @project.new_issuable_address(current_user, 'merge_request') - new_merge_request_email = @project.new_issuable_address(current_user, 'merge_request')
- content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
%div{ class: container_class } %div{ class: container_class }
= render 'projects/last_push' = render 'projects/last_push'
......
...@@ -10,6 +10,3 @@ ...@@ -10,6 +10,3 @@
= render "projects/pipelines/with_tabs", pipeline: @pipeline = render "projects/pipelines/with_tabs", pipeline: @pipeline
.js-pipeline-details-vue{ data: { endpoint: project_pipeline_path(@project, @pipeline, format: :json) } } .js-pipeline-details-vue{ data: { endpoint: project_pipeline_path(@project, @pipeline, format: :json) } }
- content_for :page_specific_javascripts do
= webpack_bundle_tag('common_vue')
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
.col-lg-12 .col-lg-12
#js-vue-registry-images{ data: { endpoint: project_container_registry_index_path(@project, format: :json) } } #js-vue-registry-images{ data: { endpoint: project_container_registry_index_path(@project, format: :json) } }
= webpack_bundle_tag('common_vue')
.row.prepend-top-10 .row.prepend-top-10
.col-lg-12 .col-lg-12
.panel.panel-default .panel.panel-default
......
...@@ -2,9 +2,6 @@ ...@@ -2,9 +2,6 @@
- page_title "Repository" - page_title "Repository"
- @content_class = "limit-container-width" unless fluid_layout - @content_class = "limit-container-width" unless fluid_layout
- content_for :page_specific_javascripts do
= webpack_bundle_tag('common_vue')
= render "projects/push_rules/index" = render "projects/push_rules/index"
= render "projects/mirrors/show" = render "projects/mirrors/show"
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
- page_title "Boards" - page_title "Boards"
- content_for :page_specific_javascripts do - content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
-# haml-lint:disable InlineJavaScript -# haml-lint:disable InlineJavaScript
%script#js-board-template{ type: "text/x-template" }= render "shared/boards/components/board" %script#js-board-template{ type: "text/x-template" }= render "shared/boards/components/board"
......
...@@ -49,8 +49,6 @@ function generateEntries() { ...@@ -49,8 +49,6 @@ function generateEntries() {
const manualEntries = { const manualEntries = {
common: './commons/index.js', common: './commons/index.js',
common_vue: './vue_shared/vue_resource_interceptor.js',
locale: './locale/index.js',
main: './main.js', main: './main.js',
raven: './raven/index.js', raven: './raven/index.js',
webpack_runtime: './webpack.js', webpack_runtime: './webpack.js',
......
...@@ -6,11 +6,13 @@ restore your original configuration. This process consists of two steps: ...@@ -6,11 +6,13 @@ restore your original configuration. This process consists of two steps:
1. Making the old primary a secondary 1. Making the old primary a secondary
1. Promoting a secondary to a primary 1. Promoting a secondary to a primary
> *Warning:* If you have any doubts about the consistency of the data on this node, we recommend to set up it from scratch.
## Configure the former primary to be a secondary ## Configure the former primary to be a secondary
Since the former primary will be out of sync with the current primary, the first step is Since the former primary will be out of sync with the current primary, the first step is
to bring the former primary up to date. Note, deletion of data stored on disk like to bring the former primary up to date. Note, deletion of data stored on disk like
repositories and uploads will not be replayed when bringing the former primary in back repositories and uploads will not be replayed when bringing the former primary in back
into sync, which may result in increased disk usage. into sync, which may result in increased disk usage.
Alternatively, you can [setup a new secondary GitLab instance][setup-geo] to avoid this. Alternatively, you can [setup a new secondary GitLab instance][setup-geo] to avoid this.
...@@ -23,12 +25,16 @@ To bring the former primary up to date: ...@@ -23,12 +25,16 @@ To bring the former primary up to date:
sudo gitlab-ctl start sudo gitlab-ctl start
``` ```
NOTE: **Note:** If you [disabled primary permanently][disaster-recovery-disable-primary], >**Note 1:** If you [disabled primary permanently][disaster-recovery-disable-primary],
you need to undo those steps now. For Debian/Ubuntu you just need to run you need to undo those steps now. For Debian/Ubuntu you just need to run
`sudo systemctl enable gitlab-runsvdir`. For CentoOS 6, you need to install `sudo systemctl enable gitlab-runsvdir`. For CentOS 6, you need to install
the GitLab instance from scratch and setup it as a secondary node by the GitLab instance from scratch and setup it as a secondary node by
following [Setup instructions][setup-geo]. following [Setup instructions][setup-geo]. In this case you don't need to follow the next step.
In this case you don't need to follow the next step.
>**Note 2:** If you [changed the DNS records](index.md#step-4-optional-updating-the-primary-domains-dns-record)
for this node during disaster recovery procedure you may need to [block
all the writes to this node](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/doc/gitlab-geo/planned-failover.md#block-primary-traffic)
during this procedure.
1. [Setup database replication][database-replication]. Note that in this 1. [Setup database replication][database-replication]. Note that in this
case, primary refers to the current primary, and secondary refers to the case, primary refers to the current primary, and secondary refers to the
......
module EE module EE
module DeploymentPlatform module DeploymentPlatform
extend ::Gitlab::Utils::Override
override :deployment_platform
def deployment_platform(environment: nil) def deployment_platform(environment: nil)
return super unless environment && feature_available?(:multiple_clusters) return super unless environment && feature_available?(:multiple_clusters)
......
- page_title 'Geo nodes' - page_title 'Geo nodes'
- @content_class = "geo-admin-container" - @content_class = "geo-admin-container"
= webpack_bundle_tag 'common_vue'
%h2.page-title.clearfix %h2.page-title.clearfix
%span.title-text.pull-left= _("Geo Nodes") %span.title-text.pull-left= _("Geo Nodes")
= link_to s_("GeoNodes|New node"), new_admin_geo_node_path, class: 'btn btn-create pull-right' = link_to s_("GeoNodes|New node"), new_admin_geo_node_path, class: 'btn btn-create pull-right'
......
...@@ -12,7 +12,4 @@ ...@@ -12,7 +12,4 @@
- page_card_attributes @epic.card_attributes - page_card_attributes @epic.card_attributes
- content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
#epic-show-app{ data: epic_show_app_data(@epic, author_icon: avatar_icon_for_user(@epic.author), initial: issuable_initial_data(@epic)) } #epic-show-app{ data: epic_show_app_data(@epic, author_icon: avatar_icon_for_user(@epic.author), initial: issuable_initial_data(@epic)) }
...@@ -5,8 +5,6 @@ ...@@ -5,8 +5,6 @@
- breadcrumb_title _("Epics Roadmap") - breadcrumb_title _("Epics Roadmap")
- if @epics_count != 0 - if @epics_count != 0
- content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
#js-roadmap{ data: { epics_path: group_epics_path(@group, format: :json), group_id: @group.id, empty_state_illustration: image_path('illustrations/epics/roadmap.svg') } } #js-roadmap{ data: { epics_path: group_epics_path(@group, format: :json), group_id: @group.id, empty_state_illustration: image_path('illustrations/epics/roadmap.svg') } }
- else - else
= render 'shared/empty_states/roadmap' = render 'shared/empty_states/roadmap'
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
- page_title 'IDE' - page_title 'IDE'
- content_for :page_specific_javascripts do - content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
= webpack_bundle_tag 'ide', force_same_domain: true = webpack_bundle_tag 'ide', force_same_domain: true
#ide.ide-loading{ data: {"empty-state-svg-path" => image_path('illustrations/multi_file_editor_empty.svg'), #ide.ide-loading{ data: {"empty-state-svg-path" => image_path('illustrations/multi_file_editor_empty.svg'),
......
...@@ -9,6 +9,4 @@ ...@@ -9,6 +9,4 @@
%p %p
= _('Track groups of issues that share a theme, across projects and milestones') = _('Track groups of issues that share a theme, across projects and milestones')
- if can?(current_user, :create_epic, @group) - if can?(current_user, :create_epic, @group)
- content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
#new-epic-app{ data: { endpoint: request.url } } #new-epic-app{ data: { endpoint: request.url } }
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
%p %p
= _('To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown.') = _('To view the roadmap, add a planned start or finish date to one of your epics in this group or its subgroups. Only epics in the past 3 months and the next 3 months are shown.')
- if can?(current_user, :create_epic, @group) - if can?(current_user, :create_epic, @group)
- content_for :page_specific_javascripts do
= webpack_bundle_tag 'common_vue'
#new-epic-app{ data: { endpoint: request.url } } #new-epic-app{ data: { endpoint: request.url } }
= link_to group_epics_path(@group), title: 'List', class: 'btn' do = link_to group_epics_path(@group), title: 'List', class: 'btn' do
%span= _('View epics list') %span= _('View epics list')
...@@ -63,11 +63,12 @@ module Gitlab ...@@ -63,11 +63,12 @@ module Gitlab
end end
end end
def fetch_remote(name, timeout, force:, tags:, ssh_key: nil, known_hosts: nil) def fetch_remote(name, timeout, force:, tags:, ssh_key: nil, known_hosts: nil, prune: true)
tags_option = tags ? '--tags' : '--no-tags' tags_option = tags ? '--tags' : '--no-tags'
logger.info "Fetching remote #{name} for repository #{repository_absolute_path}." logger.info "Fetching remote #{name} for repository #{repository_absolute_path}."
cmd = %W(git fetch #{name} --prune --quiet) cmd = %W(git fetch #{name} --quiet)
cmd << '--prune' if prune
cmd << '--force' if force cmd << '--force' if force
cmd << tags_option cmd << tags_option
......
...@@ -45,10 +45,10 @@ module Gitlab ...@@ -45,10 +45,10 @@ module Gitlab
GitalyClient.call(@storage, :repository_service, :apply_gitattributes, request) GitalyClient.call(@storage, :repository_service, :apply_gitattributes, request)
end end
def fetch_remote(remote, ssh_auth:, forced:, no_tags:, timeout:) def fetch_remote(remote, ssh_auth:, forced:, no_tags:, timeout:, prune: true)
request = Gitaly::FetchRemoteRequest.new( request = Gitaly::FetchRemoteRequest.new(
repository: @gitaly_repo, remote: remote, force: forced, repository: @gitaly_repo, remote: remote, force: forced,
no_tags: no_tags, timeout: timeout no_tags: no_tags, timeout: timeout, no_prune: !prune
) )
if ssh_auth&.ssh_import? if ssh_auth&.ssh_import?
......
...@@ -125,13 +125,13 @@ module Gitlab ...@@ -125,13 +125,13 @@ module Gitlab
# Ex. # Ex.
# fetch_remote(my_repo, "upstream") # fetch_remote(my_repo, "upstream")
# #
def fetch_remote(repository, remote, ssh_auth: nil, forced: false, no_tags: false) def fetch_remote(repository, remote, ssh_auth: nil, forced: false, no_tags: false, prune: true)
gitaly_migrate(:fetch_remote) do |is_enabled| gitaly_migrate(:fetch_remote) do |is_enabled|
if is_enabled if is_enabled
repository.gitaly_repository_client.fetch_remote(remote, ssh_auth: ssh_auth, forced: forced, no_tags: no_tags, timeout: git_timeout) repository.gitaly_repository_client.fetch_remote(remote, ssh_auth: ssh_auth, forced: forced, no_tags: no_tags, timeout: git_timeout, prune: prune)
else else
storage_path = Gitlab.config.repositories.storages[repository.storage]["path"] storage_path = Gitlab.config.repositories.storages[repository.storage]["path"]
local_fetch_remote(storage_path, repository.relative_path, remote, ssh_auth: ssh_auth, forced: forced, no_tags: no_tags) local_fetch_remote(storage_path, repository.relative_path, remote, ssh_auth: ssh_auth, forced: forced, no_tags: no_tags, prune: prune)
end end
end end
end end
...@@ -428,8 +428,8 @@ module Gitlab ...@@ -428,8 +428,8 @@ module Gitlab
) )
end end
def local_fetch_remote(storage_path, repository_relative_path, remote, ssh_auth: nil, forced: false, no_tags: false) def local_fetch_remote(storage_path, repository_relative_path, remote, ssh_auth: nil, forced: false, no_tags: false, prune: true)
vars = { force: forced, tags: !no_tags } vars = { force: forced, tags: !no_tags, prune: prune }
if ssh_auth&.ssh_import? if ssh_auth&.ssh_import?
if ssh_auth.ssh_key_auth? && ssh_auth.ssh_private_key.present? if ssh_auth.ssh_key_auth? && ssh_auth.ssh_private_key.present?
......
...@@ -68,14 +68,6 @@ module Gitlab ...@@ -68,14 +68,6 @@ module Gitlab
nil nil
end end
# Used in EE
# Accepts either an Array or a String and returns an array
def ensure_array_from_string(string_or_array)
return string_or_array if string_or_array.is_a?(Array)
string_or_array.split(',').map(&:strip)
end
# EE below # EE below
def try_megabytes_to_bytes(size) def try_megabytes_to_bytes(size)
Integer(size).megabytes Integer(size).megabytes
......
...@@ -60,7 +60,8 @@ describe('Environment', () => { ...@@ -60,7 +60,8 @@ describe('Environment', () => {
}); });
}); });
describe('with environments', () => { describe('with paginated environments', () => {
let backupInterceptors;
const environmentsResponseInterceptor = (request, next) => { const environmentsResponseInterceptor = (request, next) => {
next((response) => { next((response) => {
response.headers.set('X-nExt-pAge', '2'); response.headers.set('X-nExt-pAge', '2');
...@@ -84,16 +85,16 @@ describe('Environment', () => { ...@@ -84,16 +85,16 @@ describe('Environment', () => {
}; };
beforeEach(() => { beforeEach(() => {
Vue.http.interceptors.push(environmentsResponseInterceptor); backupInterceptors = Vue.http.interceptors;
Vue.http.interceptors.push(headersInterceptor); Vue.http.interceptors = [
environmentsResponseInterceptor,
headersInterceptor,
];
component = mountComponent(EnvironmentsComponent, mockData); component = mountComponent(EnvironmentsComponent, mockData);
}); });
afterEach(() => { afterEach(() => {
Vue.http.interceptors = _.without( Vue.http.interceptors = backupInterceptors;
Vue.http.interceptors, environmentsResponseInterceptor,
);
Vue.http.interceptors = _.without(Vue.http.interceptors, headersInterceptor);
}); });
it('should render a table with environments', (done) => { it('should render a table with environments', (done) => {
......
...@@ -61,10 +61,11 @@ describe Gitlab::Git::GitlabProjects do ...@@ -61,10 +61,11 @@ describe Gitlab::Git::GitlabProjects do
let(:remote_name) { 'remote-name' } let(:remote_name) { 'remote-name' }
let(:branch_name) { 'master' } let(:branch_name) { 'master' }
let(:force) { false } let(:force) { false }
let(:prune) { true }
let(:tags) { true } let(:tags) { true }
let(:args) { { force: force, tags: tags }.merge(extra_args) } let(:args) { { force: force, tags: tags, prune: prune }.merge(extra_args) }
let(:extra_args) { {} } let(:extra_args) { {} }
let(:cmd) { %W(git fetch #{remote_name} --prune --quiet --tags) } let(:cmd) { %W(git fetch #{remote_name} --quiet --prune --tags) }
subject { gl_projects.fetch_remote(remote_name, 600, args) } subject { gl_projects.fetch_remote(remote_name, 600, args) }
...@@ -97,7 +98,7 @@ describe Gitlab::Git::GitlabProjects do ...@@ -97,7 +98,7 @@ describe Gitlab::Git::GitlabProjects do
context 'with --force' do context 'with --force' do
let(:force) { true } let(:force) { true }
let(:cmd) { %W(git fetch #{remote_name} --prune --quiet --force --tags) } let(:cmd) { %W(git fetch #{remote_name} --quiet --prune --force --tags) }
it 'executes the command with forced option' do it 'executes the command with forced option' do
stub_spawn(cmd, 600, tmp_repo_path, {}, success: true) stub_spawn(cmd, 600, tmp_repo_path, {}, success: true)
...@@ -108,7 +109,18 @@ describe Gitlab::Git::GitlabProjects do ...@@ -108,7 +109,18 @@ describe Gitlab::Git::GitlabProjects do
context 'with --no-tags' do context 'with --no-tags' do
let(:tags) { false } let(:tags) { false }
let(:cmd) { %W(git fetch #{remote_name} --prune --quiet --no-tags) } let(:cmd) { %W(git fetch #{remote_name} --quiet --prune --no-tags) }
it 'executes the command' do
stub_spawn(cmd, 600, tmp_repo_path, {}, success: true)
is_expected.to be_truthy
end
end
context 'with no prune' do
let(:prune) { false }
let(:cmd) { %W(git fetch #{remote_name} --quiet --tags) }
it 'executes the command' do it 'executes the command' do
stub_spawn(cmd, 600, tmp_repo_path, {}, success: true) stub_spawn(cmd, 600, tmp_repo_path, {}, success: true)
......
...@@ -85,6 +85,20 @@ describe Gitlab::GitalyClient::RepositoryService do ...@@ -85,6 +85,20 @@ describe Gitlab::GitalyClient::RepositoryService do
end end
end end
describe '#fetch_remote' do
let(:ssh_auth) { double(:ssh_auth, ssh_import?: true, ssh_key_auth?: false, ssh_known_hosts: nil) }
let(:import_url) { 'ssh://example.com' }
it 'sends a fetch_remote_request message' do
expect_any_instance_of(Gitaly::RepositoryService::Stub)
.to receive(:fetch_remote)
.with(gitaly_request_with_params(no_prune: false), kind_of(Hash))
.and_return(double(value: true))
client.fetch_remote(import_url, ssh_auth: ssh_auth, forced: false, no_tags: false, timeout: 60)
end
end
describe '#rebase_in_progress?' do describe '#rebase_in_progress?' do
let(:rebase_id) { 1 } let(:rebase_id) { 1 }
......
...@@ -508,8 +508,8 @@ describe Gitlab::Shell do ...@@ -508,8 +508,8 @@ describe Gitlab::Shell do
end end
shared_examples 'fetch_remote' do |gitaly_on| shared_examples 'fetch_remote' do |gitaly_on|
def fetch_remote(ssh_auth = nil) def fetch_remote(ssh_auth = nil, prune = true)
gitlab_shell.fetch_remote(repository.raw_repository, 'remote-name', ssh_auth: ssh_auth) gitlab_shell.fetch_remote(repository.raw_repository, 'remote-name', ssh_auth: ssh_auth, prune: prune)
end end
def expect_gitlab_projects(fail = false, options = {}) def expect_gitlab_projects(fail = false, options = {})
...@@ -555,27 +555,33 @@ describe Gitlab::Shell do ...@@ -555,27 +555,33 @@ describe Gitlab::Shell do
end end
it 'returns true when the command succeeds' do it 'returns true when the command succeeds' do
expect_call(false, force: false, tags: true) expect_call(false, force: false, tags: true, prune: true)
expect(fetch_remote).to be_truthy expect(fetch_remote).to be_truthy
end end
it 'returns true when the command succeeds' do
expect_call(false, force: false, tags: true, prune: false)
expect(fetch_remote(nil, false)).to be_truthy
end
it 'raises an exception when the command fails' do it 'raises an exception when the command fails' do
expect_call(true, force: false, tags: true) expect_call(true, force: false, tags: true, prune: true)
expect { fetch_remote }.to raise_error(Gitlab::Shell::Error) expect { fetch_remote }.to raise_error(Gitlab::Shell::Error)
end end
it 'allows forced and no_tags to be changed' do it 'allows forced and no_tags to be changed' do
expect_call(false, force: true, tags: false) expect_call(false, force: true, tags: false, prune: true)
result = gitlab_shell.fetch_remote(repository.raw_repository, 'remote-name', forced: true, no_tags: true) result = gitlab_shell.fetch_remote(repository.raw_repository, 'remote-name', forced: true, no_tags: true, prune: true)
expect(result).to be_truthy expect(result).to be_truthy
end end
context 'SSH auth' do context 'SSH auth' do
it 'passes the SSH key if specified' do it 'passes the SSH key if specified' do
expect_call(false, force: false, tags: true, ssh_key: 'foo') expect_call(false, force: false, tags: true, prune: true, ssh_key: 'foo')
ssh_auth = build_ssh_auth(ssh_key_auth?: true, ssh_private_key: 'foo') ssh_auth = build_ssh_auth(ssh_key_auth?: true, ssh_private_key: 'foo')
...@@ -583,7 +589,7 @@ describe Gitlab::Shell do ...@@ -583,7 +589,7 @@ describe Gitlab::Shell do
end end
it 'does not pass an empty SSH key' do it 'does not pass an empty SSH key' do
expect_call(false, force: false, tags: true) expect_call(false, force: false, tags: true, prune: true)
ssh_auth = build_ssh_auth(ssh_key_auth: true, ssh_private_key: '') ssh_auth = build_ssh_auth(ssh_key_auth: true, ssh_private_key: '')
...@@ -591,7 +597,7 @@ describe Gitlab::Shell do ...@@ -591,7 +597,7 @@ describe Gitlab::Shell do
end end
it 'does not pass the key unless SSH key auth is to be used' do it 'does not pass the key unless SSH key auth is to be used' do
expect_call(false, force: false, tags: true) expect_call(false, force: false, tags: true, prune: true)
ssh_auth = build_ssh_auth(ssh_key_auth: false, ssh_private_key: 'foo') ssh_auth = build_ssh_auth(ssh_key_auth: false, ssh_private_key: 'foo')
...@@ -599,7 +605,7 @@ describe Gitlab::Shell do ...@@ -599,7 +605,7 @@ describe Gitlab::Shell do
end end
it 'passes the known_hosts data if specified' do it 'passes the known_hosts data if specified' do
expect_call(false, force: false, tags: true, known_hosts: 'foo') expect_call(false, force: false, tags: true, prune: true, known_hosts: 'foo')
ssh_auth = build_ssh_auth(ssh_known_hosts: 'foo') ssh_auth = build_ssh_auth(ssh_known_hosts: 'foo')
...@@ -607,7 +613,7 @@ describe Gitlab::Shell do ...@@ -607,7 +613,7 @@ describe Gitlab::Shell do
end end
it 'does not pass empty known_hosts data' do it 'does not pass empty known_hosts data' do
expect_call(false, force: false, tags: true) expect_call(false, force: false, tags: true, prune: true)
ssh_auth = build_ssh_auth(ssh_known_hosts: '') ssh_auth = build_ssh_auth(ssh_known_hosts: '')
...@@ -615,7 +621,7 @@ describe Gitlab::Shell do ...@@ -615,7 +621,7 @@ describe Gitlab::Shell do
end end
it 'does not pass known_hosts data unless SSH is to be used' do it 'does not pass known_hosts data unless SSH is to be used' do
expect_call(false, force: false, tags: true) expect_call(false, force: false, tags: true, prune: true)
ssh_auth = build_ssh_auth(ssh_import?: false, ssh_known_hosts: 'foo') ssh_auth = build_ssh_auth(ssh_import?: false, ssh_known_hosts: 'foo')
...@@ -642,7 +648,7 @@ describe Gitlab::Shell do ...@@ -642,7 +648,7 @@ describe Gitlab::Shell do
it 'passes the correct params to the gitaly service' do it 'passes the correct params to the gitaly service' do
expect(repository.gitaly_repository_client).to receive(:fetch_remote) expect(repository.gitaly_repository_client).to receive(:fetch_remote)
.with(remote_name, ssh_auth: ssh_auth, forced: true, no_tags: true, timeout: timeout) .with(remote_name, ssh_auth: ssh_auth, forced: true, no_tags: true, prune: true, timeout: timeout)
subject subject
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment