update git provider to handle checking out into an existing (empty) dir
authorJohn Iacona <jiacona@genarts.com>
Wed, 28 Aug 2013 18:32:05 +0000 (14:32 -0400)
committerJohn Iacona <jiacona@genarts.com>
Wed, 28 Aug 2013 18:32:05 +0000 (14:32 -0400)
lib/puppet/provider/vcsrepo.rb
lib/puppet/provider/vcsrepo/git.rb
spec/unit/puppet/provider/vcsrepo/git_spec.rb

index 2c026ba..05b92f8 100644 (file)
@@ -17,6 +17,11 @@ class Puppet::Provider::Vcsrepo < Puppet::Provider
     File.directory?(@resource.value(:path))
   end
 
+  def path_empty?
+    # Path is empty if the only entries are '.' and '..'
+    Dir.entries(@resource.value(:path)).size == 2
+  end
+
   # 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:
index 58330f6..47e84d2 100644 (file)
@@ -147,7 +147,7 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
   end
 
   def check_force
-    if path_exists?
+    if path_exists? and not path_empty?
       if @resource.value(:force)
         notice "Removing %s to replace with vcsrepo." % @resource.value(:path)
         destroy
index 68b6c0a..1a6d008 100644 (file)
@@ -74,9 +74,10 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
           end
         end
 
-        context "when the path is not a repository" do
+        context "when the path is not empty and not a repository" do
           it "should raise an exception" do
             provider.expects(:path_exists?).returns(true)
+            provider.expects(:path_empty?).returns(false)
             proc { provider.create }.should raise_error(Puppet::Error)
           end
         end
@@ -102,9 +103,10 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
           end
         end
 
-        context "when the path is not a repository" do
+        context "when the path is not empty and not a repository" do
           it "should raise an exception" do
             expects_directory?(true)
+            provider.expects(:path_empty?).returns(false)
             proc { provider.create }.should raise_error(Puppet::Error)
           end
         end