(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 ls-files test (--with-tree).\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16) 
                (Token
                  id: Id.Lit_Chars
                  val: 'This test runs git ls-files --with-tree and in particular in\n'
                  span_id: 17
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 'a scenario known to trigger a crash with some versions of git.\n'
                  span_id: 18
                )
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:31) (Token id:Id.Lit_Chars val:'\n' span_id:32) 
          (Token
            id: Id.Lit_Chars
            val: '\t# The bug we are exercising requires a fair number of entries\n'
            span_id: 33
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# in a sub-directory so that add_index_entry will trigger a\n'
            span_id: 34
          ) (Token id:Id.Lit_Chars val:'\t# realloc.\n' span_id:35) (Token id:Id.Lit_Chars val:'\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\techo file >expected &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tfor n in 0 1 2 3 4 5\n' span_id:39) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\t\tfor m in 0 1 2 3 4 5 6 7 8 9\n' span_id:41) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\t\t\tnum=00$n$m &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\t\t\t>sub/file-$num &&\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\t\t\techo file-$num >>expected ||\n' span_id:45) (Token id:Id.Lit_Chars val:'\t\t\treturn 1\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:47) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit commit -m "add a bunch of files" &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\n' span_id:51) 
          (Token
            id: Id.Lit_Chars
            val: '\t# We remove them all so that we will have something to add\n'
            span_id: 52
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# back with --with-tree and so that we will definitely be\n'
            span_id: 53
          ) (Token id:Id.Lit_Chars val:'\t# under the realloc size to trigger the bug.\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\trm -rf sub &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "remove them all" &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\n' span_id:57) 
          (Token
            id: Id.Lit_Chars
            val: '\t# The bug also requires some entry before our directory so that\n'
            span_id: 58
          ) (Token id:Id.Lit_Chars val:'\t# prune_path will modify the_index.cache\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\n' span_id:60) (Token id:Id.Lit_Chars val:'\tmkdir a_directory_that_sorts_before_sub &&\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\t>a_directory_that_sorts_before_sub/file &&\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\t>sub/file &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tgit add .\n' span_id:65)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git -ls-files --with-tree should succeed from subdir'
            span_id: 72
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token
            id: Id.Lit_Chars
            val: '\t# We have to run from a sub-directory to trigger prune_path\n'
            span_id: 77
          ) (Token id:Id.Lit_Chars val:'\t# Then we finally get to run our --with-tree test\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:79) (Token id:Id.Lit_Chars val:'\t\tcd sub &&\n' span_id:80) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit ls-files --with-tree=HEAD~1 >../output\n'
            span_id: 81
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:82)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git -ls-files --with-tree should add entries from named tree.'
            span_id: 91
          )
        )
      } {(SQ (Token id:Id.Lit_Chars val:'test_cmp expected output' span_id:97))}
    )
    (C {(test_done)})
  ]
)