fix git provider checkout of a remote ref on an existing repo
authorJoshua Hoblitt <jhoblitt@cpan.org>
Tue, 16 Jul 2013 23:25:09 +0000 (16:25 -0700)
committerJoshua Hoblitt <jhoblitt@vm2.sdm.noao.edu>
Wed, 17 Jul 2013 20:39:29 +0000 (13:39 -0700)
commit8a58caef1fe6b2c301f321cd0d52e42cc58f5f6b
tree0dab4f77007f54dad1f29bc659bbeaafa4e4dde8
parent827cfaa7715c03589cbfda0fc7fe79239859b216
fix git provider checkout of a remote ref on an existing repo

Per discussion of https://github.com/puppetlabs/puppetlabs-vcsrepo/issues/51 in
the git channel on freenode, EugeneKay <eugene@kashpureff.org> stated that `git
rev-parse` is not capable of inspecting remote refs but that `git ls-remote`
is.  This patch makes a second attempt to resolve the ref with `ls-remote` if
`rev-parse` fails.

The git provider also appears to support several type features that are not
tagged under `has_features`.  It's not clear if this is the best way to resolve
this issue or if the provider should be refactored to work with different type
features.

Demonstration of the problem with changing refs (branches and tags)

    $ git --version
    git version 1.7.1
    $ cat master.pp branch.pp
      vcsrepo { '/tmp/vcsrepo':
        ensure    => present,
        provider  => git,
        source    => 'https://github.com/puppetlabs/puppetlabs-vcsrepo.git',
        revision  => 'master',
      }
      vcsrepo { '/tmp/vcsrepo':
        ensure    => present,
        provider  => git,
        source    => 'https://github.com/puppetlabs/puppetlabs-vcsrepo.git',
        revision  => 'feature/cvs',
      }
    $ puppet apply --modulepath=`pwd`/.. master.pp
    Notice: /Stage[main]//Vcsrepo[/tmp/vcsrepo]/ensure: Creating repository from present
    Notice: /Stage[main]//Vcsrepo[/tmp/vcsrepo]/ensure: created
    Notice: Finished catalog run in 2.19 seconds
    $ puppet apply --modulepath=`pwd`/.. branch.pp
    Error: /Stage[main]//Vcsrepo[/tmp/vcsrepo]: Could not evaluate: Execution of '/usr/bin/git rev-parse feature/cvs' returned 128: fatal: ambiguous argument 'feature/cvs': unknown revision or path not in the working tree.
    Use '--' to separate paths from revisions
    feature/cvs

    Notice: Finished catalog run in 1.69 seconds
lib/puppet/provider/vcsrepo/git.rb
spec/unit/puppet/provider/vcsrepo/git_spec.rb