2
0
Fork 0
mirror of https://github.com/inspec/inspec synced 2025-02-22 08:58:44 +00:00

Issue fix related to bitbucket default branch fetching in url fetcher

Signed-off-by: Nikita Mathur <nikita.mathur@chef.io>
This commit is contained in:
Nikita Mathur 2021-08-31 13:12:20 +05:30
parent 44cd84312f
commit ca1991451f
2 changed files with 21 additions and 4 deletions
lib/inspec/fetcher
test/unit/fetchers

View file

@ -74,15 +74,17 @@ module Inspec::Fetcher
BITBUCKET_URL_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)(\.git)?(/)?$}.freeze
BITBUCKET_URL_BRANCH_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/branch/(?<branch>[\w\.]+)(/)?$}.freeze
BITBUCKET_URL_COMMIT_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/commits/(?<commit>[\w\.]+)(/)?$}.freeze
GITHUB_URL = "https://github.com".freeze
BITBUCKET_URL = "https://bitbucket.org".freeze
def self.transform(target)
transformed_target = if m = GITHUB_URL_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
default_branch = default_ref(m)
default_branch = default_ref(m, GITHUB_URL)
"https://github.com/#{m[:user]}/#{m[:repo]}/archive/#{default_branch}.tar.gz"
elsif m = GITHUB_URL_WITH_TREE_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
"https://github.com/#{m[:user]}/#{m[:repo]}/archive/#{m[:commit]}.tar.gz"
elsif m = BITBUCKET_URL_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
default_branch = default_ref(m)
default_branch = default_ref(m, BITBUCKET_URL)
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/#{default_branch}.tar.gz"
elsif m = BITBUCKET_URL_BRANCH_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/#{m[:branch]}.tar.gz"
@ -129,8 +131,8 @@ module Inspec::Fetcher
private
class << self
def default_ref(match_data)
remote_url = "https://github.com/#{match_data[:user]}/#{match_data[:repo]}.git"
def default_ref(match_data, repo_url)
remote_url = "#{repo_url}/#{match_data[:user]}/#{match_data[:repo]}.git"
command_string = "git remote show #{remote_url}"
cmd = shellout(command_string)
unless cmd.exitstatus == 0

View file

@ -18,6 +18,20 @@ describe Inspec::Fetcher::Url do
m
end
let(:git_remote_head_main) do
out = mock
out.stubs(:stdout).returns("HEAD branch: main\n")
out.stubs(:exitstatus).returns(0)
out.stubs(:stderr).returns("")
out.stubs(:error!).returns(false)
out.stubs(:run_command).returns(true)
out
end
def expect_git_remote_head_main(remote_url)
Mixlib::ShellOut.expects(:new).returns(git_remote_head_main)
end
def expect_url_transform
@mock_logger = Minitest::Mock.new
@mock_logger.expect(:warn, nil, [/URL target.*transformed/])
@ -116,6 +130,7 @@ describe Inspec::Fetcher::Url do
http://www.bitbucket.org/chef/inspec.git}.each do |bitbucket|
it "resolves a bitbucket url #{bitbucket}" do
expect_url_transform do
expect_git_remote_head_main(bitbucket)
res = Inspec::Fetcher::Url.resolve(bitbucket)
res.expects(:open).returns(mock_open)
_(res).wont_be_nil