summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Reyes <freyes@tty.cl>2014-01-02 18:13:40 -0300
committerFelipe Reyes <freyes@tty.cl>2014-01-07 16:03:29 -0300
commit0ea16bba47cf177dc17fa14f20d54d0091a09865 (patch)
treef411e569543eadd3f4695a7aa474b47678f649eb
parente4eb8ab551d41c6d4d96cc3d0c4bc3186d4ed74d (diff)
Add the option to shallow clones with git
The new parameter used to indicate that you want a shallow clone is `:depth`
-rw-r--r--lib/puppet/provider/vcsrepo/git.rb5
-rw-r--r--lib/puppet/type/vcsrepo.rb7
-rw-r--r--spec/unit/puppet/provider/vcsrepo/git_spec.rb14
3 files changed, 25 insertions, 1 deletions
diff --git a/lib/puppet/provider/vcsrepo/git.rb b/lib/puppet/provider/vcsrepo/git.rb
index d488271..af38a59 100644
--- a/lib/puppet/provider/vcsrepo/git.rb
+++ b/lib/puppet/provider/vcsrepo/git.rb
@@ -6,7 +6,7 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
##TODO modify the commands below so that the su - is included
optional_commands :git => 'git',
:su => 'su'
- has_features :bare_repositories, :reference_tracking, :ssh_identity, :multiple_remotes, :user
+ has_features :bare_repositories, :reference_tracking, :ssh_identity, :multiple_remotes, :user, :depth
def create
if !@resource.value(:source)
@@ -131,6 +131,9 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
def clone_repository(source, path)
check_force
args = ['clone']
+ if @resource.value(:depth) and @resource.value(:depth).to_i > 0
+ args.push('--depth', @resource.value(:depth).to_s)
+ end
if @resource.value(:ensure) == :bare
args << '--bare'
end
diff --git a/lib/puppet/type/vcsrepo.rb b/lib/puppet/type/vcsrepo.rb
index ad90ced..1dab2b9 100644
--- a/lib/puppet/type/vcsrepo.rb
+++ b/lib/puppet/type/vcsrepo.rb
@@ -37,6 +37,9 @@ Puppet::Type.newtype(:vcsrepo) do
feature :cvs_rsh,
"The provider understands the CVS_RSH environment variable"
+ feature :depth,
+ "The provider can do shallow clones"
+
ensurable do
attr_accessor :latest
@@ -191,6 +194,10 @@ Puppet::Type.newtype(:vcsrepo) do
desc "The value to be used for the CVS_RSH environment variable."
end
+ newparam :depth, :required_features => [:depth] do
+ desc "The value to be used to do a shallow clone."
+ end
+
autorequire(:package) do
['git', 'git-core']
end
diff --git a/spec/unit/puppet/provider/vcsrepo/git_spec.rb b/spec/unit/puppet/provider/vcsrepo/git_spec.rb
index 554645b..c40388f 100644
--- a/spec/unit/puppet/provider/vcsrepo/git_spec.rb
+++ b/spec/unit/puppet/provider/vcsrepo/git_spec.rb
@@ -31,6 +31,20 @@ describe Puppet::Type.type(:vcsrepo).provider(:git_provider) do
end
end
+ context "with shallow clone enable" do
+ it "should execute 'git clone --depth 1'" do
+ resource[:revision] = 'only/remote'
+ resource[:depth] = 1
+ Dir.expects(:chdir).with('/').at_least_once.yields
+ Dir.expects(:chdir).with('/tmp/test').at_least_once.yields
+ provider.expects(:git).with('clone', '--depth', '1', resource.value(:source), resource.value(:path))
+ provider.expects(:update_submodules)
+ provider.expects(:git).with('branch', '-a').returns(resource.value(:revision))
+ provider.expects(:git).with('checkout', '--force', resource.value(:revision))
+ provider.create
+ end
+ end
+
context "with a revision that is not a remote branch" do
it "should execute 'git clone' and 'git reset --hard'" do
resource[:revision] = 'a-commit-or-tag'