Add submodule support to git provider
authorBruce Williams <bruce@codefluency.com>
Thu, 18 Mar 2010 17:54:38 +0000 (10:54 -0700)
committerBruce Williams <bruce@codefluency.com>
Thu, 18 Mar 2010 17:54:38 +0000 (10:54 -0700)
lib/puppet/provider/vcsrepo/git.rb
spec/unit/puppet/provider/vcsrepo/git_spec.rb

index df85ff0..e511a10 100644 (file)
@@ -19,6 +19,9 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
           reset(@resource.value(:revision))
         end
       end
+      if @resource.value(:ensure) != :bare
+        update_submodules
+      end
     end
   end
 
@@ -39,6 +42,9 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
   def revision=(desired)
     fetch
     reset(desired)
+    unless @resource.value(:ensure) == :bare
+      update_submodules
+    end
   end
 
   def bare_exists?
@@ -150,4 +156,11 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
     end
   end
 
+  def update_submodules
+    at_path do
+      git('submodule', 'init')
+      git('submodule', 'update')
+    end
+  end
+
 end
index 073be13..f7864c0 100644 (file)
@@ -10,13 +10,18 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
             provider.expects('git').with('clone', resource.value(:source), resource.value(:path))
             expects_chdir
             provider.expects('git').with('reset', '--hard', resource.value(:revision))
+            provider.expects(:git).with('submodule', 'init')
+            provider.expects(:git).with('submodule', 'update')
             provider.create
           end
         end
         
         resource_without :revision do
-          it "should just execute 'git clone'" do
+          it "should execute 'git clone' and submodule commands" do
             provider.expects(:git).with('clone', resource.value(:source), resource.value(:path))
+            expects_chdir
+            provider.expects(:git).with('submodule', 'init')
+            provider.expects(:git).with('submodule', 'update')
             provider.create
           end
         end
@@ -25,15 +30,15 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
       resource_with :ensure => :bare do
         resource_with :revision do
           it "should just execute 'git clone --bare'" do
-            subject.expects(:git).with('clone', '--bare', resource.value(:source), resource.value(:path))
-            subject.create
+            provider.expects(:git).with('clone', '--bare', resource.value(:source), resource.value(:path))
+            provider.create
           end
         end
         
         resource_without :revision do
           it "should just execute 'git clone --bare'" do
-            subject.expects(:git).with('clone', '--bare', resource.value(:source), resource.value(:path))
-            subject.create
+            provider.expects(:git).with('clone', '--bare', resource.value(:source), resource.value(:path))
+            provider.create
           end
         end
       end
@@ -134,8 +139,10 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
   context "setting the revision property" do
     it "should use 'git fetch' and 'git reset'" do
       expects_chdir
-      provider.expects('git').with('fetch', 'origin')
-      provider.expects('git').with('reset', '--hard', 'carcar')
+      provider.expects(:git).with('fetch', 'origin')
+      provider.expects(:git).with('reset', '--hard', 'carcar')
+      provider.expects(:git).with('submodule', 'init')
+      provider.expects(:git).with('submodule', 'update')
       provider.revision = 'carcar'
     end
   end
@@ -143,7 +150,7 @@ describe_provider :vcsrepo, :git, :resource => {:path => '/tmp/vcsrepo'} do
   context "updating references" do
     it "should use 'git fetch --tags'" do
       expects_chdir
-      provider.expects('git').with('fetch', '--tags', 'origin')
+      provider.expects(:git).with('fetch', '--tags', 'origin')
       provider.update_references
     end
   end