summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/provider/vcsrepo/git.rb13
-rw-r--r--spec/unit/puppet/provider/vcsrepo/git_spec.rb23
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