(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'test cloning a repository with detached HEAD' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: head_is_detached body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(git)} {(--git-dir) (Id.Lit_Equals '=') ($ Id.VSub_Number '$1') (/.git)} {(rev-parse)} {(--verify)} {(HEAD)} ) (C {(test_must_fail)} {(git)} {(--git-dir) (Id.Lit_Equals '=') ($ Id.VSub_Number '$1') (/.git)} {(symbolic-ref)} {(HEAD)} ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:56))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:60) (Token id:Id.Lit_Chars val:'\techo one >file &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tgit commit -m one &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\techo two >file &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tgit commit -a -m two &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit tag two &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\techo three >file &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit commit -a -m three\n' span_id:68) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone repo (detached HEAD points to branch)' span_id:75))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tgit clone "file://$PWD" detached-branch\n' span_id:81) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD matches' span_id:87))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) (Token id:Id.Lit_Chars val:'\techo three >expect &&\n' span_id:92) (Token id: Id.Lit_Chars val: '\tgit --git-dir=detached-branch/.git log -1 --format=%s >actual &&\n' span_id: 93 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:94) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD is detached' span_id:100))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:104) (Token id:Id.Lit_Chars val:'\thead_is_detached detached-branch\n' span_id:105) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone repo (detached HEAD points to tag)' span_id:112))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:116) (Token id:Id.Lit_Chars val:'\tgit checkout two^0 &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\tgit clone "file://$PWD" detached-tag\n' span_id:118) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD matches' span_id:124))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:128) (Token id:Id.Lit_Chars val:'\techo two >expect &&\n' span_id:129) (Token id: Id.Lit_Chars val: '\tgit --git-dir=detached-tag/.git log -1 --format=%s >actual &&\n' span_id: 130 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:131) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD is detached' span_id:137))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:141) (Token id:Id.Lit_Chars val:'\thead_is_detached detached-tag\n' span_id:142) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone repo (detached HEAD points to history)' span_id:149))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id:Id.Lit_Chars val:'\tgit checkout two^ &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit clone "file://$PWD" detached-history\n' span_id:155) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD matches' span_id:161))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:165) (Token id:Id.Lit_Chars val:'\techo one >expect &&\n' span_id:166) (Token id: Id.Lit_Chars val: '\tgit --git-dir=detached-history/.git log -1 --format=%s >actual &&\n' span_id: 167 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:168) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD is detached' span_id:174))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:178) (Token id:Id.Lit_Chars val:'\thead_is_detached detached-history\n' span_id:179) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone repo (orphan detached HEAD)' span_id:186))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\techo four >file &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit commit -a -m four &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tgit clone "file://$PWD" detached-orphan\n' span_id:194) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD matches' span_id:200))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:204) (Token id:Id.Lit_Chars val:'\techo four >expect &&\n' span_id:205) (Token id: Id.Lit_Chars val: '\tgit --git-dir=detached-orphan/.git log -1 --format=%s >actual &&\n' span_id: 206 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:207) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cloned HEAD is detached' span_id:213))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) (Token id:Id.Lit_Chars val:'\thead_is_detached detached-orphan\n' span_id:218) ) } ) (C {(test_done)}) ] )