|
|
|
# Test that a specific revision can be checked out
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | clear checkout_dir
|
|
|
|
file:
|
|
|
|
state: absent
|
|
|
|
path: '{{ checkout_dir }}'
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | clone to specific revision
|
|
|
|
git:
|
|
|
|
repo: "{{ repo_dir }}/format1"
|
|
|
|
dest: "{{ checkout_dir }}"
|
|
|
|
version: df4612ba925fbc1b3c51cbb006f51a0443bd2ce9
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | check HEAD after clone to revision
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- 'git_result.stdout == "df4612ba925fbc1b3c51cbb006f51a0443bd2ce9"'
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | update to specific revision
|
|
|
|
git:
|
|
|
|
repo: "{{ repo_dir }}/format1"
|
|
|
|
dest: "{{ checkout_dir }}"
|
|
|
|
version: 4e739a34719654db7b04896966e2354e1256ea5d
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- git_result is changed
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | check HEAD after update to revision
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- 'git_result.stdout == "4e739a34719654db7b04896966e2354e1256ea5d"'
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | update to HEAD from detached HEAD state
|
|
|
|
git:
|
|
|
|
repo: "{{ repo_dir }}/format1"
|
|
|
|
dest: "{{ checkout_dir }}"
|
|
|
|
version: HEAD
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- git_result is changed
|
|
|
|
|
|
|
|
# Test a revision not available under refs/heads/ or refs/tags/
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | attempt to get unavailable revision
|
|
|
|
git:
|
|
|
|
repo: "{{ repo_dir }}/format1"
|
|
|
|
dest: "{{ checkout_dir }}"
|
|
|
|
version: 5473e343e33255f2da0b160f53135c56921d875c
|
|
|
|
ignore_errors: true
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- git_result is failed
|
|
|
|
|
|
|
|
# Same as the previous test, but this time we specify which ref
|
|
|
|
# contains the SHA1
|
|
|
|
- name: SPECIFIC-REVISION | update to revision by specifying the refspec
|
|
|
|
git: &git_ref_spec
|
|
|
|
repo: "{{ repo_dir }}/shallow_branches/.git"
|
|
|
|
dest: '{{ checkout_dir }}'
|
|
|
|
version: "{{ test_branch_ref_head_id }}"
|
|
|
|
refspec: refs/heads/test_branch
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | check HEAD after update with refspec
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- 'git_result.stdout == test_branch_ref_head_id'
|
|
|
|
|
|
|
|
# try out combination of refspec and depth
|
|
|
|
- name: SPECIFIC-REVISION | clear checkout_dir
|
|
|
|
file:
|
|
|
|
state: absent
|
|
|
|
path: "{{ checkout_dir }}"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | update to revision by specifying the refspec with depth=1
|
|
|
|
git:
|
|
|
|
depth: 1
|
|
|
|
<<: *git_ref_spec
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | check HEAD after update with refspec
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- 'git_result.stdout == test_branch_ref_head_id'
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | try to access other commit
|
|
|
|
shell: git checkout 0ce1096
|
|
|
|
register: checkout_shallow
|
|
|
|
failed_when: False
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | "make sure the old commit was not fetched, task is 'forced success'"
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- checkout_shallow.rc != 0
|
|
|
|
- checkout_shallow is successful
|
|
|
|
when: git_version.stdout is version(git_version_supporting_depth, '>=')
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | clear checkout_dir
|
|
|
|
file:
|
|
|
|
state: absent
|
|
|
|
path: "{{ checkout_dir }}"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | clone to revision by specifying the refspec
|
|
|
|
git: *git_ref_spec
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | check HEAD after update with refspec
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
register: git_result
|
|
|
|
|
|
|
|
- assert:
|
|
|
|
that:
|
|
|
|
- 'git_result.stdout == test_branch_ref_head_id'
|
|
|
|
|
|
|
|
# Test that a forced shallow checkout referincing branch only always fetches latest head
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | clear checkout_dir
|
|
|
|
file:
|
|
|
|
state: absent
|
|
|
|
path: "{{ item }}"
|
|
|
|
with_items:
|
|
|
|
- "{{ checkout_dir }}"
|
|
|
|
- "{{ checkout_dir }}.copy"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | create original repo dir
|
|
|
|
file:
|
|
|
|
state: directory
|
|
|
|
path: "{{ checkout_dir }}"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | prepare origina repo
|
|
|
|
shell: |
|
|
|
|
set -eEu
|
|
|
|
|
|
|
|
git init
|
|
|
|
|
|
|
|
echo "1" > a
|
|
|
|
git add a
|
|
|
|
git commit -m "1"
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | clone example repo locally
|
|
|
|
git:
|
|
|
|
repo: "{{ checkout_dir }}"
|
|
|
|
dest: "{{ checkout_dir }}.copy"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | create branch in original
|
|
|
|
command: git checkout -b test/branch
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | get commit for HEAD on new branch
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}.copy"
|
|
|
|
register: originaltip0
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | shallow force checkout new branch in copy
|
|
|
|
git:
|
|
|
|
repo: "{{ checkout_dir }}"
|
|
|
|
dest: "{{ checkout_dir }}.copy"
|
|
|
|
version: test/branch
|
|
|
|
depth: 1
|
|
|
|
force: yes
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | create new commit in original
|
|
|
|
shell: |
|
|
|
|
set -eEu
|
|
|
|
|
|
|
|
git init
|
|
|
|
|
|
|
|
echo "2" > b
|
|
|
|
git add b
|
|
|
|
git commit -m "2"
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | get commit for new HEAD on original branch
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}"
|
|
|
|
register: originaltip1
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | get commit for HEAD on new branch
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}.copy"
|
|
|
|
register: newtip
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | assert that copy is still pointing at previous tip
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- newtip.stdout == originaltip0.stdout
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | create a local modification in the copy
|
|
|
|
shell: echo "3" > c
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}.copy"
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | shallow force checkout new branch in copy (again)
|
|
|
|
git:
|
|
|
|
repo: "{{ checkout_dir }}"
|
|
|
|
dest: "{{ checkout_dir }}.copy"
|
|
|
|
version: test/branch
|
|
|
|
depth: 1
|
|
|
|
force: yes
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | get commit for HEAD on new branch
|
|
|
|
command: git rev-parse HEAD
|
|
|
|
args:
|
|
|
|
chdir: "{{ checkout_dir }}.copy"
|
|
|
|
register: newtip
|
|
|
|
|
|
|
|
- name: SPECIFIC-REVISION | make sure copy tip is not pointing at previous sha and that new tips match
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- newtip.stdout != originaltip0.stdout
|
|
|
|
- newtip.stdout == originaltip1.stdout
|