| #!/bin/sh | 
 |  | 
 | test_description='Test reflog interaction with detached HEAD' | 
 | . ./test-lib.sh | 
 |  | 
 | reset_state () { | 
 | 	git checkout master && | 
 | 	cp saved_reflog .git/logs/HEAD | 
 | } | 
 |  | 
 | test_expect_success setup ' | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m initial && | 
 | 	git branch side && | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m second && | 
 | 	cat .git/logs/HEAD >saved_reflog | 
 | ' | 
 |  | 
 | test_expect_success baseline ' | 
 | 	reset_state && | 
 | 	git rev-parse master master^ >expect && | 
 | 	git log -g --format=%H >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'switch to branch' ' | 
 | 	reset_state && | 
 | 	git rev-parse side master master^ >expect && | 
 | 	git checkout side && | 
 | 	git log -g --format=%H >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'detach to other' ' | 
 | 	reset_state && | 
 | 	git rev-parse master side master master^ >expect && | 
 | 	git checkout side && | 
 | 	git checkout master^0 && | 
 | 	git log -g --format=%H >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'detach to self' ' | 
 | 	reset_state && | 
 | 	git rev-parse master master master^ >expect && | 
 | 	git checkout master^0 && | 
 | 	git log -g --format=%H >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'attach to self' ' | 
 | 	reset_state && | 
 | 	git rev-parse master master master master^ >expect && | 
 | 	git checkout master^0 && | 
 | 	git checkout master && | 
 | 	git log -g --format=%H >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'attach to other' ' | 
 | 	reset_state && | 
 | 	git rev-parse side master master master^ >expect && | 
 | 	git checkout master^0 && | 
 | 	git checkout side && | 
 | 	git log -g --format=%H >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_done |