summaryrefslogtreecommitdiff
path: root/lib/puppet/type/vcsrepo.rb
diff options
context:
space:
mode:
authorBruce Williams <bruce@codefluency.com>2010-03-15 11:16:22 -0700
committerBruce Williams <bruce@codefluency.com>2010-03-15 11:16:22 -0700
commit4b8e7074e62900ed796cc05bb67a7561f40f899a (patch)
tree2e0e801b21605ca74d18317adff0930088101597 /lib/puppet/type/vcsrepo.rb
parent52e078444a12d47530a4299d0e9d60b86066c76e (diff)
ensure = latest to support reference tracking.\n\nWorking with tags, more work needed for branches (at least with git)
Diffstat (limited to 'lib/puppet/type/vcsrepo.rb')
-rw-r--r--lib/puppet/type/vcsrepo.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/puppet/type/vcsrepo.rb b/lib/puppet/type/vcsrepo.rb
index 69c7f74..137f8cd 100644
--- a/lib/puppet/type/vcsrepo.rb
+++ b/lib/puppet/type/vcsrepo.rb
@@ -14,6 +14,10 @@ Puppet::Type.newtype(:vcsrepo) do
feature :filesystem_types,
"The provider supports different filesystem types"
+ feature :reference_tracking,
+ "The provider supports tracking revision references that can change
+ over time (eg, some VCS tags and branch names)"
+
ensurable do
newvalue :present do
@@ -28,6 +32,19 @@ Puppet::Type.newtype(:vcsrepo) do
provider.destroy
end
+ newvalue :latest, :required_features => [:reference_tracking] do
+ if provider.exists?
+ if provider.respond_to?(:update_references)
+ provider.update_references
+ end
+ reference = resource.value(:revision) || provider.revision
+ notice "Updating to latest '#{reference}' revision"
+ provider.revision = reference
+ else
+ provider.create
+ end
+ end
+
def retrieve
prov = @resource.provider
if prov