From 0a3548df739c1a8d91e8a7ff0831c8b56e2de6de Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 27 Feb 2020 16:02:40 -0600 Subject: [PATCH 1/3] Pass keep_divergent_refs in RemoteMirror#update_repository --- app/models/remote_mirror.rb | 2 ++ spec/models/remote_mirror_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/app/models/remote_mirror.rb b/app/models/remote_mirror.rb index 1e5c93cd9139b7..0334d63dd36905 100644 --- a/app/models/remote_mirror.rb +++ b/app/models/remote_mirror.rb @@ -117,6 +117,8 @@ def update_repository(options) end end + options[:keep_divergent_refs] = keep_divergent_refs? + Gitlab::Git::RemoteMirror.new( project.repository.raw, remote_name, diff --git a/spec/models/remote_mirror_spec.rb b/spec/models/remote_mirror_spec.rb index f5e718e0e09912..15b162ae87a8b8 100644 --- a/spec/models/remote_mirror_spec.rb +++ b/spec/models/remote_mirror_spec.rb @@ -142,6 +142,26 @@ end end + describe '#update_repository' do + let(:git_remote_mirror) { spy } + + before do + stub_const('Gitlab::Git::RemoteMirror', git_remote_mirror) + end + + it 'includes the `keep_divergent_refs` setting' do + mirror = build_stubbed(:remote_mirror, keep_divergent_refs: true) + + mirror.update_repository({}) + + expect(git_remote_mirror).to have_received(:new).with( + anything, + mirror.remote_name, + hash_including(keep_divergent_refs: true) + ) + end + end + describe '#safe_url' do context 'when URL contains credentials' do it 'masks the credentials' do -- GitLab From fcc0315266e74ce3b8fe0d13ab7c3402565eadc5 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 27 Feb 2020 15:34:36 -0600 Subject: [PATCH 2/3] Add keep_divergent_refs to Git::RemoteMirror This receives the flag from `RemoteMirror#update_repository` and passes the flag to the Gitaly client. --- lib/gitlab/git/remote_mirror.rb | 8 +++++--- spec/lib/gitlab/git/remote_mirror_spec.rb | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/gitlab/git/remote_mirror.rb b/lib/gitlab/git/remote_mirror.rb index df3cd422527d67..d9f51a7e84446b 100644 --- a/lib/gitlab/git/remote_mirror.rb +++ b/lib/gitlab/git/remote_mirror.rb @@ -5,14 +5,15 @@ module Git class RemoteMirror include Gitlab::Git::WrapsGitalyErrors - attr_reader :repository, :ref_name, :only_branches_matching, :ssh_key, :known_hosts + attr_reader :repository, :ref_name, :only_branches_matching, :ssh_key, :known_hosts, :keep_divergent_refs - def initialize(repository, ref_name, only_branches_matching: [], ssh_key: nil, known_hosts: nil) + def initialize(repository, ref_name, only_branches_matching: [], ssh_key: nil, known_hosts: nil, keep_divergent_refs: false) @repository = repository @ref_name = ref_name @only_branches_matching = only_branches_matching @ssh_key = ssh_key @known_hosts = known_hosts + @keep_divergent_refs = keep_divergent_refs end def update @@ -21,7 +22,8 @@ def update ref_name, only_branches_matching, ssh_key: ssh_key, - known_hosts: known_hosts + known_hosts: known_hosts, + keep_divergent_refs: keep_divergent_refs ) end end diff --git a/spec/lib/gitlab/git/remote_mirror_spec.rb b/spec/lib/gitlab/git/remote_mirror_spec.rb index 9744562b51bb61..edef91b8bc6a7c 100644 --- a/spec/lib/gitlab/git/remote_mirror_spec.rb +++ b/spec/lib/gitlab/git/remote_mirror_spec.rb @@ -7,14 +7,14 @@ let(:project) { create(:project, :repository) } let(:repository) { project.repository } let(:ref_name) { 'foo' } - let(:options) { { only_branches_matching: ['master'], ssh_key: 'KEY', known_hosts: 'KNOWN HOSTS' } } + let(:options) { { only_branches_matching: ['master'], ssh_key: 'KEY', known_hosts: 'KNOWN HOSTS', keep_divergent_refs: true } } subject(:remote_mirror) { described_class.new(repository, ref_name, **options) } it 'delegates to the Gitaly client' do expect(repository.gitaly_remote_client) .to receive(:update_remote_mirror) - .with(ref_name, ['master'], ssh_key: 'KEY', known_hosts: 'KNOWN HOSTS') + .with(ref_name, ['master'], ssh_key: 'KEY', known_hosts: 'KNOWN HOSTS', keep_divergent_refs: true) remote_mirror.update end -- GitLab From 3c0e3b8a75ff5f99ea50b291ae541b46b9a4e7e7 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 27 Feb 2020 16:03:51 -0600 Subject: [PATCH 3/3] Add keep_divergent_refs to GitalyClient::RemoteService The option defaults to false to match existing behavior. --- lib/gitlab/gitaly_client/remote_service.rb | 3 ++- spec/lib/gitlab/gitaly_client/remote_service_spec.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/gitaly_client/remote_service.rb b/lib/gitlab/gitaly_client/remote_service.rb index 2405f3be197a85..4566c59bbe0ed2 100644 --- a/lib/gitlab/gitaly_client/remote_service.rb +++ b/lib/gitlab/gitaly_client/remote_service.rb @@ -53,7 +53,7 @@ def find_remote_root_ref(remote_name) encode_utf8(response.ref) end - def update_remote_mirror(ref_name, only_branches_matching, ssh_key: nil, known_hosts: nil) + def update_remote_mirror(ref_name, only_branches_matching, ssh_key: nil, known_hosts: nil, keep_divergent_refs: false) req_enum = Enumerator.new do |y| first_request = Gitaly::UpdateRemoteMirrorRequest.new( repository: @gitaly_repo, @@ -62,6 +62,7 @@ def update_remote_mirror(ref_name, only_branches_matching, ssh_key: nil, known_h first_request.ssh_key = ssh_key if ssh_key.present? first_request.known_hosts = known_hosts if known_hosts.present? + first_request.keep_divergent_refs = keep_divergent_refs y.yield(first_request) diff --git a/spec/lib/gitlab/gitaly_client/remote_service_spec.rb b/spec/lib/gitlab/gitaly_client/remote_service_spec.rb index 2658414d9b02cd..2bddec739fc478 100644 --- a/spec/lib/gitlab/gitaly_client/remote_service_spec.rb +++ b/spec/lib/gitlab/gitaly_client/remote_service_spec.rb @@ -66,7 +66,7 @@ .with(kind_of(Enumerator), kind_of(Hash)) .and_return(double(:update_remote_mirror_response)) - client.update_remote_mirror(ref_name, only_branches_matching, ssh_key: ssh_key, known_hosts: known_hosts) + client.update_remote_mirror(ref_name, only_branches_matching, ssh_key: ssh_key, known_hosts: known_hosts, keep_divergent_refs: true) end end -- GitLab