summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2017-08-06 21:46:38 -0700
committerStan Hu <stanhu@gmail.com>2017-08-06 21:51:42 -0700
commit5687bd24844b5a244b4888ae0f9e26c13aea720e (patch)
tree77f4ad2fe556b762845870d14de3c262f56cdb5c
parent20896b6477be40d826b3aa391ff55698974cca61 (diff)
downloadgitlab-shell-sh-fix-git-upload-pack.tar.gz
Fix SSH support for Git for Windows v2.14sh-fix-git-upload-pack
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
-rw-r--r--CHANGELOG3
-rw-r--r--lib/gitlab_shell.rb15
-rw-r--r--spec/gitlab_shell_spec.rb12
3 files changed, 25 insertions, 5 deletions
diff --git a/CHANGELOG b/CHANGELOG
index aba2035..96e9346 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+v5.8.0
+ - Fix SSH support for Git for Windows v2.14
+
v5.7.0
- Support unhiding of all refs via Gitaly
diff --git a/lib/gitlab_shell.rb b/lib/gitlab_shell.rb
index fbbc0da..243c629 100644
--- a/lib/gitlab_shell.rb
+++ b/lib/gitlab_shell.rb
@@ -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
diff --git a/spec/gitlab_shell_spec.rb b/spec/gitlab_shell_spec.rb
index 6f4f363..8b72cdd 100644
--- a/spec/gitlab_shell_spec.rb
+++ b/spec/gitlab_shell_spec.rb
@@ -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) }