From c7cb1b28cd03ce8a4a685ea9ca6fc76804b601dd Mon Sep 17 00:00:00 2001 From: Robin Roth Date: Tue, 19 Apr 2016 13:16:52 +0200 Subject: [PATCH] fall back to full clone if version is hash if version is not a branch or tag (i.e. a hash), we need a full checkout to be able to switch to it --- lib/ansible/modules/source_control/git.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/ansible/modules/source_control/git.py b/lib/ansible/modules/source_control/git.py index 1df1fc1aa0c..46c3ce1c1b5 100644 --- a/lib/ansible/modules/source_control/git.py +++ b/lib/ansible/modules/source_control/git.py @@ -321,14 +321,18 @@ def clone(git_path, module, repo, dest, remote, depth, version, bare, except: pass cmd = [ git_path, 'clone' ] + + branch_or_tag = is_remote_branch(git_path, module, dest, repo, version) \ + or is_remote_tag(git_path, module, dest, repo, version) + if bare: cmd.append('--bare') else: cmd.extend([ '--origin', remote ]) - if is_remote_branch(git_path, module, dest, repo, version) \ - or is_remote_tag(git_path, module, dest, repo, version): + if branch_or_tag: cmd.extend([ '--branch', version ]) - if depth: + if depth and (branch_or_tag or version == 'HEAD' or refspec): + # only use depth if the remote opject is branch or tag (i.e. fetchable) cmd.extend([ '--depth', str(depth) ]) if reference: cmd.extend([ '--reference', str(reference) ]) @@ -532,8 +536,9 @@ def fetch(git_path, module, repo, dest, version, remote, depth, bare, refspec): fetch_cmd.extend(['--depth', str(depth)]) fetch_cmd.extend([remote]) - if not depth: + if not depth or not refspecs: # don't try to be minimalistic but do a full clone + # also do this if depth is given, but version is something that can't be fetched directly if bare: refspecs = ['+refs/heads/*:refs/heads/*', '+refs/tags/*:refs/tags/*'] else: