--- # # Submodule tests # # Repository A with submodules defined (repo_submodules) # .gitmodules file points to Repository I # Repository B forked from A that has newer commits (repo_submodules_newer) # .gitmodules file points to Repository II instead of I # .gitmodules file also points to Repository III # Repository I for submodule1 (repo_submodule1) # Has 1 file checked in # Repository II forked from I that has newer commits (repo_submodule1_newer) # Has 2 files checked in # Repository III for a second submodule (repo_submodule2) # Has 1 file checked in - name: clear checkout_dir file: state=absent path={{ checkout_dir }} - name: Test that clone without recursive does not retrieve submodules git: repo: '{{ repo_submodules }}' dest: '{{ checkout_dir }}' recursive: no - command: 'ls -1a {{ checkout_dir }}/submodule1' register: submodule1 - assert: that: '{{ submodule1.stdout_lines|length }} == 2' - name: clear checkout_dir file: state=absent path={{ checkout_dir }} - name: Test that clone with recursive retrieves submodules git: repo: '{{ repo_submodules }}' dest: '{{ checkout_dir }}' recursive: yes - command: 'ls -1a {{ checkout_dir }}/submodule1' register: submodule1 - assert: that: '{{ submodule1.stdout_lines|length }} == 4' - name: Copy the checkout so we can run several different tests on it command: 'cp -pr {{ checkout_dir }} {{ checkout_dir }}.bak' - name: Test that update without recursive does not change submodules command: 'git config --replace-all remote.origin.url {{ repo_submodules_newer }}' args: chdir: '{{ checkout_dir }}' - git: repo: '{{ repo_submodules_newer }}' dest: '{{ checkout_dir }}' recursive: no update: yes track_submodules: yes - command: 'ls -1a {{ checkout_dir }}/submodule1' register: submodule1 - stat: path: '{{ checkout_dir }}/submodule2' register: submodule2 - command: 'ls -1a {{ checkout_dir }}/submodule2' register: submodule2 - assert: that: '{{ submodule1.stdout_lines|length }} == 4' - assert: that: '{{ submodule2.stdout_lines|length }} == 2' - name: Restore checkout to prior state file: state=absent path={{ checkout_dir }} - command: 'cp -pr {{ checkout_dir }}.bak {{ checkout_dir }}' - name: Test that update with recursive updated existing submodules command: 'git config --replace-all remote.origin.url {{ repo_submodules_newer }}' args: chdir: '{{ checkout_dir }}' - git: repo: '{{ repo_submodules_newer }}' dest: '{{ checkout_dir }}' update: yes recursive: yes track_submodules: yes - command: 'ls -1a {{ checkout_dir }}/submodule1' register: submodule1 - assert: that: '{{ submodule1.stdout_lines|length }} == 5' - name: Test that update with recursive found new submodules command: 'ls -1a {{ checkout_dir }}/submodule2' register: submodule2 - assert: that: '{{ submodule2.stdout_lines|length }} == 4'