(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:'git reset in a bare repository' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup non-bare' span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\techo one >file &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m one &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\techo two >file &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m two\n' span_id:26)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"hard" reset requires a worktree' span_id:33))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\t(cd .git &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\t test_must_fail git reset --hard)\n' span_id:39)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"merge" reset requires a worktree' span_id:46))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\t(cd .git &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\t test_must_fail git reset --merge)\n' span_id:52)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"keep" reset requires a worktree' span_id:59))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\t(cd .git &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\t test_must_fail git reset --keep)\n' span_id:65)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"mixed" reset is ok' span_id:72))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\t(cd .git && git reset)\n' span_id:77)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"soft" reset is ok' span_id:84))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\t(cd .git && git reset --soft)\n' span_id:89)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'hard reset works with GIT_WORK_TREE' span_id:96))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\tmkdir worktree &&\n' span_id:101) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_WORK_TREE=$PWD/worktree GIT_DIR=$PWD/.git git reset --hard &&\n'
            span_id: 102
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp file worktree/file\n' span_id:103)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup bare' span_id:110))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\tgit clone --bare . bare.git &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\tcd bare.git\n' span_id:116)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"hard" reset is not allowed in bare' span_id:123))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git reset --hard HEAD^\n'
            span_id: 128
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"merge" reset is not allowed in bare' span_id:135))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:139) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git reset --merge HEAD^\n'
            span_id: 140
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"keep" reset is not allowed in bare' span_id:147))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git reset --keep HEAD^\n'
            span_id: 152
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"mixed" reset is not allowed in bare' span_id:159))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:163) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git reset --mixed HEAD^\n'
            span_id: 164
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"soft" reset is allowed in bare' span_id:171))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\tgit reset --soft HEAD^ &&\n' span_id:176) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git show --pretty=format:%s | head -n 1)" = "one"\n'
            span_id: 177
          )
        )
      }
    )
    (C {(test_done)})
  ]
)