Adopt Git style URI
This commit is contained in:
parent
75984534f8
commit
bc2739a52f
3 changed files with 67 additions and 1 deletions
|
@ -1,3 +1,4 @@
|
|||
require 'cgi'
|
||||
require 'uri'
|
||||
|
||||
module QA
|
||||
|
@ -5,6 +6,19 @@ module QA
|
|||
class Repository
|
||||
include Scenario::Actable
|
||||
|
||||
# See: config/initializers/1_settings.rb
|
||||
# Settings#build_gitlab_shell_ssh_path_prefix
|
||||
def self.parse_uri(git_uri)
|
||||
if git_uri.start_with?('ssh://')
|
||||
URI.parse(git_uri)
|
||||
else
|
||||
*rest, path = git_uri.split(':')
|
||||
# Host cannot have : so we'll need to escape it
|
||||
user_host = rest.join('%3A').sub(/\A\[(.+)\]\z/, '\1')
|
||||
URI.parse("ssh://#{user_host}/#{path}")
|
||||
end
|
||||
end
|
||||
|
||||
def self.perform(*args)
|
||||
Dir.mktmpdir do |dir|
|
||||
Dir.chdir(dir) { super }
|
||||
|
|
|
@ -45,7 +45,7 @@ module QA
|
|||
repository_location
|
||||
end
|
||||
|
||||
repository_uri = URI.parse(repository_url)
|
||||
repository_uri = Git::Repository.parse_uri(repository_url)
|
||||
|
||||
gitlab_ci =
|
||||
<<~YAML
|
||||
|
|
52
qa/spec/git/repository_spec.rb
Normal file
52
qa/spec/git/repository_spec.rb
Normal file
|
@ -0,0 +1,52 @@
|
|||
describe QA::Git::Repository do
|
||||
describe '.parse_uri' do
|
||||
context 'when URI starts with ssh://' do
|
||||
context 'when URI has port' do
|
||||
it 'parses correctly' do
|
||||
uri = described_class
|
||||
.parse_uri('ssh://git@qa.test:2222/sandbox/qa/repo.git')
|
||||
|
||||
expect(uri.user).to eq('git')
|
||||
expect(uri.host).to eq('qa.test')
|
||||
expect(uri.port).to eq(2222)
|
||||
expect(uri.path).to eq('/sandbox/qa/repo.git')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when URI does not have port' do
|
||||
it 'parses correctly' do
|
||||
uri = described_class
|
||||
.parse_uri('ssh://git@qa.test/sandbox/qa/repo.git')
|
||||
|
||||
expect(uri.user).to eq('git')
|
||||
expect(uri.host).to eq('qa.test')
|
||||
expect(uri.path).to eq('/sandbox/qa/repo.git')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when URI does not start with ssh://' do
|
||||
context 'when host does not have colons' do
|
||||
it 'parses correctly' do
|
||||
uri = described_class
|
||||
.parse_uri('git@qa.test:sandbox/qa/repo.git')
|
||||
|
||||
expect(uri.user).to eq('git')
|
||||
expect(uri.host).to eq('qa.test')
|
||||
expect(uri.path).to eq('/sandbox/qa/repo.git')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when host has a colon' do
|
||||
it 'parses correctly' do
|
||||
uri = described_class
|
||||
.parse_uri('[git@qa:test]:sandbox/qa/repo.git')
|
||||
|
||||
expect(uri.user).to eq('git')
|
||||
expect(uri.host).to eq('qa%3Atest')
|
||||
expect(uri.path).to eq('/sandbox/qa/repo.git')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue