(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 Git when git repository is located at root\n'
                  span_id: 6
                ) (Token id:Id.Lit_Chars val:'\n' span_id:7) 
                (Token
                  id: Id.Lit_Chars
                  val: 'This test requires write access in root. Do not bother if you do not\n'
                  span_id: 8
                ) (Token id:Id.Lit_Chars val:'have a throwaway chroot or VM.\n' span_id:9) 
                (Token id:Id.Lit_Chars val:'\n' span_id:10) 
                (Token
                  id: Id.Lit_Chars
                  val: 'Script t1509/prepare-chroot.sh may help you setup chroot, then you\n'
                  span_id: 11
                ) (Token id:Id.Lit_Chars val:'can chroot in and execute this test from there.\n' span_id:12)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: test_cmp_val
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:34)
                  fd: -1
                  arg_word: {(expected)}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ($ Id.VSub_Number '$2'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:45)
                  fd: -1
                  arg_word: {(result)}
                )
              ]
            )
            (C {(test_cmp)} {(expected)} {(result)})
          ]
        )
    )
    (command.ShFunction
      name: test_vars
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(DQ ($ Id.VSub_Number '$1') (': gitdir'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:74) 
                  (Token id:Id.Lit_Chars val:'\t\ttest_cmp_val "' span_id:75)
                ) (DQ ($ Id.VSub_Number '$2')) 
                (SQ (Token id:Id.Lit_Chars val:'" "$(git rev-parse --git-dir)"\n' span_id:81) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:82)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ($ Id.VSub_Number '$1') (': worktree'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:95) 
                  (Token id:Id.Lit_Chars val:'\t\ttest_cmp_val "' span_id:96)
                ) (DQ ($ Id.VSub_Number '$3')) 
                (SQ (Token id:Id.Lit_Chars val:'" "$(git rev-parse --show-toplevel)"\n' span_id:102) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:103)
                )
              }
            )
            (C {(test_expect_success)} {(DQ ($ Id.VSub_Number '$1') (': prefix'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:116) 
                  (Token id:Id.Lit_Chars val:'\t\ttest_cmp_val "' span_id:117)
                ) (DQ ($ Id.VSub_Number '$4')) 
                (SQ (Token id:Id.Lit_Chars val:'" "$(git rev-parse --show-prefix)"\n' span_id:123) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:124)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_foobar_root
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add relative' span_id:140))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:144) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest -z "$(cd / && git ls-files)" &&\n'
                    span_id: 145
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add foo/foome &&\n' span_id:146) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit add foo/bar/barme &&\n'
                    span_id: 147
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add me &&\n' span_id:148) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t( cd / && git ls-files --stage ) > result &&\n'
                    span_id: 149
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp /ls.expected result &&\n' span_id:150) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm "$(git rev-parse --git-dir)/index"\n'
                    span_id: 151
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:152)
                )
              }
            )
            (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add absolute' span_id:160))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:164) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest -z "$(cd / && git ls-files)" &&\n'
                    span_id: 165
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add /foo/foome &&\n' span_id:166) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit add /foo/bar/barme &&\n'
                    span_id: 167
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add /me &&\n' span_id:168) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t( cd / && git ls-files --stage ) > result &&\n'
                    span_id: 169
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp /ls.expected result &&\n' span_id:170) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm "$(git rev-parse --git-dir)/index"\n'
                    span_id: 171
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:172)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_foobar_foo
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add relative' span_id:189))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:193) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest -z "$(cd / && git ls-files)" &&\n'
                    span_id: 194
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add foome &&\n' span_id:195) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit add bar/barme &&\n'
                    span_id: 196
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add ../me &&\n' span_id:197) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t( cd / && git ls-files --stage ) > result &&\n'
                    span_id: 198
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp /ls.expected result &&\n' span_id:199) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm "$(git rev-parse --git-dir)/index"\n'
                    span_id: 200
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:201)
                )
              }
            )
            (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add absolute' span_id:209))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:213) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest -z "$(cd / && git ls-files)" &&\n'
                    span_id: 214
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add /foo/foome &&\n' span_id:215) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit add /foo/bar/barme &&\n'
                    span_id: 216
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add /me &&\n' span_id:217) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t( cd / && git ls-files --stage ) > result &&\n'
                    span_id: 218
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp /ls.expected result &&\n' span_id:219) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm "$(git rev-parse --git-dir)/index"\n'
                    span_id: 220
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:221)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_foobar_foobar
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add relative' span_id:237))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest -z "$(cd / && git ls-files)" &&\n'
                    span_id: 242
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add ../foome &&\n' span_id:243) 
                  (Token id:Id.Lit_Chars val:'\t\tgit add barme &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\t\tgit add ../../me &&\n' span_id:245) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t( cd / && git ls-files --stage ) > result &&\n'
                    span_id: 246
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp /ls.expected result &&\n' span_id:247) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm "$(git rev-parse --git-dir)/index"\n'
                    span_id: 248
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:249)
                )
              }
            )
            (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add absolute' span_id:257))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:261) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest -z "$(cd / && git ls-files)" &&\n'
                    span_id: 262
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add /foo/foome &&\n' span_id:263) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit add /foo/bar/barme &&\n'
                    span_id: 264
                  ) (Token id:Id.Lit_Chars val:'\t\tgit add /me &&\n' span_id:265) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t( cd / && git ls-files --stage ) > result &&\n'
                    span_id: 266
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp /ls.expected result &&\n' span_id:267) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm "$(git rev-parse --git-dir)/index"\n'
                    span_id: 268
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:269)
                )
              }
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test)} {(-w)} {(/)})] negated:T)]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: 
                    {(DQ ('Test requiring writable / skipped. Read this test if you want to run it'))}
                  spids: [288]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [275 285]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe Id.Op_DPipe]
              children: [
                (C {(test)} {(-e)} {(/refs)})
                (C {(test)} {(-e)} {(/objects)})
                (C {(test)} {(-e)} {(/info)})
                (C {(test)} {(-e)} {(/hooks)})
                (C {(test)} {(-e)} {(/.git)})
                (C {(test)} {(-e)} {(/foo)})
                (C {(test)} {(-e)} {(/me)})
              ]
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(DQ ('Skip test that clobbers existing files in /'))}
                  spids: [359]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [299 356]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$IKNOWWHATIAMDOING'))} 
                  {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (YES))} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:386)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(DQ ('You must set env var IKNOWWHATIAMDOING=YES in order to run this test'))}
                  spids: [391]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [370 388]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test_have_prereq)} {(NOT_ROOT)})] negated:T)]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(DQ ("No you can't run this as root"))}
                  spids: [413]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [402 410]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ONE_SHA1)
          op: assign_op.Equal
          rhs: {(d00491fd7e5bb6fa28c517a0bb32b8b506539d4d)}
          spids: [424]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:431))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:435) 
          (Token id:Id.Lit_Chars val:'\trm -rf /foo &&\n' span_id:436) (Token id:Id.Lit_Chars val:'\tmkdir /foo &&\n' span_id:437) 
          (Token id:Id.Lit_Chars val:'\tmkdir /foo/bar &&\n' span_id:438) (Token id:Id.Lit_Chars val:'\techo 1 > /foo/foome &&\n' span_id:439) 
          (Token id:Id.Lit_Chars val:'\techo 1 > /foo/bar/barme &&\n' span_id:440) (Token id:Id.Lit_Chars val:'\techo 1 > /me\n' span_id:441)
        )
      }
    )
    (C {(say)} {(DQ ('GIT_DIR absolute, GIT_WORK_TREE set'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /' span_id:455))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /' span_id:459))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:465)
          fd: -1
          arg_word: {(ls.expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:468)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 481
          stdin_parts: [
            ('100644 ')
            ($ Id.VSub_DollarName '$ONE_SHA1')
            (' 0\tfoo/bar/barme\n')
            ('100644 ')
            ($ Id.VSub_DollarName '$ONE_SHA1')
            (' 0\tfoo/foome\n')
            ('100644 ')
            ($ Id.VSub_DollarName '$ONE_SHA1')
            (' 0\tme\n')
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_DIR)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
              spids: [483]
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE)
              op: assign_op.Equal
              rhs: {(/)}
              spids: [495]
            )
          ]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'abs gitdir, root' span_id:508))} 
      {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )}
    )
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo' span_id:528))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo' span_id:532))}
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'abs gitdir, foo' span_id:539))} 
      {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo/bar' span_id:560))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo/bar' span_id:564))}
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'abs gitdir, foo/bar' span_id:571))} 
      {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ (foo/bar/))}
    )
    (C {(test_foobar_foobar)})
    (C {(say)} {(DQ ('GIT_DIR relative, GIT_WORK_TREE set'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /' span_id:599))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /' span_id:603))}
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_DIR)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:609)
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(echo)} {($ Id.VSub_DollarName '$TRASH_DIRECTORY')})
                                (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s,^/,,' span_id:617))})
                              ]
                              negated: F
                            )
                          ]
                        )
                    ) (/.git)
                  )
                }
              spids: [607]
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE)
              op: assign_op.Equal
              rhs: {(/)}
              spids: [629]
            )
          ]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'rel gitdir, root' span_id:642))} 
      {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )}
    )
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo' span_id:662))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo' span_id:666))}
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_DIR)
              op: assign_op.Equal
              rhs: {(DQ (../) ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
              spids: [670]
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE)
              op: assign_op.Equal
              rhs: {(/)}
              spids: [683]
            )
          ]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'rel gitdir, foo' span_id:696))} 
      {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))} {(DQ (/))} {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo/bar' span_id:718))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo/bar' span_id:722))}
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_DIR)
              op: assign_op.Equal
              rhs: {(DQ (../../) ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
              spids: [726]
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE)
              op: assign_op.Equal
              rhs: {(/)}
              spids: [739]
            )
          ]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'rel gitdir, foo/bar' span_id:752))} 
      {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))} {(DQ (/))} {(DQ (foo/bar/))}
    )
    (C {(test_foobar_foobar)})
    (C {(say)} {(DQ ('GIT_DIR relative, GIT_WORK_TREE relative'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /' span_id:781))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /' span_id:785))}
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_DIR)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ 
                    (command_sub
                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:791)
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(echo)} {($ Id.VSub_DollarName '$TRASH_DIRECTORY')})
                                (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s,^/,,' span_id:799))})
                              ]
                              negated: F
                            )
                          ]
                        )
                    ) (/.git)
                  )
                }
              spids: [789]
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE)
              op: assign_op.Equal
              rhs: {(.)}
              spids: [811]
            )
          ]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'rel gitdir, root' span_id:824))} 
      {(DQ ($ Id.VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )}
    )
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /' span_id:844))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo' span_id:848))}
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_DIR)
              op: assign_op.Equal
              rhs: {(DQ (../) ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
              spids: [852]
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE)
              op: assign_op.Equal
              rhs: {(..)}
              spids: [865]
            )
          ]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'rel gitdir, foo' span_id:878))} 
      {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))} {(DQ (/))} {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo/bar' span_id:900))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo/bar' span_id:904))}
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_DIR)
              op: assign_op.Equal
              rhs: {(DQ (../../) ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
              spids: [908]
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:GIT_WORK_TREE)
              op: assign_op.Equal
              rhs: {(../..)}
              spids: [921]
            )
          ]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'rel gitdir, foo/bar' span_id:934))} 
      {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/.git))} {(DQ (/))} {(DQ (foo/bar/))}
    )
    (C {(test_foobar_foobar)})
    (C {(say)} {(DQ ('.git at root'))})
    (C {(unset)} {(GIT_DIR)})
    (C {(unset)} {(GIT_WORK_TREE)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /' span_id:972))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /' span_id:976))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:982))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:986) 
          (Token id:Id.Lit_Chars val:'\trm -rf /.git &&\n' span_id:987) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "Initialized empty Git repository in /.git/" > expected &&\n'
            span_id: 988
          ) (Token id:Id.Lit_Chars val:'\tgit init > result &&\n' span_id:989) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:990)
        )
      }
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'auto gitdir, root' span_id:997))} {(DQ (.git))} 
      {(DQ (/))} {(DQ )}
    )
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo' span_id:1017))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo' span_id:1021))}
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'auto gitdir, foo' span_id:1027))} {(DQ (/.git))} 
      {(DQ (/))} {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo/bar' span_id:1048))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo/bar' span_id:1052))}
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'auto gitdir, foo/bar' span_id:1058))} 
      {(DQ (/.git))} {(DQ (/))} {(DQ (foo/bar/))}
    )
    (C {(test_foobar_foobar)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:cleanup span_id:1079))} 
      {(SQ (Token id:Id.Lit_Chars val:'rm -rf /.git' span_id:1083))}
    )
    (C {(say)} {(DQ ('auto bare gitdir'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:1100))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1104) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -rf /refs /objects /info /hooks &&\n'
            span_id: 1105
          ) (Token id:Id.Lit_Chars val:'\trm -f /expected /ls.expected /me /result &&\n' span_id:1106) 
          (Token id:Id.Lit_Chars val:'\tcd / &&\n' span_id:1107) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "Initialized empty Git repository in /" > expected &&\n'
            span_id: 1108
          ) (Token id:Id.Lit_Chars val:'\tgit init --bare > result &&\n' span_id:1109) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:1110)
        )
      }
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'auto gitdir, root' span_id:1117))} {(DQ (.))} {(DQ )} {(DQ )})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'go to /foo' span_id:1134))} 
      {(SQ (Token id:Id.Lit_Chars val:'cd /foo' span_id:1138))}
    )
    (C {(test_vars)} {(SQ (Token id:Id.Lit_Chars val:'auto gitdir, root' span_id:1145))} {(DQ (/))} {(DQ )} {(DQ )})
    (C {(test_done)})
  ]
)