Merge pull request #224 from puppet-by-examples/single-branch
authorTP Honey <tphoney@users.noreply.github.com>
Tue, 21 Apr 2015 09:01:39 +0000 (10:01 +0100)
committerTP Honey <tphoney@users.noreply.github.com>
Tue, 21 Apr 2015 09:01:39 +0000 (10:01 +0100)
Shallow clone with one commit that corresponds to arbitrary tag from arbitrary branch

1  2 
lib/puppet/provider/vcsrepo/git.rb
lib/puppet/type/vcsrepo.rb

@@@ -5,7 -5,7 +5,7 @@@ Puppet::Type.type(:vcsrepo).provide(:gi
  
    commands :git => 'git'
  
-   has_features :bare_repositories, :reference_tracking, :ssh_identity, :multiple_remotes, :user, :depth, :submodules
+   has_features :bare_repositories, :reference_tracking, :ssh_identity, :multiple_remotes, :user, :depth, :branch, :submodules
  
    def create
      if @resource.value(:revision) and @resource.value(:ensure) == :bare
      # we loop around the hash. Otherwise, we assume single url specified
      # in source property
      if @resource.value(:source).is_a?(Hash)
 -      @resource.value(:source).each do |remote_name, remote_url|
 +      @resource.value(:source).keys.sort.each do |remote_name|
 +        remote_url = @resource.value(:source)[remote_name]
          at_path { do_update |= update_remote_url(remote_name, remote_url) }
        end
      else
      if @resource.value(:depth) and @resource.value(:depth).to_i > 0
        args.push('--depth', @resource.value(:depth).to_s)
      end
+     if @resource.value(:branch)
+       args.push('--branch', @resource.value(:branch).to_s)
+     end
      if @resource.value(:ensure) == :bare
        args << '--bare'
      end
@@@ -40,15 -40,15 +40,18 @@@ Puppet::Type.newtype(:vcsrepo) d
    feature :depth,
            "The provider can do shallow clones"
  
+   feature :branch,
+           "The name of the branch"
    feature :p4config,
            "The provider understands Perforce Configuration"
  
    feature :submodules,
            "The repository contains submodules which can be optionally initialized"
  
 +  feature :conflict,
 +          "The provider supports automatic conflict resolution"
 +
    ensurable do
      attr_accessor :latest
  
      desc "The value to be used to do a shallow clone."
    end
  
+   newparam :branch, :required_features => [:branch] do
+     desc "The name of the branch to clone."
+   end
    newparam :p4config, :required_features => [:p4config] do
      desc "The Perforce P4CONFIG environment."
    end
      defaultto true
    end
  
 +  newparam :conflict do
 +    desc "The action to take if conflicts exist between repository and working copy"
 +  end
 +
    autorequire(:package) do
      ['git', 'git-core']
    end