- name: Install etckeeper
  become: true
  ansible.builtin.package:
    name: etckeeper
    state: present

- name: etckeeper init
  become: true
  ansible.builtin.command: etckeeper init
  args:
    creates: /etc/.git/config

- name: Configure /etc repository
  become: true
  community.general.git_config:
    scope: local
    repo: /etc
    name: '{{ item.name }}'
    value: '{{ item.value }}'
  loop:
    - name: user.name
      value: '{{ etckeeper_git_name }}'
    - name: user.email
      value: '{{ etckeeper_git_email }}'

- name: Initial commit
  become: true
  ansible.builtin.command: etckeeper commit 'initial commit'
  args:
    creates: /etc/.git/index

- name: Configure etckeeper
  become: true
  community.general.ini_file:
    path: /etc/etckeeper/etckeeper.conf
    # I'm pretty sure this file is sourced by a shell, so this is required:
    no_extra_spaces: true
    owner: root
    group: root
    mode: '644'
    section: null
    option: '{{ item.name }}'
    value: '{{ item.value }}'
  loop:
    - name: AVOID_DAILY_AUTOCOMMITS
      value: '1'
    - name: AVOID_COMMIT_BEFORE_INSTALL
      value: '1'
  notify: etckeeper_commit_conf

- name: Configure repository remote
  when: etckeeper_remote_url is defined
  become: true
  block:
    - name: git remote add
      ansible.builtin.command:
        argv:
          - git
          - remote
          - add
          - '{{ etckeeper_remote_name }}'
          - '{{ etckeeper_remote_url }}'
        chdir: /etc
        creates: '/etc/.git/refs/remotes/{{ etckeeper_remote_name }}/'

    - name: Configure pushes for etckeeper
      community.general.ini_file:
        path: /etc/etckeeper/etckeeper.conf
        no_extra_spaces: true
        owner: root
        group: root
        mode: '644'
        section: null
        option: PUSH_REMOTE
        value: '{{ etckeeper_remote_name }}'
      notify: etckeeper_commit_conf

- name: Commit etckeeper.conf if necessary
  ansible.builtin.meta: flush_handlers

- name: Configure ignored paths
  ansible.builtin.include_tasks: ignore.yml
  loop: '{{ etckeeper_ignored_paths + etckeeper_extra_ignored_paths }}'
  loop_control:
    loop_var: ignore_path

- name: Commit .gitignore if necessary
  ansible.builtin.meta: flush_handlers