Skip to content
Snippets Groups Projects
Commit 571f1dda authored by Jacob Vosmaer (GitLab)'s avatar Jacob Vosmaer (GitLab) Committed by Sean McGivern
Browse files

Add FetchSourceBranch Gitaly call

parent 6369db01
No related branches found
No related tags found
No related merge requests found
0.54.0
0.55.0
Loading
Loading
@@ -1058,12 +1058,11 @@ module Gitlab
end
 
def fetch_source_branch!(source_repository, source_branch, local_ref)
with_repo_branch_commit(source_repository, source_branch) do |commit|
if commit
write_ref(local_ref, commit.sha)
true
Gitlab::GitalyClient.migrate(:fetch_source_branch) do |is_enabled|
if is_enabled
gitaly_repository_client.fetch_source_branch(source_repository, source_branch, local_ref)
else
false
rugged_fetch_source_branch(source_repository, source_branch, local_ref)
end
end
end
Loading
Loading
@@ -1216,6 +1215,17 @@ module Gitlab
 
private
 
def rugged_fetch_source_branch(source_repository, source_branch, local_ref)
with_repo_branch_commit(source_repository, source_branch) do |commit|
if commit
write_ref(local_ref, commit.sha)
true
else
false
end
end
end
# Gitaly note: JV: Trying to get rid of the 'filter' option so we can implement this with 'git'.
def branches_filter(filter: nil, sort_by: nil)
# n+1: https://gitlab.com/gitlab-org/gitlab-ce/issues/37464
Loading
Loading
Loading
Loading
@@ -75,6 +75,10 @@ module Gitlab
address
end
 
def self.address_metadata(storage)
Base64.strict_encode64(JSON.dump({ storage => { 'address' => address(storage), 'token' => token(storage) } }))
end
# All Gitaly RPC call sites should use GitalyClient.call. This method
# makes sure that per-request authentication headers are set.
#
Loading
Loading
@@ -89,18 +93,19 @@ module Gitlab
# kwargs.merge(deadline: Time.now + 10)
# end
#
def self.call(storage, service, rpc, request)
def self.call(storage, service, rpc, request, remote_storage: nil)
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
enforce_gitaly_request_limits(:call)
 
kwargs = request_kwargs(storage)
kwargs = request_kwargs(storage, remote_storage: remote_storage)
kwargs = yield(kwargs) if block_given?
stub(service, storage).__send__(rpc, request, kwargs) # rubocop:disable GitlabSecurity/PublicSend
ensure
self.query_time += Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
end
 
def self.request_kwargs(storage)
def self.request_kwargs(storage, remote_storage: nil)
encoded_token = Base64.strict_encode64(token(storage).to_s)
metadata = {
'authorization' => "Bearer #{encoded_token}",
Loading
Loading
@@ -110,6 +115,7 @@ module Gitlab
feature_stack = Thread.current[:gitaly_feature_stack]
feature = feature_stack && feature_stack[0]
metadata['call_site'] = feature.to_s if feature
metadata['gitaly-servers'] = address_metadata(remote_storage) if remote_storage
 
{ metadata: metadata }
end
Loading
Loading
Loading
Loading
@@ -65,6 +65,25 @@ module Gitlab
 
response.value
end
def fetch_source_branch(source_repository, source_branch, local_ref)
request = Gitaly::FetchSourceBranchRequest.new(
repository: @gitaly_repo,
source_repository: source_repository.gitaly_repository,
source_branch: source_branch.b,
target_ref: local_ref.b
)
response = GitalyClient.call(
@storage,
:repository_service,
:fetch_source_branch,
request,
remote_storage: source_repository.storage
)
response.result
end
end
end
end
Loading
Loading
@@ -78,6 +78,8 @@ namespace :gitlab do
config[:auth] = { token: 'secret' } if Rails.env.test?
config[:'gitaly-ruby'] = { dir: File.join(Dir.pwd, 'ruby') } if gitaly_ruby
config[:'gitlab-shell'] = { dir: Gitlab.config.gitlab_shell.path }
config[:bin_dir] = Gitlab.config.gitaly.client_path
TOML.dump(config)
end
 
Loading
Loading
Loading
Loading
@@ -628,7 +628,7 @@ describe API::MergeRequests do
 
context 'forked projects' do
let!(:user2) { create(:user) }
let!(:forked_project) { fork_project(project, user2) }
let!(:forked_project) { fork_project(project, user2, repository: true) }
let!(:unrelated_project) { create(:project, namespace: create(:user).namespace, creator_id: user2.id) }
 
before do
Loading
Loading
Loading
Loading
@@ -314,7 +314,7 @@ describe API::MergeRequests do
 
context 'forked projects' do
let!(:user2) { create(:user) }
let!(:forked_project) { fork_project(project, user2) }
let!(:forked_project) { fork_project(project, user2, repository: true) }
let!(:unrelated_project) { create(:project, namespace: create(:user).namespace, creator_id: user2.id) }
 
before do
Loading
Loading
Loading
Loading
@@ -112,6 +112,7 @@ describe 'gitlab:gitaly namespace rake task' do
expected_output = <<~TOML
# Gitaly storage configuration generated from #{Gitlab.config.source} on #{Time.current.to_s(:long)}
# This is in TOML format suitable for use in Gitaly's config.toml file.
bin_dir = "tmp/tests/gitaly"
socket_path = "/path/to/my.socket"
[gitlab-shell]
dir = "#{Gitlab.config.gitlab_shell.path}"
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment