summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source_control/git.py29
1 files changed, 21 insertions, 8 deletions
diff --git a/source_control/git.py b/source_control/git.py
index 46c3ce1c..4b36c358 100644
--- a/source_control/git.py
+++ b/source_control/git.py
@@ -110,7 +110,7 @@ options:
description:
- Create a shallow clone with a history truncated to the specified
number or revisions. The minimum possible value is C(1), otherwise
- ignored.
+ ignored. Needs I(git>=1.8.3) to work correctly.
clone:
required: false
default: "yes"
@@ -174,7 +174,8 @@ options:
be trusted in the GPG trustdb.
requirements:
- - git (the command line tool)
+ - git>=1.7.1 (the command line tool)
+
notes:
- "If the task seems to be hanging, first verify remote host is in C(known_hosts).
SSH will prompt user to authorize the first contact with a remote host. To avoid this prompt,
@@ -526,7 +527,15 @@ def fetch(git_path, module, repo, dest, version, remote, depth, bare, refspec):
elif version == 'HEAD':
refspecs.append('HEAD')
elif is_remote_branch(git_path, module, dest, repo, version):
- refspecs.append(version)
+ currenthead = get_head_branch(git_path, module, dest, remote)
+ if currenthead != version:
+ # this workaroung is only needed for older git versions
+ # 1.8.3 is broken, 1.9.x works
+ # ensure that remote branch is available as both local and remote ref
+ refspecs.append('+refs/heads/%s:refs/heads/%s' % (version, version))
+ refspecs.append('+refs/heads/%s:refs/remotes/%s/%s' % (version, remote, version))
+ else:
+ refspecs.append(version)
elif is_remote_tag(git_path, module, dest, repo, version):
refspecs.append('+refs/tags/'+version+':refs/tags/'+version)
if refspecs:
@@ -632,11 +641,15 @@ def submodule_update(git_path, module, dest, track_submodules):
return (rc, out, err)
def set_remote_branch(git_path, module, dest, remote, version, depth):
- cmd = "%s remote set-branches %s %s" % (git_path, remote, version)
- (rc, out, err) = module.run_command(cmd, cwd=dest)
- if rc != 0:
- module.fail_json(msg="Failed to set remote branch: %s" % version)
- cmd = "%s fetch --depth=%s %s %s" % (git_path, depth, remote, version)
+ """set refs for the remote branch version
+
+ This assumes the branch does not yet exist locally and is therefore also not checked out.
+ Can't use git remote set-branches, as it is not available in git 1.7.1 (centos6)
+ """
+
+ branchref = "+refs/heads/%s:refs/heads/%s" % (version, version)
+ branchref += ' +refs/heads/%s:refs/remotes/%s/%s' % (version, remote, version)
+ cmd = "%s fetch --depth=%s %s %s" % (git_path, depth, remote, branchref)
(rc, out, err) = module.run_command(cmd, cwd=dest)
if rc != 0:
module.fail_json(msg="Failed to fetch branch from remote: %s" % version)