(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'test GIT_CEILING_DIRECTORIES'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShFunction
      name: test_prefix
      body: 
        (BraceGroup
          children: [
            (C {<test_expect_success>} {(DQ ($ Id.VSub_Number '$1'))} 
              {
                (DQ <'test \''> ($ Id.VSub_Number '$2') <'\' = '> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'(git rev-parse --show-prefix)'> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_fail
      body: 
        (BraceGroup
          children: [
            (C {<test_expect_success>} {(DQ ($ Id.VSub_Number '$1') <': prefix'>)} 
              {(SQ <'\n'> <'\t\ttest_expect_code 128 git rev-parse --show-prefix\n'> <'\t'>)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TRASH_ROOT)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$PWD'))}
          spids: [65]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ROOT_PARENT)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: (C {<dirname>} {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT'))})
              )
            }
          spids: [70]
        )
      ]
    )
    (C {<unset>} {<GIT_CEILING_DIRECTORIES>})
    (C {<test_prefix>} {<no_ceil>} {(DQ )})
    (C {<export>} {<GIT_CEILING_DIRECTORIES>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [98]
        )
      ]
    )
    (C {<test_prefix>} {<ceil_empty>} {(DQ )})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$ROOT_PARENT'))}
          spids: [110]
        )
      ]
    )
    (C {<test_prefix>} {<ceil_at_parent>} {(DQ )})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$ROOT_PARENT') <'/'>)}
          spids: [123]
        )
      ]
    )
    (C {<test_prefix>} {<ceil_at_parent_slash>} {(DQ )})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT'))}
          spids: [137]
        )
      ]
    )
    (C {<test_prefix>} {<ceil_at_trash>} {(DQ )})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/'>)}
          spids: [150]
        )
      ]
    )
    (C {<test_prefix>} {<ceil_at_trash_slash>} {(DQ )})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub'>)}
          spids: [164]
        )
      ]
    )
    (C {<test_prefix>} {<ceil_at_sub>} {(DQ )})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub/'>)}
          spids: [178]
        )
      ]
    )
    (C {<test_prefix>} {<ceil_at_sub_slash>} {(DQ )})
    (command.If
      arms: [
        (if_arm
          cond: (condition.Shell commands:[(C {<test_have_prereq>} {<SYMLINKS>})])
          action: [(C {<ln>} {<-s>} {<sub>} {<top>})]
          spids: [192 198]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<mkdir>} {<-p>} {<'sub/dir'>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<cd>} {<'sub/dir'>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (C {<unset>} {<GIT_CEILING_DIRECTORIES>})
    (C {<test_prefix>} {<subdir_no_ceil>} {(DQ <'sub/dir/'>)})
    (C {<export>} {<GIT_CEILING_DIRECTORIES>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [253]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_empty>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT'))}
          spids: [266]
        )
      ]
    )
    (C {<test_fail>} {<subdir_ceil_at_trash>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/'>)}
          spids: [276]
        )
      ]
    )
    (C {<test_fail>} {<subdir_ceil_at_trash_slash>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub'>)}
          spids: [287]
        )
      ]
    )
    (C {<test_fail>} {<subdir_ceil_at_sub>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub/'>)}
          spids: [298]
        )
      ]
    )
    (C {<test_fail>} {<subdir_ceil_at_sub_slash>})
    (command.If
      arms: [
        (if_arm
          cond: (condition.Shell commands:[(C {<test_have_prereq>} {<SYMLINKS>})])
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/top'>)}
                  spids: [318]
                )
              ]
            )
            (C {<test_fail>} {<subdir_ceil_at_top>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/top/'>)}
                  spids: [330]
                )
              ]
            )
            (C {<test_fail>} {<subdir_ceil_at_top_slash>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
                  op: assign_op.Equal
                  rhs: {(DQ <':'> ($ Id.VSub_DollarName '$TRASH_ROOT') <'/top'>)}
                  spids: [343]
                )
              ]
            )
            (C {<test_prefix>} {<subdir_ceil_at_top_no_resolve>} {(DQ <'sub/dir/'>)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
                  op: assign_op.Equal
                  rhs: {(DQ <':'> ($ Id.VSub_DollarName '$TRASH_ROOT') <'/top/'>)}
                  spids: [360]
                )
              ]
            )
            (C {<test_prefix>} {<subdir_ceil_at_top_slash_no_resolve>} {(DQ <'sub/dir/'>)})
          ]
          spids: [309 315]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub/dir'>)}
          spids: [379]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_subdir>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub/dir/'>)}
          spids: [394]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_subdir_slash>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/su'>)}
          spids: [410]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_su>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/su/'>)}
          spids: [425]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_su_slash>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub/di'>)}
          spids: [440]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_sub_di>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub/di'>)}
          spids: [455]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_sub_di_slash>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/subdi'>)}
          spids: [470]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_subdi>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/subdi'>)}
          spids: [485]
        )
      ]
    )
    (C {<test_prefix>} {<subdir_ceil_at_subdi_slash>} {(DQ <'sub/dir/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ <'/foo:'> ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub'>)}
          spids: [501]
        )
      ]
    )
    (C {<test_fail>} {<second_of_two>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub:/bar'>)}
          spids: [513]
        )
      ]
    )
    (C {<test_fail>} {<first_of_two>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ <'/foo:'> ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub:/bar'>)}
          spids: [524]
        )
      ]
    )
    (C {<test_fail>} {<second_of_three>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sub'>)}
          spids: [537]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_DIR)
          op: assign_op.Equal
          rhs: {<'../../.git'>}
          spids: [543]
        )
      ]
    )
    (C {<export>} {<GIT_DIR>})
    (C {<test_prefix>} {<git_dir_specified>} {(DQ )})
    (C {<unset>} {<GIT_DIR>})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<cd>} {<'../..'>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<mkdir>} {<-p>} {<'s/d'>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<cd>} {<'s/d'>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (C {<unset>} {<GIT_CEILING_DIRECTORIES>})
    (C {<test_prefix>} {<sd_no_ceil>} {(DQ <'s/d/'>)})
    (C {<export>} {<GIT_CEILING_DIRECTORIES>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [614]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_empty>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT'))}
          spids: [627]
        )
      ]
    )
    (C {<test_fail>} {<sd_ceil_at_trash>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/'>)}
          spids: [637]
        )
      ]
    )
    (C {<test_fail>} {<sd_ceil_at_trash_slash>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/s'>)}
          spids: [648]
        )
      ]
    )
    (C {<test_fail>} {<sd_ceil_at_s>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/s/'>)}
          spids: [659]
        )
      ]
    )
    (C {<test_fail>} {<sd_ceil_at_s_slash>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/s/d'>)}
          spids: [670]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_sd>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/s/d/'>)}
          spids: [685]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_sd_slash>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/su'>)}
          spids: [701]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_su>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/su/'>)}
          spids: [716]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_su_slash>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/s/di'>)}
          spids: [731]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_s_di>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/s/di'>)}
          spids: [746]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_s_di_slash>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sdi'>)}
          spids: [761]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_sdi>} {(DQ <'s/d/'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_CEILING_DIRECTORIES)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_ROOT') <'/sdi'>)}
          spids: [776]
        )
      ]
    )
    (C {<test_prefix>} {<sd_ceil_at_sdi_slash>} {(DQ <'s/d/'>)})
    (C {<test_done>})
  ]
)