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

- name: CHANGE-REPO-URL | clear checkout_dir
  file:
    state: absent
    path: "{{ checkout_dir }}"

- name: CHANGE-REPO-URL | Clone example git repo
  git:
    repo: "{{ repo_update_url_1 }}"
    dest: "{{ checkout_dir }}"

- name: CHANGE-REPO-URL | 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: CHANGE-REPO-URL | 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: CHANGE-REPO-URL | check for new content in git-test-new
  stat: path={{ checkout_dir }}/newfilename
  register: repo_content

- name: CHANGE-REPO-URL | 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: CHANGE-REPO-URL | clear checkout_dir
  file:
    state: absent
    path: "{{ checkout_dir }}"

- name: CHANGE-REPO-URL | clone repo
  git:
    repo: "{{ repo_update_url_1 }}"
    dest: "{{ checkout_dir }}"

- name: CHANGE-REPO-URL | clone repo with same url to same destination
  git:
    repo: "{{ repo_update_url_1 }}"
    dest: "{{ checkout_dir }}"
  register: checkout_same_url

- name: CHANGE-REPO-URL | check repo not changed
  assert:
    that:
      - not checkout_same_url|changed


- name: CHANGE-REPO-URL | clone repo with new url to same destination
  git:
    repo: "{{ repo_update_url_2 }}"
    dest: "{{ checkout_dir }}"
  register: checkout_new_url

- name: CHANGE-REPO-URL | check repo changed
  assert:
    that:
      - checkout_new_url|changed


- name: CHANGE-REPO-URL | 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: CHANGE-REPO-URL | 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: CHANGE-REPO-URL | 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: CHANGE-REPO-URL | 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: CHANGE-REPO-URL | clear checkout_dir
  file:
    state: absent
    path: "{{ checkout_dir }}"

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

- name: CHANGE-REPO-URL | Clone the repo again - this is what we test
  git:
    repo: "{{ checkout_dir }}/repo"
    dest: "{{ checkout_dir }}/checkout"

- name: CHANGE-REPO-URL | Add a branch to the repo
  command: git branch new-branch
  args:
    chdir: "{{ checkout_dir }}/repo"

- name: CHANGE-REPO-URL | Checkout the new branch in the checkout
  git:
    repo: "{{ checkout_dir}}/repo"
    version: 'new-branch'
    dest: "{{ checkout_dir }}/checkout"
