Commit 5687bd24 authored by Stan Hu's avatar Stan Hu

Fix SSH support for Git for Windows v2.14

Git For Windows 2.14 has a patch that changes `git-upload-pack` to `git upload-pack`.
To make this work for gitlab-shell, just map this to `git-upload-pack`.

Closes gitlab-org/gitlab-ce#36028
parent 20896b64
v5.8.0
- Fix SSH support for Git for Windows v2.14
v5.7.0
- Support unhiding of all refs via Gitaly
......
......@@ -38,7 +38,7 @@ class GitlabShell
end
args = Shellwords.shellwords(origin_cmd)
parse_cmd(args)
args = parse_cmd(args)
if GIT_COMMANDS.include?(args.first)
GitlabMetrics.measure('verify-access') { verify_access }
......@@ -70,10 +70,17 @@ class GitlabShell
protected
def parse_cmd(args)
@command = args.first
# Handle Git for Windows 2.14 using "git upload-pack" instead of git-upload-pack
if args.length == 3 && args.first == 'git'
@command = "git-#{args[1]}"
args = [@command, args.last]
else
@command = args.first
end
@git_access = @command
return if API_COMMANDS.include?(@command)
return args if API_COMMANDS.include?(@command)
raise DisallowedCommandError unless GIT_COMMANDS.include?(@command)
......@@ -93,6 +100,8 @@ class GitlabShell
raise DisallowedCommandError unless args.count == 2
@repo_name = args.last
end
args
end
def verify_access
......
......@@ -132,8 +132,8 @@ describe GitlabShell do
describe :exec do
let(:gitaly_message) { JSON.dump({ 'repository' => { 'relative_path' => repo_name, 'storage_name' => 'default' }, 'gl_repository' => gl_repository , 'gl_id' => key_id}) }
context 'git-upload-pack' do
let(:ssh_cmd) { "git-upload-pack gitlab-ci.git" }
shared_examples_for 'upload-pack' do |command|
let(:ssh_cmd) { "#{command} gitlab-ci.git" }
after { subject.exec(ssh_cmd) }
it "should process the command" do
......@@ -157,6 +157,14 @@ describe GitlabShell do
end
end
context 'git-upload-pack' do
it_behaves_like 'upload-pack', 'git-upload-pack'
end
context 'git upload-pack' do
it_behaves_like 'upload-pack', 'git upload-pack'
end
context 'gitaly-upload-pack with GeoNode' do
let(:ssh_cmd) { "git-upload-pack gitlab-ci.git" }
let(:gitaly_check_access_with_geo) { GitAccessStatus.new(true, 'ok', gl_repository, repo_path, { 'repository' => { 'relative_path' => repo_name, 'storage_name' => 'default'} , 'address' => 'unix:gitaly.socket' }, true) }
......
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