- name: SETUP | clean out the remote_tmp_dir
  file:
    path: "{{ remote_tmp_dir }}"
    state: absent

- name: SETUP | create clean remote_tmp_dir
  file:
    path: "{{ remote_tmp_dir }}"
    state: directory

- name: SETUP | install git
  package:
    name: '{{ item }}'
  when: ansible_distribution not in ["MacOSX", "Alpine"]
  notify:
    - cleanup
  with_items: "{{ git_required_packages[ansible_os_family | default('default') ] | default(git_required_packages.default) }}"

- name: SETUP | verify that git is installed so this test can continue
  shell: which git

- name: SETUP | get git version, only newer than {{git_version_supporting_depth}} has fixed git depth
  shell: git --version | grep 'git version' | sed 's/git version //'
  register: git_version

- name: SETUP | get gpg version
  shell: gpg --version 2>1 | head -1 | sed -e 's/gpg (GnuPG) //'
  register: gpg_version

- name: SETUP | set git global user.email if not already set
  shell: git config --global user.email 'noreply@example.com'

- name: SETUP | set git global user.name if not already set
  shell: git config --global user.name  'Ansible Test Runner'

- name: SETUP | set git global init.defaultBranch
  shell: >-
    git config --global init.defaultBranch '{{ git_default_branch }}'

- name: SETUP | set git global init.templateDir
  # NOTE: This custom Git repository template emulates the `init.defaultBranch`
  # NOTE: setting on Git versions below 2.28.
  # NOTE: Ref: https://superuser.com/a/1559582.
  # NOTE: Other workarounds mentioned there, like invoking
  # NOTE: `git symbolic-ref HEAD refs/heads/main` after each `git init` turned
  # NOTE: out to have mysterious side effects that break the tests in surprising
  # NOTE: ways.
  shell: |
    set -eEu

    git config --global \
      init.templateDir '{{ remote_tmp_dir }}/git-templates/git.git'

    mkdir -pv '{{ remote_tmp_dir }}/git-templates'
    set +e
    GIT_TEMPLATES_DIR=$(\
      2>/dev/null \
        ls -1d \
          '/Library/Developer/CommandLineTools/usr/share/git-core/templates' \
          '/usr/local/share/git-core/templates' \
          '/usr/share/git-core/templates' \
    )
    set -e
    >&2 echo "Found Git's default templates directory: ${GIT_TEMPLATES_DIR}"
    cp -r "${GIT_TEMPLATES_DIR}" '{{ remote_tmp_dir }}/git-templates/git.git'

    echo 'ref: refs/heads/{{ git_default_branch }}' \
      > '{{ remote_tmp_dir }}/git-templates/git.git/HEAD'

- name: SETUP | create repo_dir
  file:
    path: "{{ repo_dir }}"
    state: directory

- name: SETUP | show git version
  debug:
    msg: "Running test with git {{ git_version.stdout }}"
