(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (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">
              )
            }
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: test_cmp_val
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_Number "$1"))}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[34])]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_Number "$2"))}]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(result)} spids:[45])]
            )
            (C {(test_cmp)} {(expected)} {(result)})
          ]
          spids: [25]
        )
      spids: [21 24]
    )
    (FuncDef
      name: test_vars
      body: 
        (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">)
              }
            )
          ]
          spids: [63]
        )
      spids: [59 62]
    )
    (FuncDef
      name: test_foobar_root
      body: 
        (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">
                )
              }
            )
          ]
          spids: [134]
        )
      spids: [130 133]
    )
    (FuncDef
      name: test_foobar_foo
      body: 
        (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">
                )
              }
            )
          ]
          spids: [183]
        )
      spids: [179 182]
    )
    (FuncDef
      name: test_foobar_foobar
      body: 
        (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">
                )
              }
            )
          ]
          spids: [231]
        )
      spids: [227 230]
    )
    (If
      arms: [
        (if_arm
          cond: [(Pipeline children:[(C {(test)} {(-w)} {(/)})] negated:True)]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all)
                  op: Equal
                  rhs: 
                    {
                      (DQ ("Test requiring writable / skipped. Read this test if you want to run it"))
                    }
                  spids: [288]
                )
              ]
              spids: [288]
            )
            (C {(test_done)})
          ]
          spids: [-1 285]
        )
      ]
      spids: [-1 296]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (AndOr
              children: [
                (C {(test)} {(-e)} {(/refs)})
                (AndOr
                  children: [
                    (C {(test)} {(-e)} {(/objects)})
                    (AndOr
                      children: [
                        (C {(test)} {(-e)} {(/info)})
                        (AndOr
                          children: [
                            (C {(test)} {(-e)} {(/hooks)})
                            (AndOr
                              children: [
                                (C {(test)} {(-e)} {(/.git)})
                                (AndOr
                                  children: [(C {(test)} {(-e)} {(/foo)}) (C {(test)} {(-e)} {(/me)})]
                                  op_id: Op_DPipe
                                )
                              ]
                              op_id: Op_DPipe
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DPipe
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ("Skip test that clobbers existing files in /"))}
                  spids: [359]
                )
              ]
              spids: [359]
            )
            (C {(test_done)})
          ]
          spids: [-1 356]
        )
      ]
      spids: [-1 367]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$IKNOWWHATIAMDOING"))} 
                  {(KW_Bang "!") (Lit_Other "=")} {(DQ (YES))} {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ("You must set env var IKNOWWHATIAMDOING=YES in order to run this test"))}
                  spids: [391]
                )
              ]
              spids: [391]
            )
            (C {(test_done)})
          ]
          spids: [-1 388]
        )
      ]
      spids: [-1 399]
    )
    (If
      arms: [
        (if_arm
          cond: [(Pipeline children:[(C {(test_have_prereq)} {(NOT_ROOT)})] negated:True)]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ("No you can't run this as root"))}
                  spids: [413]
                )
              ]
              spids: [413]
            )
            (C {(test_done)})
          ]
          spids: [-1 410]
        )
      ]
      spids: [-1 421]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ONE_SHA1)
          op: Equal
          rhs: {(d00491fd7e5bb6fa28c517a0bb32b8b506539d4d)}
          spids: [424]
        )
      ]
      spids: [424]
    )
    (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 /">)})
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(ls.expected)} spids:[465])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("100644 ") ($ VSub_Name "$ONE_SHA1") (" 0\tfoo/bar/barme\n") ("100644 ") 
                ($ VSub_Name "$ONE_SHA1") (" 0\tfoo/foome\n") ("100644 ") ($ VSub_Name "$ONE_SHA1") (" 0\tme\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [468]
        )
      ]
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/.git))}
              spids: [481]
            )
          ]
          spids: [481]
        )
        (C {(export)} {(GIT_DIR)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)} spids:[493])]
          spids: [493]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
      op_id: Op_DAmp
    )
    (C {(test_vars)} {(SQ <"abs gitdir, root">)} {(DQ ($ VSub_Name "$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_Name "$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_Name "$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 /">)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_DIR)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [
                            (Pipeline
                              children: [
                                (C {(echo)} {($ VSub_Name "$TRASH_DIRECTORY")})
                                (C {(sed)} {(SQ <"s,^/,,">)})
                              ]
                              negated: False
                            )
                          ]
                        )
                      left_token: <Left_CommandSub "$(">
                      spids: [607 617]
                    ) (/.git)
                  )
                }
              spids: [605]
            )
          ]
          spids: [605]
        )
        (C {(export)} {(GIT_DIR)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)} spids:[627])]
          spids: [627]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
      op_id: Op_DAmp
    )
    (C {(test_vars)} {(SQ <"rel gitdir, root">)} {(DQ ($ VSub_Name "$GIT_DIR"))} {(DQ (/))} {(DQ )})
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ <"go to /foo">)} {(SQ <"cd /foo">)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../) ($ VSub_Name "$TRASH_DIRECTORY") (/.git))}
              spids: [668]
            )
          ]
          spids: [668]
        )
        (C {(export)} {(GIT_DIR)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)} spids:[681])]
          spids: [681]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
      op_id: Op_DAmp
    )
    (C {(test_vars)} {(SQ <"rel gitdir, foo">)} {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/.git))} {(DQ (/))} 
      {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ <"go to /foo/bar">)} {(SQ <"cd /foo/bar">)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../../) ($ VSub_Name "$TRASH_DIRECTORY") (/.git))}
              spids: [724]
            )
          ]
          spids: [724]
        )
        (C {(export)} {(GIT_DIR)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:GIT_WORK_TREE) op:Equal rhs:{(/)} spids:[737])]
          spids: [737]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
      op_id: Op_DAmp
    )
    (C {(test_vars)} {(SQ <"rel gitdir, foo/bar">)} {(DQ ($ VSub_Name "$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 /">)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_DIR)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (CommandSubPart
                      command_list: 
                        (CommandList
                          children: [
                            (Pipeline
                              children: [
                                (C {(echo)} {($ VSub_Name "$TRASH_DIRECTORY")})
                                (C {(sed)} {(SQ <"s,^/,,">)})
                              ]
                              negated: False
                            )
                          ]
                        )
                      left_token: <Left_CommandSub "$(">
                      spids: [789 799]
                    ) (/.git)
                  )
                }
              spids: [787]
            )
          ]
          spids: [787]
        )
        (C {(export)} {(GIT_DIR)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:GIT_WORK_TREE) op:Equal rhs:{(.)} spids:[809])]
          spids: [809]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
      op_id: Op_DAmp
    )
    (C {(test_vars)} {(SQ <"rel gitdir, root">)} {(DQ ($ VSub_Name "$GIT_DIR"))} {(DQ (/))} {(DQ )})
    (C {(test_foobar_root)})
    (C {(test_expect_success)} {(SQ <"go to /">)} {(SQ <"cd /foo">)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../) ($ VSub_Name "$TRASH_DIRECTORY") (/.git))}
              spids: [850]
            )
          ]
          spids: [850]
        )
        (C {(export)} {(GIT_DIR)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:GIT_WORK_TREE) op:Equal rhs:{(..)} spids:[863])]
          spids: [863]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
      op_id: Op_DAmp
    )
    (C {(test_vars)} {(SQ <"rel gitdir, foo">)} {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/.git))} {(DQ (/))} 
      {(DQ (foo/))}
    )
    (C {(test_foobar_foo)})
    (C {(test_expect_success)} {(SQ <"go to /foo/bar">)} {(SQ <"cd /foo/bar">)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:GIT_DIR)
              op: Equal
              rhs: {(DQ (../../) ($ VSub_Name "$TRASH_DIRECTORY") (/.git))}
              spids: [906]
            )
          ]
          spids: [906]
        )
        (C {(export)} {(GIT_DIR)})
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:GIT_WORK_TREE) op:Equal rhs:{(../..)} spids:[919])]
          spids: [919]
        )
        (C {(export)} {(GIT_WORK_TREE)})
      ]
      op_id: Op_DAmp
    )
    (C {(test_vars)} {(SQ <"rel gitdir, foo/bar">)} {(DQ ($ VSub_Name "$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)})
  ]
)