mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Fix UnboundLocalError remote_head in git (#19057)
* Fix UnboundLocalError remote_head in git Fixes #5505 The use of remote_head was a leftover of #4562. remote_head is not necessary, since the repo is unchanged anyway and after is set correctly. Further changes: * Set changed=True and msg once local_mods are detected and reset. * Remove need_fetch that is always True (due to previous if) to improve clarity * Don't exit early for local_mods but run submodules update and switch_version * Add test for git with local modifications
This commit is contained in:
parent
8a25b2477c
commit
afca957396
2 changed files with 121 additions and 25 deletions
|
@ -888,7 +888,7 @@ def main():
|
||||||
ssh_opts = module.params['ssh_opts']
|
ssh_opts = module.params['ssh_opts']
|
||||||
umask = module.params['umask']
|
umask = module.params['umask']
|
||||||
|
|
||||||
result = dict( warnings=list() )
|
result = dict(changed = False, warnings=list())
|
||||||
|
|
||||||
# evaluate and set the umask before doing anything else
|
# evaluate and set the umask before doing anything else
|
||||||
if umask is not None:
|
if umask is not None:
|
||||||
|
@ -968,7 +968,7 @@ def main():
|
||||||
# this does no checking that the repo is the actual repo
|
# this does no checking that the repo is the actual repo
|
||||||
# requested.
|
# requested.
|
||||||
result['before'] = get_version(module, git_path, dest)
|
result['before'] = get_version(module, git_path, dest)
|
||||||
result.update(changed=False, after=result['before'])
|
result.update(after=result['before'])
|
||||||
module.exit_json(**result)
|
module.exit_json(**result)
|
||||||
else:
|
else:
|
||||||
# else do a pull
|
# else do a pull
|
||||||
|
@ -981,6 +981,7 @@ def main():
|
||||||
# if force and in non-check mode, do a reset
|
# if force and in non-check mode, do a reset
|
||||||
if not module.check_mode:
|
if not module.check_mode:
|
||||||
reset(git_path, module, dest)
|
reset(git_path, module, dest)
|
||||||
|
result.update(changed=True, msg='Local modifications exist.')
|
||||||
|
|
||||||
# exit if already at desired sha version
|
# exit if already at desired sha version
|
||||||
if module.check_mode:
|
if module.check_mode:
|
||||||
|
@ -990,7 +991,6 @@ def main():
|
||||||
remote_url_changed = set_remote_url(git_path, module, repo, dest, remote)
|
remote_url_changed = set_remote_url(git_path, module, repo, dest, remote)
|
||||||
result.update(remote_url_changed=remote_url_changed)
|
result.update(remote_url_changed=remote_url_changed)
|
||||||
|
|
||||||
if need_fetch:
|
|
||||||
if module.check_mode:
|
if module.check_mode:
|
||||||
remote_head = get_remote_head(git_path, module, dest, version, remote, bare)
|
remote_head = get_remote_head(git_path, module, dest, version, remote, bare)
|
||||||
result.update(changed=(result['before'] != remote_head), after=remote_head)
|
result.update(changed=(result['before'] != remote_head), after=remote_head)
|
||||||
|
@ -1005,12 +1005,6 @@ def main():
|
||||||
|
|
||||||
result['after'] = get_version(module, git_path, dest)
|
result['after'] = get_version(module, git_path, dest)
|
||||||
|
|
||||||
if result['before'] == result['after']:
|
|
||||||
if local_mods:
|
|
||||||
result.update(changed=True, after=remote_head, msg='Local modifications exist')
|
|
||||||
# no diff, since the repo didn't change
|
|
||||||
module.exit_json(**result)
|
|
||||||
|
|
||||||
# switch to version specified regardless of whether
|
# switch to version specified regardless of whether
|
||||||
# we got new revisions from the repository
|
# we got new revisions from the repository
|
||||||
if not bare:
|
if not bare:
|
||||||
|
@ -1033,7 +1027,6 @@ def main():
|
||||||
# determine if we changed anything
|
# determine if we changed anything
|
||||||
result['after'] = get_version(module, git_path, dest)
|
result['after'] = get_version(module, git_path, dest)
|
||||||
|
|
||||||
result.update(changed=False)
|
|
||||||
if result['before'] != result['after'] or local_mods or submodules_updated or remote_url_changed:
|
if result['before'] != result['after'] or local_mods or submodules_updated or remote_url_changed:
|
||||||
result.update(changed=True)
|
result.update(changed=True)
|
||||||
if module._diff:
|
if module._diff:
|
||||||
|
|
|
@ -447,7 +447,7 @@
|
||||||
- name: clear checkout_dir
|
- name: clear checkout_dir
|
||||||
file: state=absent path={{ checkout_dir }}
|
file: state=absent path={{ checkout_dir }}
|
||||||
|
|
||||||
- name: Clone example git repo that we're going to modify
|
- name: "Clone example git repo that we're going to modify"
|
||||||
git:
|
git:
|
||||||
repo: '{{ repo_update_url_1 }}'
|
repo: '{{ repo_update_url_1 }}'
|
||||||
dest: '{{ checkout_dir }}/repo'
|
dest: '{{ checkout_dir }}/repo'
|
||||||
|
@ -652,9 +652,6 @@
|
||||||
register: git_fetch
|
register: git_fetch
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: read file
|
|
||||||
shell: cat {{ checkout_dir }}/a
|
|
||||||
|
|
||||||
- name: check update arrived
|
- name: check update arrived
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
|
@ -718,3 +715,109 @@
|
||||||
gpg_version.stdout and
|
gpg_version.stdout and
|
||||||
(git_version.stdout | version_compare("2.1.0", '>=') or
|
(git_version.stdout | version_compare("2.1.0", '>=') or
|
||||||
gpg_version.stdout | version_compare("1.4.16", '>='))
|
gpg_version.stdout | version_compare("1.4.16", '>='))
|
||||||
|
|
||||||
|
- name: clear checkout_dir
|
||||||
|
file: state=absent path={{ checkout_dir }}
|
||||||
|
|
||||||
|
# test for https://github.com/ansible/ansible-modules-core/pull/5505
|
||||||
|
- name: prepare old git repo
|
||||||
|
shell: rm -rf localmods; mkdir localmods; cd localmods; git init; echo "1" > a; git add a; git commit -m "1"
|
||||||
|
args:
|
||||||
|
chdir: "{{repo_dir}}"
|
||||||
|
|
||||||
|
- name: checkout old repo
|
||||||
|
git:
|
||||||
|
repo: '{{ repo_dir }}/localmods'
|
||||||
|
dest: '{{ checkout_dir }}'
|
||||||
|
|
||||||
|
- name: "update repo"
|
||||||
|
shell: echo "2" > a; git commit -a -m "2"
|
||||||
|
args:
|
||||||
|
chdir: "{{repo_dir}}/localmods"
|
||||||
|
|
||||||
|
- name: "add local mods"
|
||||||
|
shell: echo "3" > a
|
||||||
|
args:
|
||||||
|
chdir: "{{ checkout_dir }}"
|
||||||
|
|
||||||
|
- name: fetch with local mods without force (should fail)
|
||||||
|
git:
|
||||||
|
repo: '{{ repo_dir }}/localmods'
|
||||||
|
dest: '{{ checkout_dir }}'
|
||||||
|
register: git_fetch
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: check fetch with localmods failed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- git_fetch|failed
|
||||||
|
|
||||||
|
- name: fetch with local mods with force
|
||||||
|
git:
|
||||||
|
repo: '{{ repo_dir }}/localmods'
|
||||||
|
dest: '{{ checkout_dir }}'
|
||||||
|
force: True
|
||||||
|
register: git_fetch_force
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: check update arrived
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "{{ lookup('file', checkout_dir+'/a' )}} == 2"
|
||||||
|
- git_fetch_force|changed
|
||||||
|
|
||||||
|
- name: clear checkout_dir
|
||||||
|
file: state=absent path={{ checkout_dir }}
|
||||||
|
|
||||||
|
# localmods and shallow clone
|
||||||
|
- name: prepare old git repo
|
||||||
|
shell: rm -rf localmods; mkdir localmods; cd localmods; git init; echo "1" > a; git add a; git commit -m "1"
|
||||||
|
args:
|
||||||
|
chdir: "{{repo_dir}}"
|
||||||
|
|
||||||
|
- name: checkout old repo
|
||||||
|
git:
|
||||||
|
repo: '{{ repo_dir }}/localmods'
|
||||||
|
dest: '{{ checkout_dir }}'
|
||||||
|
depth: 1
|
||||||
|
|
||||||
|
- name: "update repo"
|
||||||
|
shell: echo "2" > a; git commit -a -m "2"
|
||||||
|
args:
|
||||||
|
chdir: "{{repo_dir}}/localmods"
|
||||||
|
|
||||||
|
- name: "add local mods"
|
||||||
|
shell: echo "3" > a
|
||||||
|
args:
|
||||||
|
chdir: "{{ checkout_dir }}"
|
||||||
|
|
||||||
|
- name: fetch with local mods without force (should fail)
|
||||||
|
git:
|
||||||
|
repo: '{{ repo_dir }}/localmods'
|
||||||
|
dest: '{{ checkout_dir }}'
|
||||||
|
depth: 1
|
||||||
|
register: git_fetch
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: check fetch with localmods failed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- git_fetch|failed
|
||||||
|
|
||||||
|
- name: fetch with local mods with force
|
||||||
|
git:
|
||||||
|
repo: '{{ repo_dir }}/localmods'
|
||||||
|
dest: '{{ checkout_dir }}'
|
||||||
|
depth: 1
|
||||||
|
force: True
|
||||||
|
register: git_fetch_force
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: check update arrived
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- "{{ lookup('file', checkout_dir+'/a' )}} == 2"
|
||||||
|
- git_fetch_force|changed
|
||||||
|
|
||||||
|
- name: clear checkout_dir
|
||||||
|
file: state=absent path={{ checkout_dir }}
|
||||||
|
|
Loading…
Reference in a new issue