#!/bin/sh global test_description := ''Test reflog interaction with detached HEAD'' source ./test-lib.sh proc 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 (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"Test reflog interaction with detached HEAD">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: reset_state body: (BraceGroup children: [ (AndOr children: [ (C {(git)} {(checkout)} {(master)}) (C {(cp)} {(saved_reflog)} {(.git/logs/HEAD)}) ] op_id: Op_DAmp ) ] spids: [19] ) spids: [14 18] ) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit commit --allow-empty -m initial &&\n"> <"\tgit branch side &&\n"> <"\ttest_tick &&\n"> <"\tgit commit --allow-empty -m second &&\n"> <"\tcat .git/logs/HEAD >saved_reflog\n"> ) } ) (C {(test_expect_success)} {(baseline)} { (SQ <"\n"> <"\treset_state &&\n"> <"\tgit rev-parse master master^ >expect &&\n"> <"\tgit log -g --format=%H >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"switch to branch">)} { (SQ <"\n"> <"\treset_state &&\n"> <"\tgit rev-parse side master master^ >expect &&\n"> <"\tgit checkout side &&\n"> <"\tgit log -g --format=%H >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"detach to other">)} { (SQ <"\n"> <"\treset_state &&\n"> <"\tgit rev-parse master side master master^ >expect &&\n"> <"\tgit checkout side &&\n"> <"\tgit checkout master^0 &&\n"> <"\tgit log -g --format=%H >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"detach to self">)} { (SQ <"\n"> <"\treset_state &&\n"> <"\tgit rev-parse master master master^ >expect &&\n"> <"\tgit checkout master^0 &&\n"> <"\tgit log -g --format=%H >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"attach to self">)} { (SQ <"\n"> <"\treset_state &&\n"> <"\tgit rev-parse master master master master^ >expect &&\n"> <"\tgit checkout master^0 &&\n"> <"\tgit checkout master &&\n"> <"\tgit log -g --format=%H >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"attach to other">)} { (SQ <"\n"> <"\treset_state &&\n"> <"\tgit rev-parse side master master master^ >expect &&\n"> <"\tgit checkout master^0 &&\n"> <"\tgit checkout side &&\n"> <"\tgit log -g --format=%H >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_done)}) ] )