diff options
author | kzwin <kz@example.org> | 2017-09-02 10:53:57 -0400 |
---|---|---|
committer | kzwin <kz@example.org> | 2017-09-02 10:54:39 -0400 |
commit | 0595c4c975e247ec968f256368e471a516b8a4b0 (patch) | |
tree | a7567618931d9b4c8405a38f1aabbf0efb6c2bcb | |
parent | 47f662739b95ef06925bce5a8cc3a6059905b549 (diff) | |
download | chef-0595c4c975e247ec968f256368e471a516b8a4b0.tar.gz |
implement feedback from review
Signed-off-by: kzwin <kz@example.org>
-rw-r--r-- | lib/chef/provider/git.rb | 10 | ||||
-rw-r--r-- | spec/unit/provider/git_spec.rb | 23 |
2 files changed, 29 insertions, 4 deletions
diff --git a/lib/chef/provider/git.rb b/lib/chef/provider/git.rb index 29714ecf43..5b16e98427 100644 --- a/lib/chef/provider/git.rb +++ b/lib/chef/provider/git.rb @@ -105,11 +105,15 @@ class Chef end end + def git_has_single_branch_option? + @git_has_single_branch_option ||= !git_gem_version.nil? && git_gem_version >= Gem::Version.new("1.7.10") + end + def git_gem_version + defined?(@git_gem_version) and return @git_gem_version output = git("--version").stdout match = GIT_VERSION_PATTERN.match(output) - raise ArgumentError, "unparsable git version number #{output}" unless match - @git_gem_version ||= Gem::Version.new(match[1]) + @git_gem_version ||= match ? Gem::Version.new(match[1]) : nil end def existing_git_clone? @@ -147,7 +151,7 @@ class Chef clone_cmd = ["clone"] clone_cmd << "-o #{remote}" unless remote == "origin" clone_cmd << "--depth #{new_resource.depth}" if new_resource.depth - clone_cmd << "--no-single-branch" if new_resource.depth && git_gem_version >= Gem::Version.new("1.7.10") + clone_cmd << "--no-single-branch" if new_resource.depth && git_has_single_branch_option? clone_cmd << "\"#{new_resource.repository}\"" clone_cmd << "\"#{cwd}\"" diff --git a/spec/unit/provider/git_spec.rb b/spec/unit/provider/git_spec.rb index 1b52b05a91..cacee0baaa 100644 --- a/spec/unit/provider/git_spec.rb +++ b/spec/unit/provider/git_spec.rb @@ -109,7 +109,28 @@ describe Chef::Provider::Git do expect(@provider).to receive(:shell_out!) .with("git --version", log_tag: "git[web2.0 app]") .and_return(double("ShellOut result", stdout: "git version home-grown-git-99")) - expect { @provider.git_gem_version }.to raise_error(ArgumentError, /unparsable git version/) + expect(@provider.git_gem_version).to be_nil + end + + it "determines single branch option when it fails to parse git version" do + expect(@provider).to receive(:shell_out!) + .with("git --version", log_tag: "git[web2.0 app]") + .and_return(double("ShellOut result", stdout: "git version home-grown-git-99")) + expect(@provider.git_has_single_branch_option?).to be false + end + + it "determines single branch option as true when it parses git version and version is large" do + expect(@provider).to receive(:shell_out!) + .with("git --version", log_tag: "git[web2.0 app]") + .and_return(double("ShellOut result", stdout: "git version 1.8.0")) + expect(@provider.git_has_single_branch_option?).to be true + end + + it "determines single branch option as false when it parses git version and version is small" do + expect(@provider).to receive(:shell_out!) + .with("git --version", log_tag: "git[web2.0 app]") + .and_return(double("ShellOut result", stdout: "git version 1.7.4")) + expect(@provider.git_has_single_branch_option?).to be false end it "is compatible with git in travis" do |