diff options
author | James Turnbull <james@lovedthanlost.net> | 2011-06-06 16:19:04 -0700 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2011-06-06 16:19:04 -0700 |
commit | f2214bfe3d1a885b537560cd803e396d9a4a2cb6 (patch) | |
tree | 365da1e6959460bdab4f717e0c863abbdf3e1c83 | |
parent | 1dcf1647a70580e90bc9bd82f424e0b1ca0f6079 (diff) | |
parent | 8e51aebd4cf77c7d68eee70dfa0e16909aa114c5 (diff) |
Merge pull request #3 from ody/bug/master/7797
Makes git tags actually work as a revision option.
-rw-r--r-- | lib/puppet/provider/vcsrepo/git.rb | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/puppet/provider/vcsrepo/git.rb b/lib/puppet/provider/vcsrepo/git.rb index fa7e492..8de1313 100644 --- a/lib/puppet/provider/vcsrepo/git.rb +++ b/lib/puppet/provider/vcsrepo/git.rb @@ -41,15 +41,22 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo) branch = on_branch? if branch == 'master' return get_revision('origin/HEAD') + elsif branch == '(no branch)' + return get_revision('HEAD') else - return get_revision('origin/%s' % branch) + return get_revision('origin/%s' % branch) end end def revision update_references - current = at_path { git('rev-parse', 'HEAD') } - canonical = at_path { git('rev-parse', @resource.value(:revision)) } + current = at_path { git('rev-parse', 'HEAD').chomp } + if tag_revision?(@resource.value(:revision)) + canonical = at_path { git('show', @resource.value(:revision)).scan(/commit (.*)/).to_s } + else + canonical = at_path { git('rev-parse', @resource.value(:revision)).chomp } + end + if current == canonical @resource.value(:revision) else @@ -179,10 +186,10 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo) end def checkout_or_reset(revision = @resource.value(:revision)) - if local_branch_revision? + if local_branch_revision? reset(revision) elsif tag_revision? - at_path { git('checkout', '-b', revision) } + at_path { git('checkout', revision) } elsif remote_branch_revision? at_path { git('checkout', '-b', revision, '--track', "origin/#{revision}") } end @@ -206,7 +213,10 @@ Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo) def remote_branch_revision?(revision = @resource.value(:revision)) # git < 1.6 returns 'origin/#{revision}' # git 1.6+ returns 'remotes/origin/#{revision}' - at_path { branches.grep /(remotes\/)?origin\/#{revision}/ } + branch = at_path { branches.grep /(remotes\/)?origin\/#{revision}/ } + if branch.length > 0 + return branch + end end def local_branch_revision?(revision = @resource.value(:revision)) |