diff options
-rw-r--r-- | lib/puppet/provider/vcsrepo/git.rb | 13 | ||||
-rw-r--r-- | spec/unit/puppet/provider/vcsrepo/git_spec.rb | 23 |
2 files changed, 28 insertions, 8 deletions
diff --git a/lib/puppet/provider/vcsrepo/git.rb b/lib/puppet/provider/vcsrepo/git.rb index df85ff0..e511a10 100644 --- a/lib/puppet/provider/vcsrepo/git.rb +++ b/lib/puppet/provider/vcsrepo/git.rb @@ -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 diff --git a/spec/unit/puppet/provider/vcsrepo/git_spec.rb b/spec/unit/puppet/provider/vcsrepo/git_spec.rb index 073be13..f7864c0 100644 --- a/spec/unit/puppet/provider/vcsrepo/git_spec.rb +++ b/spec/unit/puppet/provider/vcsrepo/git_spec.rb @@ -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 |