Add submodule support to git provider

This commit is contained in:
Bruce Williams 2010-03-18 10:54:38 -07:00
parent 3439ff1939
commit dc64158c8c
2 changed files with 28 additions and 8 deletions

View 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

View 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