Commit 599ff32a authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab master

parents 849f8f12 6ac1e277
...@@ -175,7 +175,7 @@ export default { ...@@ -175,7 +175,7 @@ export default {
> >
<template #actions> <template #actions>
<blob-edit <blob-edit
v-if="!isBinary" :show-edit-button="!isBinary"
:edit-path="blobInfo.editBlobPath" :edit-path="blobInfo.editBlobPath"
:web-ide-path="blobInfo.ideEditPath" :web-ide-path="blobInfo.ideEditPath"
/> />
......
...@@ -15,6 +15,10 @@ export default { ...@@ -15,6 +15,10 @@ export default {
}, },
mixins: [glFeatureFlagsMixin()], mixins: [glFeatureFlagsMixin()],
props: { props: {
showEditButton: {
type: Boolean,
required: true,
},
editPath: { editPath: {
type: String, type: String,
required: true, required: true,
...@@ -30,17 +34,31 @@ export default { ...@@ -30,17 +34,31 @@ export default {
<template> <template>
<web-ide-link <web-ide-link
v-if="glFeatures.consolidatedEditButton" v-if="glFeatures.consolidatedEditButton"
:show-edit-button="showEditButton"
class="gl-mr-3" class="gl-mr-3"
:edit-url="editPath" :edit-url="editPath"
:web-ide-url="webIdePath" :web-ide-url="webIdePath"
:is-blob="true" :is-blob="true"
/> />
<div v-else> <div v-else>
<gl-button class="gl-mr-2" category="primary" variant="confirm" :href="editPath"> <gl-button
v-if="showEditButton"
class="gl-mr-2"
category="primary"
variant="confirm"
:href="editPath"
data-testid="edit"
>
{{ $options.i18n.edit }} {{ $options.i18n.edit }}
</gl-button> </gl-button>
<gl-button class="gl-mr-3" category="primary" variant="confirm" :href="webIdePath"> <gl-button
class="gl-mr-3"
category="primary"
variant="confirm"
:href="webIdePath"
data-testid="web-ide"
>
{{ $options.i18n.webIde }} {{ $options.i18n.webIde }}
</gl-button> </gl-button>
</div> </div>
......
...@@ -938,8 +938,8 @@ class Repository ...@@ -938,8 +938,8 @@ class Repository
end end
end end
def fetch_as_mirror(url, forced: false, refmap: :all_refs, remote_name: nil, prune: true) def fetch_as_mirror(url, forced: false, refmap: :all_refs, prune: true, http_authorization_header: "")
fetch_remote(remote_name, url: url, refmap: refmap, forced: forced, prune: prune) fetch_remote(url, refmap: refmap, forced: forced, prune: prune, http_authorization_header: http_authorization_header)
end end
def fetch_source_branch!(source_repository, source_branch, local_ref) def fetch_source_branch!(source_repository, source_branch, local_ref)
......
...@@ -61,11 +61,9 @@ module Geo ...@@ -61,11 +61,9 @@ module Geo
end end
def jwt_authentication_header def jwt_authentication_header
authorization = ::Gitlab::Geo::RepoSyncRequest.new( ::Gitlab::Geo::RepoSyncRequest.new(
scope: repository.full_path scope: repository.full_path
).authorization ).authorization
{ "http.#{remote_url}.extraHeader" => "Authorization: #{authorization}" }
end end
def deleted_params def deleted_params
......
...@@ -17,15 +17,6 @@ module EE ...@@ -17,15 +17,6 @@ module EE
delegate :checksum, :find_remote_root_ref, to: :raw_repository delegate :checksum, :find_remote_root_ref, to: :raw_repository
end end
# Transiently sets a configuration variable
def with_config(values = {})
raw_repository.set_config(values)
yield
ensure
raw_repository.delete_config(*values.keys)
end
# Runs code after a repository has been synced. # Runs code after a repository has been synced.
def after_sync def after_sync
expire_all_method_caches expire_all_method_caches
...@@ -35,8 +26,7 @@ module EE ...@@ -35,8 +26,7 @@ module EE
def fetch_upstream(url, forced: false, check_tags_changed: false) def fetch_upstream(url, forced: false, check_tags_changed: false)
fetch_remote( fetch_remote(
MIRROR_REMOTE, url,
url: url,
refmap: ["+refs/heads/*:refs/remotes/#{MIRROR_REMOTE}/*"], refmap: ["+refs/heads/*:refs/remotes/#{MIRROR_REMOTE}/*"],
ssh_auth: project&.import_data, ssh_auth: project&.import_data,
forced: forced, forced: forced,
...@@ -96,8 +86,8 @@ module EE ...@@ -96,8 +86,8 @@ module EE
end end
# Update the default branch querying the remote to determine its HEAD # Update the default branch querying the remote to determine its HEAD
def update_root_ref(remote, remote_url, authorization) def update_root_ref(remote_url, authorization)
root_ref = find_remote_root_ref(remote, remote_url, authorization) root_ref = find_remote_root_ref(remote_url, authorization)
change_head(root_ref) if root_ref.present? change_head(root_ref) if root_ref.present?
rescue ::Gitlab::Git::Repository::NoRepository => e rescue ::Gitlab::Git::Repository::NoRepository => e
::Gitlab::AppLogger.error("Error updating root ref for repository #{full_path} (#{container.id}): #{e.message}.") ::Gitlab::AppLogger.error("Error updating root ref for repository #{full_path} (#{container.id}): #{e.message}.")
......
...@@ -15,7 +15,6 @@ module Geo ...@@ -15,7 +15,6 @@ module Geo
delegate :registry, to: :replicator delegate :registry, to: :replicator
GEO_REMOTE_NAME = 'geo'
LEASE_TIMEOUT = 8.hours LEASE_TIMEOUT = 8.hours
LEASE_KEY_PREFIX = 'geo_sync_ssf_service' LEASE_KEY_PREFIX = 'geo_sync_ssf_service'
RETRIES_BEFORE_REDOWNLOAD = 5 RETRIES_BEFORE_REDOWNLOAD = 5
...@@ -112,9 +111,7 @@ module Geo ...@@ -112,9 +111,7 @@ module Geo
def fetch_geo_mirror(repository) def fetch_geo_mirror(repository)
# Fetch the repository, using a JWT header for authentication # Fetch the repository, using a JWT header for authentication
repository.with_config(replicator.jwt_authentication_header) do repository.fetch_as_mirror(replicator.remote_url, forced: true, http_authorization_header: replicator.jwt_authentication_header)
repository.fetch_as_mirror(replicator.remote_url, remote_name: GEO_REMOTE_NAME, forced: true)
end
end end
# Use snapshotting for redownloads *only* when enabled. # Use snapshotting for redownloads *only* when enabled.
...@@ -265,7 +262,7 @@ module Geo ...@@ -265,7 +262,7 @@ module Geo
scope: repository.full_path scope: repository.full_path
).authorization ).authorization
repository.update_root_ref(GEO_REMOTE_NAME, replicator.remote_url, authorization) repository.update_root_ref(replicator.remote_url, authorization)
end end
end end
end end
...@@ -15,7 +15,6 @@ module Geo ...@@ -15,7 +15,6 @@ module Geo
attr_reader :project attr_reader :project
GEO_REMOTE_NAME = 'geo'
LEASE_TIMEOUT = 8.hours LEASE_TIMEOUT = 8.hours
LEASE_KEY_PREFIX = 'geo_sync_service' LEASE_KEY_PREFIX = 'geo_sync_service'
...@@ -96,18 +95,14 @@ module Geo ...@@ -96,18 +95,14 @@ module Geo
def fetch_geo_mirror(repository) def fetch_geo_mirror(repository)
# Fetch the repository, using a JWT header for authentication # Fetch the repository, using a JWT header for authentication
repository.with_config(jwt_authentication_header) do repository.fetch_as_mirror(remote_url, forced: true, http_authorization_header: jwt_authentication_header)
repository.fetch_as_mirror(remote_url, remote_name: GEO_REMOTE_NAME, forced: true)
end
end end
# Build a JWT header for authentication # Build a JWT header for authentication
def jwt_authentication_header def jwt_authentication_header
authorization = ::Gitlab::Geo::RepoSyncRequest.new( ::Gitlab::Geo::RepoSyncRequest.new(
scope: repository.full_path scope: repository.full_path
).authorization ).authorization
{ "http.#{remote_url}.extraHeader" => "Authorization: #{authorization}" }
end end
def remote_url def remote_url
......
...@@ -54,7 +54,7 @@ module Geo ...@@ -54,7 +54,7 @@ module Geo
scope: repository.full_path scope: repository.full_path
).authorization ).authorization
repository.update_root_ref(GEO_REMOTE_NAME, remote_url, authorization) repository.update_root_ref(remote_url, authorization)
end end
def execute_housekeeping def execute_housekeeping
......
...@@ -55,42 +55,13 @@ RSpec.describe Repository do ...@@ -55,42 +55,13 @@ RSpec.describe Repository do
it 'fetches the URL without creating a remote' do it 'fetches the URL without creating a remote' do
expect(repository) expect(repository)
.to receive(:fetch_remote) .to receive(:fetch_remote)
.with(described_class::MIRROR_REMOTE, url: url, refmap: ['+refs/heads/*:refs/remotes/upstream/*'], ssh_auth: nil, forced: true, check_tags_changed: true) .with(url, refmap: ['+refs/heads/*:refs/remotes/upstream/*'], ssh_auth: nil, forced: true, check_tags_changed: true)
.and_return(nil) .and_return(nil)
repository.fetch_upstream(url, forced: true, check_tags_changed: true) repository.fetch_upstream(url, forced: true, check_tags_changed: true)
end end
end end
describe '#with_config' do
let(:rugged) { rugged_repo(repository) }
let(:entries) do
{
'test.foo1' => 'hello',
'test.foo2' => 'world',
'http.http://gitlab-primary.geo/gitlab-qa-sandbox-group/qa-test-10-07-2018-07-22-41/geo-project-ac55ec2cd134afea.wiki.git.extraHeader' => 'Authorization: blabla'
}
end
it 'sets config only during the block' do
keys_should_not_be_set
repository.with_config(entries) do
entries.each do |key, value|
expect(rugged.config[key]).to eq(value)
end
end
keys_should_not_be_set
end
def keys_should_not_be_set
entries.each do |key, value|
expect(rugged.config[key]).to be_blank
end
end
end
describe "Elastic search", :elastic do describe "Elastic search", :elastic do
before do before do
stub_ee_application_setting(elasticsearch_search: true, elasticsearch_indexing: true) stub_ee_application_setting(elasticsearch_search: true, elasticsearch_indexing: true)
...@@ -250,7 +221,7 @@ RSpec.describe Repository do ...@@ -250,7 +221,7 @@ RSpec.describe Repository do
it 'updates the default branch when HEAD has changed' do it 'updates the default branch when HEAD has changed' do
stub_find_remote_root_ref(repository, ref: 'feature') stub_find_remote_root_ref(repository, ref: 'feature')
expect { repository.update_root_ref('origin', url, auth) } expect { repository.update_root_ref(url, auth) }
.to change { project.default_branch } .to change { project.default_branch }
.from('master') .from('master')
.to('feature') .to('feature')
...@@ -261,7 +232,7 @@ RSpec.describe Repository do ...@@ -261,7 +232,7 @@ RSpec.describe Repository do
expect(repository).to receive(:change_head).with('master').and_call_original expect(repository).to receive(:change_head).with('master').and_call_original
repository.update_root_ref('origin', url, auth) repository.update_root_ref(url, auth)
expect(project.default_branch).to eq('master') expect(project.default_branch).to eq('master')
end end
...@@ -269,22 +240,22 @@ RSpec.describe Repository do ...@@ -269,22 +240,22 @@ RSpec.describe Repository do
it 'does not update the default branch when HEAD does not exist' do it 'does not update the default branch when HEAD does not exist' do
stub_find_remote_root_ref(repository, ref: 'foo') stub_find_remote_root_ref(repository, ref: 'foo')
expect { repository.update_root_ref('origin', url, auth) } expect { repository.update_root_ref(url, auth) }
.not_to change { project.default_branch } .not_to change { project.default_branch }
end end
it 'does not raise error when repository does not exist' do it 'does not raise error when repository does not exist' do
allow(repository).to receive(:find_remote_root_ref) allow(repository).to receive(:find_remote_root_ref)
.with('origin', url, auth) .with(url, auth)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
expect { repository.update_root_ref('origin', url, auth) }.not_to raise_error expect { repository.update_root_ref(url, auth) }.not_to raise_error
end end
def stub_find_remote_root_ref(repository, ref:) def stub_find_remote_root_ref(repository, ref:)
allow(repository) allow(repository)
.to receive(:find_remote_root_ref) .to receive(:find_remote_root_ref)
.with('origin', url, auth) .with(url, auth)
.and_return(ref) .and_return(ref)
end end
end end
......
...@@ -40,7 +40,7 @@ RSpec.describe Geo::DesignRepositorySyncService do ...@@ -40,7 +40,7 @@ RSpec.describe Geo::DesignRepositorySyncService do
allow_any_instance_of(Repository) allow_any_instance_of(Repository)
.to receive(:find_remote_root_ref) .to receive(:find_remote_root_ref)
.with('geo') .with(url_to_repo)
.and_return('master') .and_return('master')
allow_any_instance_of(Geo::ProjectHousekeepingService).to receive(:execute) allow_any_instance_of(Geo::ProjectHousekeepingService).to receive(:execute)
...@@ -53,13 +53,8 @@ RSpec.describe Geo::DesignRepositorySyncService do ...@@ -53,13 +53,8 @@ RSpec.describe Geo::DesignRepositorySyncService do
include_context 'lease handling' include_context 'lease handling'
it 'fetches project repository with JWT credentials' do it 'fetches project repository with JWT credentials' do
expect(repository).to receive(:with_config)
.with("http.#{url_to_repo}.extraHeader" => anything)
.once
.and_call_original
expect(repository).to receive(:fetch_as_mirror) expect(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.once .once
subject.execute subject.execute
...@@ -81,7 +76,7 @@ RSpec.describe Geo::DesignRepositorySyncService do ...@@ -81,7 +76,7 @@ RSpec.describe Geo::DesignRepositorySyncService do
it 'rescues when Gitlab::Shell::Error is raised' do it 'rescues when Gitlab::Shell::Error is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error) .and_raise(Gitlab::Shell::Error)
expect { subject.execute }.not_to raise_error expect { subject.execute }.not_to raise_error
...@@ -89,7 +84,7 @@ RSpec.describe Geo::DesignRepositorySyncService do ...@@ -89,7 +84,7 @@ RSpec.describe Geo::DesignRepositorySyncService do
it 'rescues exception when Gitlab::Git::Repository::NoRepository is raised' do it 'rescues exception when Gitlab::Git::Repository::NoRepository is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
expect { subject.execute }.not_to raise_error expect { subject.execute }.not_to raise_error
...@@ -97,7 +92,7 @@ RSpec.describe Geo::DesignRepositorySyncService do ...@@ -97,7 +92,7 @@ RSpec.describe Geo::DesignRepositorySyncService do
it 'increases retry count when Gitlab::Git::Repository::NoRepository is raised' do it 'increases retry count when Gitlab::Git::Repository::NoRepository is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
...@@ -111,7 +106,7 @@ RSpec.describe Geo::DesignRepositorySyncService do ...@@ -111,7 +106,7 @@ RSpec.describe Geo::DesignRepositorySyncService do
registry = create(:geo_design_registry, project: project) registry = create(:geo_design_registry, project: project)
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessDesign::ERROR_MESSAGES[:no_repo])) .and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessDesign::ERROR_MESSAGES[:no_repo]))
subject.execute subject.execute
...@@ -128,7 +123,7 @@ RSpec.describe Geo::DesignRepositorySyncService do ...@@ -128,7 +123,7 @@ RSpec.describe Geo::DesignRepositorySyncService do
expect(Geo::DesignRegistry.last.state).to eq 'synced' expect(Geo::DesignRegistry.last.state).to eq 'synced'
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
......
...@@ -53,19 +53,15 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -53,19 +53,15 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
allow_any_instance_of(Repository) allow_any_instance_of(Repository)
.to receive(:find_remote_root_ref) .to receive(:find_remote_root_ref)
.with('geo', url_to_repo, anything) .with(url_to_repo, anything)
.and_return('master') .and_return('master')
end end
include_context 'lease handling' include_context 'lease handling'
it 'fetches project repository with JWT credentials' do it 'fetches project repository with JWT credentials' do
expect(repository).to receive(:with_config)
.with("http.#{url_to_repo}.extraHeader" => anything)
.and_call_original
expect(repository).to receive(:fetch_as_mirror) expect(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.once .once
subject.execute subject.execute
...@@ -87,7 +83,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -87,7 +83,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
it 'rescues when Gitlab::Shell::Error is raised' do it 'rescues when Gitlab::Shell::Error is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error) .and_raise(Gitlab::Shell::Error)
expect { subject.execute }.not_to raise_error expect { subject.execute }.not_to raise_error
...@@ -95,7 +91,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -95,7 +91,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
it 'rescues exception and fires after_create hook when Gitlab::Git::Repository::NoRepository is raised' do it 'rescues exception and fires after_create hook when Gitlab::Git::Repository::NoRepository is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
expect(repository).to receive(:after_create) expect(repository).to receive(:after_create)
...@@ -107,7 +103,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -107,7 +103,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
registry.save! registry.save!
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
...@@ -120,7 +116,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -120,7 +116,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
it 'marks sync as successful if no repository found' do it 'marks sync as successful if no repository found' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessSnippet::ERROR_MESSAGES[:no_repo])) .and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessSnippet::ERROR_MESSAGES[:no_repo]))
subject.execute subject.execute
...@@ -137,7 +133,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -137,7 +133,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
expect(registry.synced?).to be true expect(registry.synced?).to be true
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
...@@ -178,7 +174,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -178,7 +174,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
before do before do
allow(repository) allow(repository)
.to receive(:find_remote_root_ref) .to receive(:find_remote_root_ref)
.with('geo', url_to_repo, anything) .with(url_to_repo, anything)
.and_return('feature') .and_return('feature')
end end
...@@ -189,11 +185,6 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -189,11 +185,6 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
end end
it 'updates the default branch' do it 'updates the default branch' do
expect(repository).to receive(:with_config)
.with("http.#{url_to_repo}.extraHeader" => anything)
.and_call_original
.once
expect(repository).to receive(:change_head).with('feature').once expect(repository).to receive(:change_head).with('feature').once
subject.execute subject.execute
...@@ -208,11 +199,6 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -208,11 +199,6 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
end end
it 'updates the default branch' do it 'updates the default branch' do
expect(repository).to receive(:with_config)
.with("http.#{url_to_repo}.extraHeader" => anything)
.and_call_original
.once
expect(repository).to receive(:change_head).with('master').once expect(repository).to receive(:change_head).with('master').once
subject.execute subject.execute
...@@ -224,7 +210,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do ...@@ -224,7 +210,7 @@ RSpec.describe Geo::FrameworkRepositorySyncService, :geo do
context 'when repository sync fail' do context 'when repository sync fail' do
before do before do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new('shell error')) .and_raise(Gitlab::Shell::Error.new('shell error'))
end end
......
...@@ -36,7 +36,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -36,7 +36,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
allow_any_instance_of(Repository) allow_any_instance_of(Repository)
.to receive(:find_remote_root_ref) .to receive(:find_remote_root_ref)
.with('geo', url_to_repo, anything) .with(url_to_repo, anything)
.and_return('master') .and_return('master')
allow_any_instance_of(Geo::ProjectHousekeepingService).to receive(:execute) allow_any_instance_of(Geo::ProjectHousekeepingService).to receive(:execute)
...@@ -46,12 +46,8 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -46,12 +46,8 @@ RSpec.describe Geo::RepositorySyncService, :geo do
include_context 'lease handling' include_context 'lease handling'
it 'fetches project repository with JWT credentials' do it 'fetches project repository with JWT credentials' do
expect(repository).to receive(:with_config)
.with("http.#{url_to_repo}.extraHeader" => anything)
.and_call_original
expect(repository).to receive(:fetch_as_mirror) expect(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.once .once
subject.execute subject.execute
...@@ -73,7 +69,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -73,7 +69,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
it 'rescues when Gitlab::Shell::Error is raised' do it 'rescues when Gitlab::Shell::Error is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error) .and_raise(Gitlab::Shell::Error)
expect { subject.execute }.not_to raise_error expect { subject.execute }.not_to raise_error
...@@ -81,7 +77,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -81,7 +77,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
it 'rescues exception and fires after_create hook when Gitlab::Git::Repository::NoRepository is raised' do it 'rescues exception and fires after_create hook when Gitlab::Git::Repository::NoRepository is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
expect(repository).to receive(:after_create) expect(repository).to receive(:after_create)
...@@ -91,7 +87,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -91,7 +87,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
it 'increases retry count when Gitlab::Git::Repository::NoRepository is raised' do it 'increases retry count when Gitlab::Git::Repository::NoRepository is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
...@@ -106,7 +102,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -106,7 +102,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
registry = create(:geo_project_registry, project: project) registry = create(:geo_project_registry, project: project)
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccess::ERROR_MESSAGES[:no_repo])) .and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccess::ERROR_MESSAGES[:no_repo]))
subject.execute subject.execute
...@@ -124,7 +120,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -124,7 +120,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
expect(Geo::ProjectRegistry.last.resync_repository).to be false expect(Geo::ProjectRegistry.last.resync_repository).to be false
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
...@@ -138,7 +134,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -138,7 +134,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
create(:repository_state, :repository_verified, project: project) create(:repository_state, :repository_verified, project: project)
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccess::ERROR_MESSAGES[:no_repo])) .and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccess::ERROR_MESSAGES[:no_repo]))
subject.execute subject.execute
...@@ -237,7 +233,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -237,7 +233,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
before do before do
allow(project.repository) allow(project.repository)
.to receive(:find_remote_root_ref) .to receive(:find_remote_root_ref)
.with('geo', url_to_repo, anything) .with(url_to_repo, anything)
.and_return('feature') .and_return('feature')
end end
...@@ -248,11 +244,6 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -248,11 +244,6 @@ RSpec.describe Geo::RepositorySyncService, :geo do
end end
it 'updates the default branch' do it 'updates the default branch' do
expect(repository).to receive(:with_config)
.with("http.#{url_to_repo}.extraHeader" => anything)
.and_call_original
.once
expect(repository).to receive(:change_head).with('feature').once expect(repository).to receive(:change_head).with('feature').once
subject.execute subject.execute
...@@ -267,11 +258,6 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -267,11 +258,6 @@ RSpec.describe Geo::RepositorySyncService, :geo do
end end
it 'updates the default branch' do it 'updates the default branch' do
expect(repository).to receive(:with_config)
.with("http.#{url_to_repo}.extraHeader" => anything)
.and_call_original
.once
expect(repository).to receive(:change_head).with('master').once expect(repository).to receive(:change_head).with('master').once
subject.execute subject.execute
...@@ -285,7 +271,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do ...@@ -285,7 +271,7 @@ RSpec.describe Geo::RepositorySyncService, :geo do
before do before do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new('shell error')) .and_raise(Gitlab::Shell::Error.new('shell error'))
end end
......
...@@ -37,9 +37,8 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -37,9 +37,8 @@ RSpec.describe Geo::WikiSyncService, :geo do
include_context 'lease handling' include_context 'lease handling'
it 'fetches wiki repository with JWT credentials' do it 'fetches wiki repository with JWT credentials' do
expect(repository).to receive(:with_config).with("http.#{url_to_repo}.extraHeader" => anything).and_call_original
expect(repository).to receive(:fetch_as_mirror) expect(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.once .once
subject.execute subject.execute
...@@ -53,7 +52,7 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -53,7 +52,7 @@ RSpec.describe Geo::WikiSyncService, :geo do
it 'rescues exception when Gitlab::Shell::Error is raised' do it 'rescues exception when Gitlab::Shell::Error is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error) .and_raise(Gitlab::Shell::Error)
expect { subject.execute }.not_to raise_error expect { subject.execute }.not_to raise_error
...@@ -61,7 +60,7 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -61,7 +60,7 @@ RSpec.describe Geo::WikiSyncService, :geo do
it 'rescues exception when Gitlab::Git::Repository::NoRepository is raised' do it 'rescues exception when Gitlab::Git::Repository::NoRepository is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
expect { subject.execute }.not_to raise_error expect { subject.execute }.not_to raise_error
...@@ -69,7 +68,7 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -69,7 +68,7 @@ RSpec.describe Geo::WikiSyncService, :geo do
it 'increases retry count when Gitlab::Git::Repository::NoRepository is raised' do it 'increases retry count when Gitlab::Git::Repository::NoRepository is raised' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
...@@ -84,7 +83,7 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -84,7 +83,7 @@ RSpec.describe Geo::WikiSyncService, :geo do
registry = create(:geo_project_registry, project: project) registry = create(:geo_project_registry, project: project)
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessWiki::ERROR_MESSAGES[:no_repo])) .and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessWiki::ERROR_MESSAGES[:no_repo]))
subject.execute subject.execute
...@@ -100,7 +99,7 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -100,7 +99,7 @@ RSpec.describe Geo::WikiSyncService, :geo do
described_class.new(project).execute described_class.new(project).execute
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Git::Repository::NoRepository) .and_raise(Gitlab::Git::Repository::NoRepository)
subject.execute subject.execute
...@@ -114,7 +113,7 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -114,7 +113,7 @@ RSpec.describe Geo::WikiSyncService, :geo do
create(:repository_state, :wiki_verified, project: project) create(:repository_state, :wiki_verified, project: project)
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessWiki::ERROR_MESSAGES[:no_repo])) .and_raise(Gitlab::Shell::Error.new(Gitlab::GitAccessWiki::ERROR_MESSAGES[:no_repo]))
subject.execute subject.execute
...@@ -203,7 +202,7 @@ RSpec.describe Geo::WikiSyncService, :geo do ...@@ -203,7 +202,7 @@ RSpec.describe Geo::WikiSyncService, :geo do
before do before do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error.new('shell error')) .and_raise(Gitlab::Shell::Error.new('shell error'))
end end
......
...@@ -165,7 +165,7 @@ RSpec.shared_context 'lease handling' do ...@@ -165,7 +165,7 @@ RSpec.shared_context 'lease handling' do
it 'returns the lease when sync fail' do it 'returns the lease when sync fail' do
allow(repository).to receive(:fetch_as_mirror) allow(repository).to receive(:fetch_as_mirror)
.with(url_to_repo, remote_name: 'geo', forced: true) .with(url_to_repo, forced: true, http_authorization_header: anything)
.and_raise(Gitlab::Shell::Error) .and_raise(Gitlab::Shell::Error)
expect_to_cancel_exclusive_lease(lease_key, lease_uuid) expect_to_cancel_exclusive_lease(lease_key, lease_uuid)
......
...@@ -7,7 +7,6 @@ module Gitlab ...@@ -7,7 +7,6 @@ module Gitlab
attr_reader :project, :project_key, :repository_slug, :client, :errors, :users, :already_imported_cache_key attr_reader :project, :project_key, :repository_slug, :client, :errors, :users, :already_imported_cache_key
attr_accessor :logger attr_accessor :logger
REMOTE_NAME = 'bitbucket_server'
BATCH_SIZE = 100 BATCH_SIZE = 100
# The base cache key to use for tracking already imported objects. # The base cache key to use for tracking already imported objects.
ALREADY_IMPORTED_CACHE_KEY = ALREADY_IMPORTED_CACHE_KEY =
...@@ -142,7 +141,7 @@ module Gitlab ...@@ -142,7 +141,7 @@ module Gitlab
log_info(stage: 'import_repository', message: 'starting import') log_info(stage: 'import_repository', message: 'starting import')
project.ensure_repository project.ensure_repository
project.repository.fetch_as_mirror(project.import_url, refmap: self.class.refmap, remote_name: REMOTE_NAME) project.repository.fetch_as_mirror(project.import_url, refmap: self.class.refmap)
log_info(stage: 'import_repository', message: 'finished import') log_info(stage: 'import_repository', message: 'finished import')
rescue Gitlab::Shell::Error => e rescue Gitlab::Shell::Error => e
......
...@@ -699,11 +699,11 @@ module Gitlab ...@@ -699,11 +699,11 @@ module Gitlab
write_ref(ref, start_point) write_ref(ref, start_point)
end end
def find_remote_root_ref(remote_name, remote_url, authorization = nil) def find_remote_root_ref(remote_url, authorization = nil)
return unless remote_name.present? && remote_url.present? return unless remote_url.present?
wrapped_gitaly_errors do wrapped_gitaly_errors do
gitaly_remote_client.find_remote_root_ref(remote_name, remote_url, authorization) gitaly_remote_client.find_remote_root_ref(remote_url, authorization)
end end
end end
...@@ -803,18 +803,18 @@ module Gitlab ...@@ -803,18 +803,18 @@ module Gitlab
# no_tags - should we use --no-tags flag? # no_tags - should we use --no-tags flag?
# prune - should we use --prune flag? # prune - should we use --prune flag?
# check_tags_changed - should we ask gitaly to calculate whether any tags changed? # check_tags_changed - should we ask gitaly to calculate whether any tags changed?
def fetch_remote(remote, url: nil, refmap: nil, ssh_auth: nil, forced: false, no_tags: false, prune: true, check_tags_changed: false) def fetch_remote(url, refmap: nil, ssh_auth: nil, forced: false, no_tags: false, prune: true, check_tags_changed: false, http_authorization_header: "")
wrapped_gitaly_errors do wrapped_gitaly_errors do
gitaly_repository_client.fetch_remote( gitaly_repository_client.fetch_remote(
remote, url,
url: url,
refmap: refmap, refmap: refmap,
ssh_auth: ssh_auth, ssh_auth: ssh_auth,
forced: forced, forced: forced,
no_tags: no_tags, no_tags: no_tags,
prune: prune, prune: prune,
check_tags_changed: check_tags_changed, check_tags_changed: check_tags_changed,
timeout: GITLAB_PROJECTS_TIMEOUT timeout: GITLAB_PROJECTS_TIMEOUT,
http_authorization_header: http_authorization_header
) )
end end
end end
...@@ -924,12 +924,6 @@ module Gitlab ...@@ -924,12 +924,6 @@ module Gitlab
end end
end end
def delete_config(*keys)
wrapped_gitaly_errors do
gitaly_repository_client.delete_config(keys)
end
end
def disconnect_alternates def disconnect_alternates
wrapped_gitaly_errors do wrapped_gitaly_errors do
gitaly_repository_client.disconnect_alternates gitaly_repository_client.disconnect_alternates
......
...@@ -26,8 +26,7 @@ module Gitlab ...@@ -26,8 +26,7 @@ module Gitlab
@storage = repository.storage @storage = repository.storage
end end
# The remote_name parameter is deprecated and will be removed soon. def find_remote_root_ref(remote_url, authorization)
def find_remote_root_ref(remote_name, remote_url, authorization)
request = Gitaly::FindRemoteRootRefRequest.new(repository: @gitaly_repo, request = Gitaly::FindRemoteRootRefRequest.new(repository: @gitaly_repo,
remote_url: remote_url, remote_url: remote_url,
http_authorization_header: authorization) http_authorization_header: authorization)
......
...@@ -73,17 +73,20 @@ module Gitlab ...@@ -73,17 +73,20 @@ module Gitlab
# rubocop: disable Metrics/ParameterLists # rubocop: disable Metrics/ParameterLists
# The `remote` parameter is going away soonish anyway, at which point the # The `remote` parameter is going away soonish anyway, at which point the
# Rubocop warning can be enabled again. # Rubocop warning can be enabled again.
def fetch_remote(remote, url:, refmap:, ssh_auth:, forced:, no_tags:, timeout:, prune: true, check_tags_changed: false) def fetch_remote(url, refmap:, ssh_auth:, forced:, no_tags:, timeout:, prune: true, check_tags_changed: false, http_authorization_header: "")
request = Gitaly::FetchRemoteRequest.new( request = Gitaly::FetchRemoteRequest.new(
repository: @gitaly_repo, remote: remote, force: forced, repository: @gitaly_repo,
no_tags: no_tags, timeout: timeout, no_prune: !prune, force: forced,
check_tags_changed: check_tags_changed no_tags: no_tags,
timeout: timeout,
no_prune: !prune,
check_tags_changed: check_tags_changed,
remote_params: Gitaly::Remote.new(
url: url,
mirror_refmaps: Array.wrap(refmap).map(&:to_s),
http_authorization_header: http_authorization_header
)
) )
if url
request.remote_params = Gitaly::Remote.new(url: url,
mirror_refmaps: Array.wrap(refmap).map(&:to_s))
end
if ssh_auth&.ssh_mirror_url? if ssh_auth&.ssh_mirror_url?
if ssh_auth.ssh_key_auth? && ssh_auth.ssh_private_key.present? if ssh_auth.ssh_key_auth? && ssh_auth.ssh_private_key.present?
...@@ -297,22 +300,6 @@ module Gitlab ...@@ -297,22 +300,6 @@ module Gitlab
nil nil
end end
def delete_config(keys)
return if keys.empty?
request = Gitaly::DeleteConfigRequest.new(repository: @gitaly_repo, keys: keys)
GitalyClient.call(
@storage,
:repository_service,
:delete_config,
request,
timeout: GitalyClient.fast_timeout
)
nil
end
def license_short_name def license_short_name
request = Gitaly::FindLicenseRequest.new(repository: @gitaly_repo) request = Gitaly::FindLicenseRequest.new(repository: @gitaly_repo)
......
...@@ -40,7 +40,7 @@ module Gitlab ...@@ -40,7 +40,7 @@ module Gitlab
# updating the timestamp. # updating the timestamp.
project.update_column(:last_repository_updated_at, Time.zone.now) project.update_column(:last_repository_updated_at, Time.zone.now)
project.repository.fetch_remote('github', url: project.import_url, refmap: Gitlab::GithubImport.refmap, forced: false) project.repository.fetch_remote(project.import_url, refmap: Gitlab::GithubImport.refmap, forced: false)
pname = project.path_with_namespace pname = project.path_with_namespace
......
...@@ -33,7 +33,8 @@ RSpec.describe Ci::RunnersFinder do ...@@ -33,7 +33,8 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'filter by search term' do context 'filtering' do
context 'by search term' do
it 'calls Ci::Runner.search' do it 'calls Ci::Runner.search' do
expect(Ci::Runner).to receive(:search).with('term').and_call_original expect(Ci::Runner).to receive(:search).with('term').and_call_original
...@@ -41,7 +42,7 @@ RSpec.describe Ci::RunnersFinder do ...@@ -41,7 +42,7 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'filter by status' do context 'by status' do
Ci::Runner::AVAILABLE_STATUSES.each do |status| Ci::Runner::AVAILABLE_STATUSES.each do |status|
it "calls the corresponding :#{status} scope on Ci::Runner" do it "calls the corresponding :#{status} scope on Ci::Runner" do
expect(Ci::Runner).to receive(status.to_sym).and_call_original expect(Ci::Runner).to receive(status.to_sym).and_call_original
...@@ -51,7 +52,7 @@ RSpec.describe Ci::RunnersFinder do ...@@ -51,7 +52,7 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'filter by runner type' do context 'by runner type' do
it 'calls the corresponding scope on Ci::Runner' do it 'calls the corresponding scope on Ci::Runner' do
expect(Ci::Runner).to receive(:project_type).and_call_original expect(Ci::Runner).to receive(:project_type).and_call_original
...@@ -59,15 +60,16 @@ RSpec.describe Ci::RunnersFinder do ...@@ -59,15 +60,16 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'filter by tag_name' do context 'by tag_name' do
it 'calls the corresponding scope on Ci::Runner' do it 'calls the corresponding scope on Ci::Runner' do
expect(Ci::Runner).to receive(:tagged_with).with(%w[tag1 tag2]).and_call_original expect(Ci::Runner).to receive(:tagged_with).with(%w[tag1 tag2]).and_call_original
described_class.new(current_user: admin, params: { tag_name: %w[tag1 tag2] }).execute described_class.new(current_user: admin, params: { tag_name: %w[tag1 tag2] }).execute
end end
end end
end
context 'sort' do context 'sorting' do
let_it_be(:runner1) { create :ci_runner, created_at: '2018-07-12 07:00', contacted_at: 1.minute.ago } let_it_be(:runner1) { create :ci_runner, created_at: '2018-07-12 07:00', contacted_at: 1.minute.ago }
let_it_be(:runner2) { create :ci_runner, created_at: '2018-07-12 08:00', contacted_at: 3.minutes.ago } let_it_be(:runner2) { create :ci_runner, created_at: '2018-07-12 08:00', contacted_at: 3.minutes.ago }
let_it_be(:runner3) { create :ci_runner, created_at: '2018-07-12 09:00', contacted_at: 2.minutes.ago } let_it_be(:runner3) { create :ci_runner, created_at: '2018-07-12 09:00', contacted_at: 2.minutes.ago }
...@@ -121,7 +123,7 @@ RSpec.describe Ci::RunnersFinder do ...@@ -121,7 +123,7 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'non admin user' do context 'by non admin user' do
it 'returns no runners' do it 'returns no runners' do
user = create :user user = create :user
create :ci_runner, active: true create :ci_runner, active: true
...@@ -131,7 +133,7 @@ RSpec.describe Ci::RunnersFinder do ...@@ -131,7 +133,7 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'user is nil' do context 'when user is nil' do
it 'returns no runners' do it 'returns no runners' do
user = nil user = nil
create :ci_runner, active: true create :ci_runner, active: true
...@@ -182,12 +184,13 @@ RSpec.describe Ci::RunnersFinder do ...@@ -182,12 +184,13 @@ RSpec.describe Ci::RunnersFinder do
describe '#execute' do describe '#execute' do
subject { described_class.new(current_user: user, group: group, params: params).execute } subject { described_class.new(current_user: user, group: group, params: params).execute }
context 'no params' do context 'with user as group owner' do
before do before do
group.add_owner(user) group.add_owner(user)
end end
it 'returns all runners' do context 'passing no params' do
it 'returns all descendant runners' do
expect(subject).to eq([runner_project_7, runner_project_6, runner_project_5, expect(subject).to eq([runner_project_7, runner_project_6, runner_project_5,
runner_project_4, runner_project_3, runner_project_2, runner_project_4, runner_project_3, runner_project_2,
runner_project_1, runner_sub_group_4, runner_sub_group_3, runner_project_1, runner_sub_group_4, runner_sub_group_3,
...@@ -198,10 +201,6 @@ RSpec.describe Ci::RunnersFinder do ...@@ -198,10 +201,6 @@ RSpec.describe Ci::RunnersFinder do
context 'with sort param' do context 'with sort param' do
let(:params) { { sort: 'contacted_asc' } } let(:params) { { sort: 'contacted_asc' } }
before do
group.add_owner(user)
end
it 'sorts by specified attribute' do it 'sorts by specified attribute' do
expect(subject).to eq([runner_group, runner_sub_group_1, runner_sub_group_2, expect(subject).to eq([runner_group, runner_sub_group_1, runner_sub_group_2,
runner_sub_group_3, runner_sub_group_4, runner_project_1, runner_sub_group_3, runner_sub_group_4, runner_project_1,
...@@ -210,57 +209,44 @@ RSpec.describe Ci::RunnersFinder do ...@@ -210,57 +209,44 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'filter by search term' do context 'filtering' do
context 'by search term' do
let(:params) { { search: 'runner_project_search' } } let(:params) { { search: 'runner_project_search' } }
before do
group.add_owner(user)
end
it 'returns correct runner' do it 'returns correct runner' do
expect(subject).to eq([runner_project_3]) expect(subject).to eq([runner_project_3])
end end
end end
context 'filter by status' do context 'by status' do
let(:params) { { status_status: 'paused' } } let(:params) { { status_status: 'paused' } }
before do
group.add_owner(user)
end
it 'returns correct runner' do it 'returns correct runner' do
expect(subject).to eq([runner_sub_group_1]) expect(subject).to eq([runner_sub_group_1])
end end
end end
context 'filter by tag_name' do context 'by tag_name' do
let(:params) { { tag_name: %w[runner_tag] } } let(:params) { { tag_name: %w[runner_tag] } }
before do
group.add_owner(user)
end
it 'returns correct runner' do it 'returns correct runner' do
expect(subject).to eq([runner_project_5]) expect(subject).to eq([runner_project_5])
end end
end end
context 'filter by runner type' do context 'by runner type' do
let(:params) { { type_type: 'project_type' } } let(:params) { { type_type: 'project_type' } }
before do
group.add_owner(user)
end
it 'returns correct runners' do it 'returns correct runners' do
expect(subject).to eq([runner_project_7, runner_project_6, expect(subject).to eq([runner_project_7, runner_project_6,
runner_project_5, runner_project_4, runner_project_5, runner_project_4,
runner_project_3, runner_project_2, runner_project_1]) runner_project_3, runner_project_2, runner_project_1])
end end
end end
end
end
context 'user has no access to runners' do context 'when user is not group owner' do
where(:user_permission) do where(:user_permission) do
[:maintainer, :developer, :reporter, :guest] [:maintainer, :developer, :reporter, :guest]
end end
...@@ -276,13 +262,13 @@ RSpec.describe Ci::RunnersFinder do ...@@ -276,13 +262,13 @@ RSpec.describe Ci::RunnersFinder do
end end
end end
context 'user with no access' do context 'when user has no access' do
it 'returns no runners' do it 'returns no runners' do
expect(subject).to be_empty expect(subject).to be_empty
end end
end end
context 'user is nil' do context 'when user is nil' do
let_it_be(:user) { nil } let_it_be(:user) { nil }
it 'returns no runners' do it 'returns no runners' do
...@@ -294,7 +280,7 @@ RSpec.describe Ci::RunnersFinder do ...@@ -294,7 +280,7 @@ RSpec.describe Ci::RunnersFinder do
describe '#sort_key' do describe '#sort_key' do
subject { described_class.new(current_user: user, group: group, params: params).sort_key } subject { described_class.new(current_user: user, group: group, params: params).sort_key }
context 'no params' do context 'without params' do
it 'returns created_at_desc' do it 'returns created_at_desc' do
expect(subject).to eq('created_at_desc') expect(subject).to eq('created_at_desc')
end end
......
...@@ -309,6 +309,7 @@ describe('Blob content viewer component', () => { ...@@ -309,6 +309,7 @@ describe('Blob content viewer component', () => {
expect(findBlobEdit().props()).toMatchObject({ expect(findBlobEdit().props()).toMatchObject({
editPath: editBlobPath, editPath: editBlobPath,
webIdePath: ideEditPath, webIdePath: ideEditPath,
showEditButton: true,
}); });
}); });
...@@ -326,10 +327,11 @@ describe('Blob content viewer component', () => { ...@@ -326,10 +327,11 @@ describe('Blob content viewer component', () => {
expect(findBlobEdit().props()).toMatchObject({ expect(findBlobEdit().props()).toMatchObject({
editPath: editBlobPath, editPath: editBlobPath,
webIdePath: ideEditPath, webIdePath: ideEditPath,
showEditButton: true,
}); });
}); });
it('does not render BlobHeaderEdit button when viewing a binary file', async () => { it('renders BlobHeaderEdit button for binary files', async () => {
fullFactory({ fullFactory({
mockData: { blobInfo: richMockData, isBinary: true }, mockData: { blobInfo: richMockData, isBinary: true },
stubs: { stubs: {
...@@ -340,7 +342,11 @@ describe('Blob content viewer component', () => { ...@@ -340,7 +342,11 @@ describe('Blob content viewer component', () => {
await nextTick(); await nextTick();
expect(findBlobEdit().exists()).toBe(false); expect(findBlobEdit().props()).toMatchObject({
editPath: editBlobPath,
webIdePath: ideEditPath,
showEditButton: false,
});
}); });
describe('BlobButtonGroup', () => { describe('BlobButtonGroup', () => {
......
...@@ -6,6 +6,7 @@ import WebIdeLink from '~/vue_shared/components/web_ide_link.vue'; ...@@ -6,6 +6,7 @@ import WebIdeLink from '~/vue_shared/components/web_ide_link.vue';
const DEFAULT_PROPS = { const DEFAULT_PROPS = {
editPath: 'some_file.js/edit', editPath: 'some_file.js/edit',
webIdePath: 'some_file.js/ide/edit', webIdePath: 'some_file.js/ide/edit',
showEditButton: true,
}; };
describe('BlobEdit component', () => { describe('BlobEdit component', () => {
...@@ -31,8 +32,8 @@ describe('BlobEdit component', () => { ...@@ -31,8 +32,8 @@ describe('BlobEdit component', () => {
}); });
const findButtons = () => wrapper.findAll(GlButton); const findButtons = () => wrapper.findAll(GlButton);
const findEditButton = () => findButtons().at(0); const findEditButton = () => wrapper.find('[data-testid="edit"]');
const findWebIdeButton = () => findButtons().at(1); const findWebIdeButton = () => wrapper.find('[data-testid="web-ide"]');
const findWebIdeLink = () => wrapper.find(WebIdeLink); const findWebIdeLink = () => wrapper.find(WebIdeLink);
it('renders component', () => { it('renders component', () => {
...@@ -77,6 +78,23 @@ describe('BlobEdit component', () => { ...@@ -77,6 +78,23 @@ describe('BlobEdit component', () => {
editUrl, editUrl,
webIdeUrl, webIdeUrl,
isBlob: true, isBlob: true,
showEditButton: true,
});
});
describe('Without Edit button', () => {
const showEditButton = false;
it('renders WebIdeLink component without an edit button', () => {
createComponent(true, { showEditButton });
expect(findWebIdeLink().props()).toMatchObject({ showEditButton });
});
it('does not render an Edit button', () => {
createComponent(false, { showEditButton });
expect(findEditButton().exists()).toBe(false);
}); });
}); });
}); });
...@@ -32,8 +32,7 @@ RSpec.describe Gitlab::BitbucketServerImport::Importer do ...@@ -32,8 +32,7 @@ RSpec.describe Gitlab::BitbucketServerImport::Importer do
expect(subject).to receive(:delete_temp_branches) expect(subject).to receive(:delete_temp_branches)
expect(project.repository).to receive(:fetch_as_mirror) expect(project.repository).to receive(:fetch_as_mirror)
.with('http://bitbucket:test@my-bitbucket', .with('http://bitbucket:test@my-bitbucket',
refmap: [:heads, :tags, '+refs/pull-requests/*/to:refs/merge-requests/*/head'], refmap: [:heads, :tags, '+refs/pull-requests/*/to:refs/merge-requests/*/head'])
remote_name: 'bitbucket_server')
subject.execute subject.execute
end end
......
...@@ -491,6 +491,8 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do ...@@ -491,6 +491,8 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do
end end
describe '#fetch_remote' do describe '#fetch_remote' do
let(:url) { 'http://example.clom' }
it 'delegates to the gitaly RepositoryService' do it 'delegates to the gitaly RepositoryService' do
ssh_auth = double(:ssh_auth) ssh_auth = double(:ssh_auth)
expected_opts = { expected_opts = {
...@@ -500,17 +502,17 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do ...@@ -500,17 +502,17 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do
timeout: described_class::GITLAB_PROJECTS_TIMEOUT, timeout: described_class::GITLAB_PROJECTS_TIMEOUT,
prune: false, prune: false,
check_tags_changed: false, check_tags_changed: false,
url: nil, refmap: nil,
refmap: nil http_authorization_header: ""
} }
expect(repository.gitaly_repository_client).to receive(:fetch_remote).with('remote-name', expected_opts) expect(repository.gitaly_repository_client).to receive(:fetch_remote).with(url, expected_opts)
repository.fetch_remote('remote-name', ssh_auth: ssh_auth, forced: true, no_tags: true, prune: false, check_tags_changed: false) repository.fetch_remote(url, ssh_auth: ssh_auth, forced: true, no_tags: true, prune: false, check_tags_changed: false)
end end
it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RepositoryService, :fetch_remote do it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RepositoryService, :fetch_remote do
subject { repository.fetch_remote('remote-name') } subject { repository.fetch_remote(url) }
end end
end end
...@@ -584,29 +586,29 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do ...@@ -584,29 +586,29 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do
expect_any_instance_of(Gitlab::GitalyClient::RemoteService) expect_any_instance_of(Gitlab::GitalyClient::RemoteService)
.to receive(:find_remote_root_ref).and_call_original .to receive(:find_remote_root_ref).and_call_original
expect(repository.find_remote_root_ref('origin', SeedHelper::GITLAB_GIT_TEST_REPO_URL)).to eq 'master' expect(repository.find_remote_root_ref(SeedHelper::GITLAB_GIT_TEST_REPO_URL)).to eq 'master'
end end
it 'returns UTF-8' do it 'returns UTF-8' do
expect(repository.find_remote_root_ref('origin', SeedHelper::GITLAB_GIT_TEST_REPO_URL)).to be_utf8 expect(repository.find_remote_root_ref(SeedHelper::GITLAB_GIT_TEST_REPO_URL)).to be_utf8
end end
it 'returns nil when remote name is nil' do it 'returns nil when remote name is nil' do
expect_any_instance_of(Gitlab::GitalyClient::RemoteService) expect_any_instance_of(Gitlab::GitalyClient::RemoteService)
.not_to receive(:find_remote_root_ref) .not_to receive(:find_remote_root_ref)
expect(repository.find_remote_root_ref(nil, nil)).to be_nil expect(repository.find_remote_root_ref(nil)).to be_nil
end end
it 'returns nil when remote name is empty' do it 'returns nil when remote name is empty' do
expect_any_instance_of(Gitlab::GitalyClient::RemoteService) expect_any_instance_of(Gitlab::GitalyClient::RemoteService)
.not_to receive(:find_remote_root_ref) .not_to receive(:find_remote_root_ref)
expect(repository.find_remote_root_ref('', '')).to be_nil expect(repository.find_remote_root_ref('')).to be_nil
end end
it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RemoteService, :find_remote_root_ref do it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RemoteService, :find_remote_root_ref do
subject { repository.find_remote_root_ref('origin', SeedHelper::GITLAB_GIT_TEST_REPO_URL) } subject { repository.find_remote_root_ref(SeedHelper::GITLAB_GIT_TEST_REPO_URL) }
end end
end end
...@@ -1810,34 +1812,6 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do ...@@ -1810,34 +1812,6 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do
end end
end end
describe '#delete_config' do
let(:repository) { mutable_repository }
let(:entries) do
{
'test.foo1' => 'bla bla',
'test.foo2' => 1234,
'test.foo3' => true
}
end
it 'can delete config settings' do
entries.each do |key, value|
repository_rugged.config[key] = value
end
expect(repository.delete_config(*%w[does.not.exist test.foo1 test.foo2])).to be_nil
# Workaround for https://github.com/libgit2/rugged/issues/785: If
# Gitaly changes .gitconfig while Rugged has the file loaded
# Rugged::Repository#each_key will report stale values unless a
# lookup is done first.
expect(repository_rugged.config['test.foo1']).to be_nil
config_keys = repository_rugged.config.each_key.to_a
expect(config_keys).not_to include('test.foo1')
expect(config_keys).not_to include('test.foo2')
end
end
describe '#merge_to_ref' do describe '#merge_to_ref' do
let(:repository) { mutable_repository } let(:repository) { mutable_repository }
let(:branch_head) { '6d394385cf567f80a8fd85055db1ab4c5295806f' } let(:branch_head) { '6d394385cf567f80a8fd85055db1ab4c5295806f' }
......
...@@ -6,11 +6,9 @@ RSpec.describe Gitlab::GitalyClient::RemoteService do ...@@ -6,11 +6,9 @@ RSpec.describe Gitlab::GitalyClient::RemoteService do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:storage_name) { project.repository_storage } let(:storage_name) { project.repository_storage }
let(:relative_path) { project.disk_path + '.git' } let(:relative_path) { project.disk_path + '.git' }
let(:remote_name) { 'my-remote' }
let(:client) { described_class.new(project.repository) } let(:client) { described_class.new(project.repository) }
describe '#find_remote_root_ref' do describe '#find_remote_root_ref' do
let(:remote) { 'origin' }
let(:url) { 'http://git.example.com/my-repo.git' } let(:url) { 'http://git.example.com/my-repo.git' }
let(:auth) { 'Basic secret' } let(:auth) { 'Basic secret' }
let(:expected_params) { { remote_url: url, http_authorization_header: auth } } let(:expected_params) { { remote_url: url, http_authorization_header: auth } }
...@@ -22,7 +20,7 @@ RSpec.describe Gitlab::GitalyClient::RemoteService do ...@@ -22,7 +20,7 @@ RSpec.describe Gitlab::GitalyClient::RemoteService do
.with(gitaly_request_with_params(expected_params), kind_of(Hash)) .with(gitaly_request_with_params(expected_params), kind_of(Hash))
.and_return(double(ref: 'master')) .and_return(double(ref: 'master'))
expect(client.find_remote_root_ref(remote, url, auth)).to eq 'master' expect(client.find_remote_root_ref(url, auth)).to eq 'master'
end end
it 'ensure ref is a valid UTF-8 string' do it 'ensure ref is a valid UTF-8 string' do
...@@ -32,7 +30,7 @@ RSpec.describe Gitlab::GitalyClient::RemoteService do ...@@ -32,7 +30,7 @@ RSpec.describe Gitlab::GitalyClient::RemoteService do
.with(gitaly_request_with_params(expected_params), kind_of(Hash)) .with(gitaly_request_with_params(expected_params), kind_of(Hash))
.and_return(double(ref: "an_invalid_ref_\xE5")) .and_return(double(ref: "an_invalid_ref_\xE5"))
expect(client.find_remote_root_ref(remote, url, auth)).to eq "an_invalid_ref_å" expect(client.find_remote_root_ref(url, auth)).to eq "an_invalid_ref_å"
end end
end end
......
...@@ -122,14 +122,15 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do ...@@ -122,14 +122,15 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do
end end
describe '#fetch_remote' do describe '#fetch_remote' do
shared_examples 'a fetch' do let(:url) { 'https://example.com/git/repo.git' }
it 'sends a fetch_remote_request message' do
expected_remote_params = Gitaly::Remote.new(
url: url, http_authorization_header: "", mirror_refmaps: [])
it 'sends a fetch_remote_request message' do
expected_request = gitaly_request_with_params( expected_request = gitaly_request_with_params(
remote: remote, remote_params: Gitaly::Remote.new(
remote_params: url ? expected_remote_params : nil, url: url,
http_authorization_header: "",
mirror_refmaps: []
),
ssh_key: '', ssh_key: '',
known_hosts: '', known_hosts: '',
force: false, force: false,
...@@ -143,7 +144,7 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do ...@@ -143,7 +144,7 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do
.with(expected_request, kind_of(Hash)) .with(expected_request, kind_of(Hash))
.and_return(double(value: true)) .and_return(double(value: true))
client.fetch_remote(remote, url: url, refmap: nil, ssh_auth: nil, forced: false, no_tags: false, timeout: 1, check_tags_changed: false) client.fetch_remote(url, refmap: nil, ssh_auth: nil, forced: false, no_tags: false, timeout: 1, check_tags_changed: false)
end end
context 'SSH auth' do context 'SSH auth' do
...@@ -170,12 +171,12 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do ...@@ -170,12 +171,12 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do
end end
it do it do
expected_remote_params = Gitaly::Remote.new(
url: url, http_authorization_header: "", mirror_refmaps: [])
expected_request = gitaly_request_with_params({ expected_request = gitaly_request_with_params({
remote: remote, remote_params: Gitaly::Remote.new(
remote_params: url ? expected_remote_params : nil, url: url,
http_authorization_header: "",
mirror_refmaps: []
),
ssh_key: '', ssh_key: '',
known_hosts: '', known_hosts: '',
force: false, force: false,
...@@ -188,24 +189,9 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do ...@@ -188,24 +189,9 @@ RSpec.describe Gitlab::GitalyClient::RepositoryService do
.with(expected_request, kind_of(Hash)) .with(expected_request, kind_of(Hash))
.and_return(double(value: true)) .and_return(double(value: true))
client.fetch_remote(remote, url: url, refmap: nil, ssh_auth: ssh_auth, forced: false, no_tags: false, timeout: 1) client.fetch_remote(url, refmap: nil, ssh_auth: ssh_auth, forced: false, no_tags: false, timeout: 1)
end
end
end
end
context 'with remote' do
it_behaves_like 'a fetch' do
let(:remote) { 'remote-name' }
let(:url) { nil }
end end
end end
context 'with URL' do
it_behaves_like 'a fetch' do
let(:remote) { "" }
let(:url) { 'https://example.com/git/repo.git' }
end
end end
end end
......
...@@ -164,7 +164,7 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter do ...@@ -164,7 +164,7 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter do
expect(project.repository) expect(project.repository)
.to receive(:fetch_remote) .to receive(:fetch_remote)
.with('github', forced: false, url: url, refmap: Gitlab::GithubImport.refmap) .with(url, forced: false, refmap: Gitlab::GithubImport.refmap)
freeze_time do freeze_time do
importer.update_repository importer.update_repository
......
...@@ -1096,15 +1096,14 @@ RSpec.describe Repository do ...@@ -1096,15 +1096,14 @@ RSpec.describe Repository do
describe '#fetch_as_mirror' do describe '#fetch_as_mirror' do
let(:url) { "http://example.com" } let(:url) { "http://example.com" }
let(:remote_name) { "remote-name" }
it 'fetches the URL without creating a remote' do it 'fetches the URL without creating a remote' do
expect(repository) expect(repository)
.to receive(:fetch_remote) .to receive(:fetch_remote)
.with(remote_name, url: url, forced: false, prune: true, refmap: :all_refs) .with(url, forced: false, prune: true, refmap: :all_refs, http_authorization_header: "")
.and_return(nil) .and_return(nil)
repository.fetch_as_mirror(url, remote_name: remote_name) repository.fetch_as_mirror(url)
end end
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