summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkzwin <kz@example.org>2017-09-02 10:53:57 -0400
committerkzwin <kz@example.org>2017-09-02 10:54:39 -0400
commit0595c4c975e247ec968f256368e471a516b8a4b0 (patch)
treea7567618931d9b4c8405a38f1aabbf0efb6c2bcb
parent47f662739b95ef06925bce5a8cc3a6059905b549 (diff)
downloadchef-0595c4c975e247ec968f256368e471a516b8a4b0.tar.gz
implement feedback from review
Signed-off-by: kzwin <kz@example.org>
-rw-r--r--lib/chef/provider/git.rb10
-rw-r--r--spec/unit/provider/git_spec.rb23
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