Add submodules feature to git provider
authordduvnjak <dario.duvnjak@gmail.com>
Sun, 18 Jan 2015 09:49:03 +0000 (10:49 +0100)
committerdduvnjak <dario.duvnjak@gmail.com>
Sun, 18 Jan 2015 09:49:03 +0000 (10:49 +0100)
README.markdown
lib/puppet/provider/vcsrepo/git.rb
lib/puppet/type/vcsrepo.rb

index 08b8865..062f0f7 100644 (file)
@@ -141,6 +141,15 @@ To keep the repository at the latest revision (**WARNING:** this will always ove
       revision => 'master',
     }
 
+To clone the repository but skip initialiazing submodules,
+
+    vcsrepo { "/path/to/repo":
+      ensure     => latest,
+      provider   => git,
+      source     => 'git://example.com/repo.git',
+      submodules => false,
+    }
+
 #####Sources that use SSH
 
 When your source uses SSH, such as 'username@server:…', you can manage your SSH keys with Puppet using the [require](http://docs.puppetlabs.com/references/stable/metaparameter.html#require) metaparameter in `vcsrepo` to ensure they are present.
@@ -479,6 +488,7 @@ The vcsrepo module is slightly unusual in that it is simply a type and providers
 * `ssh_identity` - The provider supports a configurable SSH identity file. (Available with `git` and `hg`.)
 * `user` - The provider can run as a different user. (Available with `git`, `hg` and `cvs`.)
 * `p4config` - The provider support setting the P4CONFIG environment. (Available with `p4`.)
+* `submodules` - The provider supports repository submodules which can be optionally initialized. (Available with `git`.)
 
 ####Parameters
 
@@ -507,9 +517,9 @@ The vcsrepo module is slightly unusual in that it is simply a type and providers
 ####Features and Parameters by Provider
 
 #####`git`
-**Features**: `bare_repositories`, `depth`, `multiple_remotes`, `reference_tracking`, `ssh_identity`, `user`
+**Features**: `bare_repositories`, `depth`, `multiple_remotes`, `reference_tracking`, `ssh_identity`, `user`, `submodules`
 
-**Parameters**: `depth`, `ensure`, `excludes`, `force`, `group`, `identity`, `owner`, `path`, `provider`, `remote`, `revision`, `source`, `user`
+**Parameters**: `depth`, `ensure`, `excludes`, `force`, `group`, `identity`, `owner`, `path`, `provider`, `remote`, `revision`, `source`, `user`, `submodules`
 
 #####`bzr`
 **Features**: `reference_tracking`
index 1c6588c..9e1903c 100644 (file)
@@ -5,7 +5,7 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
 
   commands :git => 'git'
 
-  has_features :bare_repositories, :reference_tracking, :ssh_identity, :multiple_remotes, :user, :depth
+  has_features :bare_repositories, :reference_tracking, :ssh_identity, :multiple_remotes, :user, :depth, :submodules
 
   def create
     if @resource.value(:revision) and @resource.value(:ensure) == :bare
@@ -18,7 +18,7 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo)
       if @resource.value(:revision)
         checkout
       end
-      if @resource.value(:ensure) != :bare
+      if @resource.value(:ensure) != :bare && @resource.value(:submodules) == :true
         update_submodules
       end
     end
index f678389..3f34c57 100644 (file)
@@ -43,6 +43,9 @@ Puppet::Type.newtype(:vcsrepo) do
   feature :p4config,
           "The provider understands Perforce Configuration"
 
+  feature :submodules,
+          "The repository contains submodules which can be optionally initialized"
+
   ensurable do
     attr_accessor :latest
 
@@ -215,6 +218,12 @@ Puppet::Type.newtype(:vcsrepo) do
     desc "The Perforce P4CONFIG environment."
   end
 
+  newparam :submodules, :required_features => [:submodules] do
+    desc "Initialize and update each submodule in the repository."
+    newvalues(:true, :false)
+    defaultto true
+  end
+
   autorequire(:package) do
     ['git', 'git-core']
   end