(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <'Test Git when git repository is located at root\n'> <'\n'> 
                <'This test requires write access in root. Do not bother if you do not\n'> <'have a throwaway chroot or VM.\n'> <'\n'> 
                <'Script t1509/prepare-chroot.sh may help you setup chroot, then you\n'> <'can chroot in and execute this test from there.\n'>
              )
            }
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.FuncDef
      name: test_cmp_val
      body: 
        (command.BraceGroup
          children: [
            (command.SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_Number '$1'))}]
              redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expected)})]
            )
            (command.SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_Number '$2'))}]
              redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(result)})]
            )
            (C {(test_cmp)} {(expected)} {(result)})
          ]
        )
    )
    (command.FuncDef
      name: test_vars
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(DQ ($ VSub_Number '$1') (': gitdir'))} 
              {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ VSub_Number '$2')) 
                (SQ <'" "$(git rev-parse --git-dir)"\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Number '$1') (': worktree'))} 
              {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ VSub_Number '$3')) 
                (SQ <'" "$(git rev-parse --show-toplevel)"\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} {(DQ ($ VSub_Number '$1') (': prefix'))} 
              {(SQ <'\n'> <'\t\ttest_cmp_val "'>) (DQ ($ VSub_Number '$4')) 
                (SQ <'" "$(git rev-parse --show-prefix)"\n'> <'\t'>)
              }
            )
          ]
        )
    )
    (command.FuncDef
      name: test_foobar_root
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ <'add relative'>)} 
              {
                (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> 
                  <'\t\tgit add foo/foome &&\n'> <'\t\tgit add foo/bar/barme &&\n'> <'\t\tgit add me &&\n'> 
                  <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(SQ <'add absolute'>)} 
              {
                (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> 
                  <'\t\tgit add /foo/foome &&\n'> <'\t\tgit add /foo/bar/barme &&\n'> <'\t\tgit add /me &&\n'> 
                  <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'>
                )
              }
            )
          ]
        )
    )
    (command.FuncDef
      name: test_foobar_foo
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ <'add relative'>)} 
              {
                (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add foome &&\n'> 
                  <'\t\tgit add bar/barme &&\n'> <'\t\tgit add ../me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> 
                  <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(SQ <'add absolute'>)} 
              {
                (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> 
                  <'\t\tgit add /foo/foome &&\n'> <'\t\tgit add /foo/bar/barme &&\n'> <'\t\tgit add /me &&\n'> 
                  <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'>
                )
              }
            )
          ]
        )
    )
    (command.FuncDef
      name: test_foobar_foobar
      body: 
        (command.BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ <'add relative'>)} 
              {
                (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> <'\t\tgit add ../foome &&\n'> 
                  <'\t\tgit add barme &&\n'> <'\t\tgit add ../../me &&\n'> <'\t\t( cd / && git ls-files --stage ) > result &&\n'> 
                  <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(SQ <'add absolute'>)} 
              {
                (SQ <'\n'> <'\t\ttest -z "$(cd / && git ls-files)" &&\n'> 
                  <'\t\tgit add /foo/foome &&\n'> <'\t\tgit add /foo/bar/barme &&\n'> <'\t\tgit add /me &&\n'> 
                  <'\t\t( cd / && git ls-files --stage ) > result &&\n'> <'\t\ttest_cmp /ls.expected result &&\n'> <'\t\trm "$(git rev-parse --git-dir)/index"\n'> <'\t'>
                )
              }
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test)} {(-w)} {(/)})] negated:T)]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:skip_all)
                  op: Equal
                  rhs: 
                    {(DQ ('Test requiring writable / skipped. Read this test if you want to run it'))}
                )
              ]
            )
            (C {(test_done)})
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Op_DPipe Op_DPipe Op_DPipe Op_DPipe Op_DPipe 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.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ('Skip test that clobbers existing files in /'))}
                )
              ]
            )
            (C {(test_done)})
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$IKNOWWHATIAMDOING'))} 
                  {(KW_Bang '!') (Lit_Other '=')} {(DQ (YES))} {(Lit_Other ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ('You must set env var IKNOWWHATIAMDOING=YES in order to run this test'))}
                )
              ]
            )
            (C {(test_done)})
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test_have_prereq)} {(NOT_ROOT)})] negated:T)]
          action: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ("No you can't run this as root"))}
                )
              ]
            )
            (C {(test_done)})
          ]
        )
      ]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:ONE_SHA1)
          op: Equal
          rhs: {(d00491fd7e5bb6fa28c517a0bb32b8b506539d4d)}
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\trm -rf /foo &&\n'> <'\tmkdir /foo &&\n'> <'\tmkdir /foo/bar &&\n'> 
          <'\techo 1 > /foo/foome &&\n'> <'\techo 1 > /foo/bar/barme &&\n'> <'\techo 1 > /me\n'>
        )
      }
    )
    (C {(say)} {(DQ ('GIT_DIR absolute, GIT_WORK_TREE set'))})
    (C {(test_expect_success)} {(SQ <'go to /'>)} {(SQ <'cd /'>)})
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(ls.expected)})
        (redir.HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(EOF)}
          here_end_span_id: 481
          stdin_parts: [
            ('100644 ')
            ($ VSub_DollarName '$ONE_SHA1')
            (' 0\tfoo/bar/barme\n')
            ('100644 ')
            ($ VSub_DollarName '$ONE_SHA1')
            (' 0\tfoo/foome\n')
            ('100644 ')
            ($ VSub_DollarName '$ONE_SHA1')
            (' 0\tme\n')
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ <'abs gitdir, root'>)} {(DQ ($ VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )})
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)})
    (C {(test_vars)} {(SQ <'abs gitdir, foo'>)} {(DQ ($ VSub_DollarName '$GIT_DIR'))} {(DQ (/))} 
      {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)})
    (C {(test_vars)} {(SQ <'abs gitdir, foo/bar'>)} {(DQ ($ 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 <'go to /'>)} {(SQ <'cd /'>)})
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:GIT_DIR)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (word_part.CommandSubPart
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(echo)} {($ VSub_DollarName '$TRASH_DIRECTORY')})
                                (C {(sed)} {(SQ <'s,^/,,'>)})
                              ]
                              negated: F
                            )
                          ]
                        )
                      left_token: <Left_CommandSub '$('>
                    ) (/.git)
                  )
                }
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ <'rel gitdir, root'>)} {(DQ ($ VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )})
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)})
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ <'rel gitdir, foo'>)} {(DQ ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))} 
      {(DQ (/))} {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)})
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)})]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ <'rel gitdir, foo/bar'>)} {(DQ ($ 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 <'go to /'>)} {(SQ <'cd /'>)})
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:GIT_DIR)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (word_part.CommandSubPart
                      command_list: 
                        (command.CommandList
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(echo)} {($ VSub_DollarName '$TRASH_DIRECTORY')})
                                (C {(sed)} {(SQ <'s,^/,,'>)})
                              ]
                              negated: F
                            )
                          ]
                        )
                      left_token: <Left_CommandSub '$('>
                    ) (/.git)
                  )
                }
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(.)})]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ <'rel gitdir, root'>)} {(DQ ($ VSub_DollarName '$GIT_DIR'))} {(DQ (/))} {(DQ )})
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ <'go to /'>)} {(SQ <'cd /foo'>)})
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(..)})]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ <'rel gitdir, foo'>)} {(DQ ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))} 
      {(DQ (/))} {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)})
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../../) ($ VSub_DollarName '$TRASH_DIRECTORY') (/.git))}
            )
          ]
        )
        (C {(export)} {(GIT_DIR)})
      ]
    )
    (command.AndOr
      ops: [Op_DAmp]
      children: [
        (command.Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(lhs_expr.LhsName name:GIT_WORK_TREE) op:Equal rhs:{(../..)})]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
    )
    (C {(test_vars)} {(SQ <'rel gitdir, foo/bar'>)} {(DQ ($ 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 <'go to /'>)} {(SQ <'cd /'>)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\trm -rf /.git &&\n'> 
          <'\techo "Initialized empty Git repository in /.git/" > expected &&\n'> <'\tgit init > result &&\n'> <'\ttest_cmp expected result\n'>
        )
      }
    )
    (C {(test_vars)} {(SQ <'auto gitdir, root'>)} {(DQ (.git))} {(DQ (/))} {(DQ )})
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)})
    (C {(test_vars)} {(SQ <'auto gitdir, foo'>)} {(DQ (/.git))} {(DQ (/))} {(DQ (foo/))})
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ <'go to /foo/bar'>)} {(SQ <'cd /foo/bar'>)})
    (C {(test_vars)} {(SQ <'auto gitdir, foo/bar'>)} {(DQ (/.git))} {(DQ (/))} {(DQ (foo/bar/))})
    (C {(test_foobar_foobar)})
    (C {(test_expect_success)} {(SQ <cleanup>)} {(SQ <'rm -rf /.git'>)})
    (C {(say)} {(DQ ('auto bare gitdir'))})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\trm -rf /refs /objects /info /hooks &&\n'> 
          <'\trm -f /expected /ls.expected /me /result &&\n'> <'\tcd / &&\n'> <'\techo "Initialized empty Git repository in /" > expected &&\n'> 
          <'\tgit init --bare > result &&\n'> <'\ttest_cmp expected result\n'>
        )
      }
    )
    (C {(test_vars)} {(SQ <'auto gitdir, root'>)} {(DQ (.))} {(DQ )} {(DQ )})
    (C {(test_expect_success)} {(SQ <'go to /foo'>)} {(SQ <'cd /foo'>)})
    (C {(test_vars)} {(SQ <'auto gitdir, root'>)} {(DQ (/))} {(DQ )} {(DQ )})
    (C {(test_done)})
  ]
)