---

# test change of repo url
# see https://github.com/ansible/ansible-modules-core/pull/721

- name: clear checkout_dir
  file: state=absent path={{ checkout_dir }}

- name: Clone example git repo
  git:
    repo: '{{ repo_update_url_1 }}'
    dest: '{{ checkout_dir }}'

- name: Clone repo with changed url to the same place
  git:
    repo: '{{ repo_update_url_2 }}'
    dest: '{{ checkout_dir }}'
  register: clone2

- assert:
    that: "clone2|success"

- name: check url updated
  shell: git remote show origin | grep Fetch
  register: remote_url
  args:
    chdir: '{{ checkout_dir }}'
  environment:
    LC_ALL: C

- assert:
    that: 
    - "'git-test-new' in remote_url.stdout"
    - "'git-test-old' not in remote_url.stdout"

- name: check for new content in git-test-new
  stat: path={{ checkout_dir }}/newfilename
  register: repo_content

- name: assert presence of new file in repo (i.e. working copy updated)
  assert:
    that: "repo_content.stat.exists"

# Make sure 'changed' result is accurate in check mode.
# See https://github.com/ansible/ansible-modules-core/pull/4243

- name: clear checkout_dir
  file: state=absent path={{ checkout_dir }}

- name: clone repo
  git: repo={{ repo_update_url_1 }} dest={{ checkout_dir }}

- name: clone repo with same url to same destination
  git: repo={{ repo_update_url_1 }} dest={{ checkout_dir }}
  register: checkout_same_url

- name: check repo not changed
  assert:
    that:
      - not checkout_same_url|changed


- name: clone repo with new url to same destination
  git: repo={{ repo_update_url_2 }} dest={{ checkout_dir }}
  register: checkout_new_url

- name: check repo changed
  assert:
    that:
      - checkout_new_url|changed


- name: clone repo with new url in check mode
  git: repo={{ repo_update_url_1 }} dest={{ checkout_dir }}
  register: checkout_new_url_check_mode
  check_mode: True

- name: check repo reported changed in check mode
  assert:
    that:
      - checkout_new_url_check_mode|changed
  when: git_version.stdout | version_compare("{{git_version_supporting_ls_remote}}", '>=')

- name: clone repo with new url after check mode
  git: repo={{ repo_update_url_1 }} dest={{ checkout_dir }}
  register: checkout_new_url_after_check_mode

- name: check repo still changed after check mode
  assert:
    that:
      - checkout_new_url_after_check_mode|changed


# Test that checkout by branch works when the branch is not in our current repo but the sha is

- name: clear checkout_dir
  file: state=absent path={{ checkout_dir }}

- name: "Clone example git repo that we're going to modify"
  git:
    repo: '{{ repo_update_url_1 }}'
    dest: '{{ checkout_dir }}/repo'

- name: Clone the repo again - this is what we test
  git:
    repo: '{{ checkout_dir }}/repo'
    dest: '{{ checkout_dir }}/checkout'

- name: Add a branch to the repo
  command: git branch new-branch
  args:
    chdir: '{{ checkout_dir }}/repo'

- name: Checkout the new branch in the checkout
  git:
    repo: '{{ checkout_dir}}/repo'
    version: 'new-branch'
    dest: '{{ checkout_dir }}/checkout'