summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Williams <bruce@codefluency.com>2010-03-12 18:34:03 -0800
committerBruce Williams <bruce@codefluency.com>2010-03-12 18:34:03 -0800
commitabd973080207906c32831ff315b9f7a6d2bcb872 (patch)
tree5466269802704e6565806499ab720e6d0b5f3b74
parent350972d6be26cacdcb18875055f9723574312966 (diff)
Tests for Git revision property, cleanup
-rw-r--r--lib/puppet/provider/vcsrepo/git.rb18
-rw-r--r--lib/puppet/provider/vcsrepo/svn.rb4
-rw-r--r--spec/unit/puppet/provider/vcsrepo/git_spec.rb63
3 files changed, 72 insertions, 13 deletions
diff --git a/lib/puppet/provider/vcsrepo/git.rb b/lib/puppet/provider/vcsrepo/git.rb
index 7290387..670d8de 100644
--- a/lib/puppet/provider/vcsrepo/git.rb
+++ b/lib/puppet/provider/vcsrepo/git.rb
@@ -21,12 +21,8 @@ Puppet::Type.type(:vcsrepo).provide(:git) do
end
def revision
- current = Dir.chdir(@resource.value(:path)) do
- git('rev-parse', 'HEAD')
- end
- canonical = Dir.chdir(@resource.value(:path)) do
- git('rev-parse', @resource.value(:revision))
- end
+ current = at_path { git('rev-parse', 'HEAD') }
+ canonical = at_path { git('rev-parse', @resource.value(:revision)) }
if current == canonical
@resource.value(:revision)
else
@@ -64,8 +60,14 @@ Puppet::Type.type(:vcsrepo).provide(:git) do
end
end
- def at_path(&block)
- Dir.chdir(@resource.value(:path), &block)
+ # Note: We don't rely on Dir.chdir's behavior of automatically returning the
+ # value of the last statement -- for easier stubbing.
+ def at_path(&block) #:nodoc:
+ value = nil
+ Dir.chdir(@resource.value(:path)) do
+ value = yield
+ end
+ value
end
end
diff --git a/lib/puppet/provider/vcsrepo/svn.rb b/lib/puppet/provider/vcsrepo/svn.rb
index fef7b62..0e38769 100644
--- a/lib/puppet/provider/vcsrepo/svn.rb
+++ b/lib/puppet/provider/vcsrepo/svn.rb
@@ -60,7 +60,9 @@ Puppet::Type.type(:vcsrepo).provide(:svn) do
end
end
- def at_path(&block)
+ # Note: We don't rely on Dir.chdir's behavior of automatically returning the
+ # value of the last statement -- for easier stubbing.
+ def at_path(&block) #:nodoc:
value = nil
Dir.chdir(@resource.value(:path)) do
value = yield
diff --git a/spec/unit/puppet/provider/vcsrepo/git_spec.rb b/spec/unit/puppet/provider/vcsrepo/git_spec.rb
index d859004..a5ed753 100644
--- a/spec/unit/puppet/provider/vcsrepo/git_spec.rb
+++ b/spec/unit/puppet/provider/vcsrepo/git_spec.rb
@@ -10,7 +10,7 @@ describe provider_class do
@path = '/tmp/vcsrepo'
end
- context 'when creating' do
+ describe 'when creating' do
context "when a source is given" do
context "and when a revision is given" do
it "should execute 'git clone' and 'git reset'" do
@@ -44,7 +44,7 @@ describe provider_class do
end
end
- context 'when destroying' do
+ describe 'when destroying' do
it "it should remove the directory" do
@resource.expects(:value).with(:path).returns(@path).at_least_once
FileUtils.expects(:rm_rf).with(@path)
@@ -52,7 +52,7 @@ describe provider_class do
end
end
- context "when checking existence" do
+ describe "when checking existence" do
it "should check for the directory" do
@resource.expects(:value).with(:path).returns(@path)
File.expects(:directory?).with(@path)
@@ -60,6 +60,61 @@ describe provider_class do
end
end
- context "when checking 'revision' property"
+ describe "when checking the revision property" do
+ context "when given a non-SHA ref as the resource revision" do
+ context "when its SHA is not different than the curent SHA" do
+ it "should return the ref" do
+ @resource.expects(:value).with(:path).returns(@path).at_least_once
+ @provider.expects(:git).with('rev-parse', 'HEAD').returns('currentsha')
+ @resource.expects(:value).with(:revision).returns('a-tag').at_least_once
+ @provider.expects(:git).with('rev-parse', 'a-tag').returns('currentsha')
+ Dir.expects(:chdir).with(@path).twice.yields
+ @provider.revision.should == 'a-tag'
+ end
+ end
+ context "when its SHA is different than the current SHA" do
+ it "should return the current SHA" do
+ @resource.expects(:value).with(:path).returns(@path).at_least_once
+ @provider.expects(:git).with('rev-parse', 'HEAD').returns('currentsha')
+ @resource.expects(:value).with(:revision).returns('a-tag').at_least_once
+ @provider.expects(:git).with('rev-parse', 'a-tag').returns('othersha')
+ Dir.expects(:chdir).with(@path).twice.yields
+ @provider.revision.should == 'currentsha'
+ end
+ end
+ end
+ context "when given a SHA ref as the resource revision" do
+ context "when it is the same as the current SHA" do
+ it "should return it" do
+ @resource.expects(:value).with(:path).returns(@path).at_least_once
+ @provider.expects(:git).with('rev-parse', 'HEAD').returns('currentsha')
+ @resource.expects(:value).with(:revision).returns('currentsha').at_least_once
+ @provider.expects(:git).with('rev-parse', 'currentsha').returns('currentsha')
+ Dir.expects(:chdir).with(@path).twice.yields
+ @provider.revision.should == 'currentsha'
+ end
+ end
+ context "when it is not the same as the current SHA" do
+ it "should return the current SHA" do
+ @resource.expects(:value).with(:path).returns(@path).at_least_once
+ @provider.expects(:git).with('rev-parse', 'HEAD').returns('currentsha')
+ @resource.expects(:value).with(:revision).returns('othersha').at_least_once
+ @provider.expects(:git).with('rev-parse', 'othersha').returns('othersha')
+ Dir.expects(:chdir).with(@path).twice.yields
+ @provider.revision.should == 'currentsha'
+ end
+ end
+ end
+ end
+
+ describe "when setting the revision property" do
+ it "should use 'git fetch' and 'git reset'" do
+ @resource.expects(:value).with(:path).returns(@path).at_least_once
+ @provider.expects('git').with('fetch', 'origin')
+ Dir.expects(:chdir).with(@path).at_least_once.yields
+ @provider.expects('git').with('reset', '--hard', 'carcar')
+ @provider.revision = 'carcar'
+ end
+ end
end