(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: 'apply to deeper directory without getting fooled with symlink'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:19) (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token
            id: Id.Lit_Chars
            val: '\tmkdir -p arch/i386/boot arch/x86_64 &&\n'
            span_id: 21
          ) (Token id:Id.Lit_Chars val:'\ttest_write_lines 1 2 3 4 5 >arch/i386/boot/Makefile &&\n' span_id:22) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_ln_s_add ../i386/boot arch/x86_64/boot &&\n'
            span_id: 23
          ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tgit branch test &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\trm arch/x86_64/boot &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tmkdir arch/x86_64/boot &&\n' span_id:30) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_write_lines 2 3 4 5 6 >arch/x86_64/boot/Makefile &&\n'
            span_id: 31
          ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit commit -a -m second &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\n' span_id:35) (Token id:Id.Lit_Chars val:'\tgit format-patch --binary -1 --stdout >test.patch\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\n' span_id:37)
        )
      }
    )
    (C {(test_expect_success)} {(apply)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:46) (Token id:Id.Lit_Chars val:'\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\tgit checkout test &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code test &&\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code --cached test &&\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\tgit apply --index test.patch\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\n' span_id:52)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check result' span_id:59))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:63) (Token id:Id.Lit_Chars val:'\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\tgit diff --exit-code master &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code --cached master &&\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit commit -m replay &&\n' span_id:68) 
          (Token
            id: Id.Lit_Chars
            val: '\tT1=$(git rev-parse "master^{tree}") &&\n'
            span_id: 69
          ) (Token id:Id.Lit_Chars val:'\tT2=$(git rev-parse "HEAD^{tree}") &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\ttest "z$T1" = "z$T2"\n' span_id:71) (Token id:Id.Lit_Chars val:'\n' span_id:72)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not read from beyond symbolic link' span_id:81))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tmkdir -p arch/x86_64/dir &&\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\t>arch/x86_64/dir/file &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\tgit add arch/x86_64/dir/file &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\techo line >arch/x86_64/dir/file &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tgit diff >patch &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\tmkdir arch/i386/dir &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\t>arch/i386/dir/file &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\tln -s ../i386/dir arch/x86_64/dir &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git apply patch &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\ttest_must_fail git apply --cached patch &&\n' span_id:99) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply --index patch\n'
            span_id: 100
          ) (Token id:Id.Lit_Chars val:'\n' span_id:101)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not follow symbolic link (setup)' span_id:110))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:114) (Token id:Id.Lit_Chars val:'\n' span_id:115) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -rf arch/i386/dir arch/x86_64/dir &&\n'
            span_id: 116
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:117) 
          (Token
            id: Id.Lit_Chars
            val: '\tln -s ../i386/dir arch/x86_64/dir &&\n'
            span_id: 118
          ) (Token id:Id.Lit_Chars val:'\tgit add arch/x86_64/dir &&\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tgit diff HEAD >add_symlink.patch &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\n' span_id:122) (Token id:Id.Lit_Chars val:'\tmkdir arch/x86_64/dir &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\t>arch/x86_64/dir/file &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\tgit add arch/x86_64/dir/file &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\tgit diff HEAD >add_file.patch &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\tgit diff -R HEAD >del_file.patch &&\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\trm -fr arch/x86_64/dir &&\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\n' span_id:130) (Token id:Id.Lit_Chars val:'\tcat add_symlink.patch add_file.patch >patch &&\n' span_id:131) 
          (Token
            id: Id.Lit_Chars
            val: '\tcat add_symlink.patch del_file.patch >tricky_del &&\n'
            span_id: 132
          ) (Token id:Id.Lit_Chars val:'\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\tmkdir arch/i386/dir\n' span_id:134)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not follow symbolic link (same input)' span_id:143))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) (Token id:Id.Lit_Chars val:'\n' span_id:148) 
          (Token
            id: Id.Lit_Chars
            val: '\t# same input creates a confusing symbolic link\n'
            span_id: 149
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git apply patch 2>error-wt &&\n' span_id:150) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "beyond a symbolic link" error-wt &&\n'
            span_id: 151
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing arch/x86_64/dir &&\n' span_id:152) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing arch/i386/dir/file &&\n'
            span_id: 153
          ) (Token id:Id.Lit_Chars val:'\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply --index patch 2>error-ix &&\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "beyond a symbolic link" error-ix &&\n' span_id:156) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing arch/x86_64/dir &&\n'
            span_id: 157
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing arch/i386/dir/file &&\n' span_id:158) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/x86_64/dir &&\n'
            span_id: 159
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/i386/dir &&\n'
            span_id: 160
          ) (Token id:Id.Lit_Chars val:'\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply --cached patch 2>error-ct &&\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "beyond a symbolic link" error-ct &&\n' span_id:163) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/x86_64/dir &&\n'
            span_id: 164
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/i386/dir &&\n'
            span_id: 165
          ) (Token id:Id.Lit_Chars val:'\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\t>arch/i386/dir/file &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit add arch/i386/dir/file &&\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\n' span_id:169) (Token id:Id.Lit_Chars val:'\ttest_must_fail git apply tricky_del &&\n' span_id:170) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_file arch/i386/dir/file &&\n'
            span_id: 171
          ) (Token id:Id.Lit_Chars val:'\n' span_id:172) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply --index tricky_del &&\n'
            span_id: 173
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_file arch/i386/dir/file &&\n' span_id:174) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/x86_64/dir &&\n'
            span_id: 175
          ) (Token id:Id.Lit_Chars val:'\tgit ls-files --error-unmatch arch/i386/dir &&\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\n' span_id:177) (Token id:Id.Lit_Chars val:'\ttest_must_fail git apply --cached tricky_del &&\n' span_id:178) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/x86_64/dir &&\n'
            span_id: 179
          ) (Token id:Id.Lit_Chars val:'\tgit ls-files --error-unmatch arch/i386/dir\n' span_id:180)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not follow symbolic link (existing)' span_id:189))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:193) (Token id:Id.Lit_Chars val:'\n' span_id:194) 
          (Token id:Id.Lit_Chars val:'\t# existing symbolic link\n' span_id:195) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:196) 
          (Token
            id: Id.Lit_Chars
            val: '\tln -s ../i386/dir arch/x86_64/dir &&\n'
            span_id: 197
          ) (Token id:Id.Lit_Chars val:'\tgit add arch/x86_64/dir &&\n' span_id:198) 
          (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply add_file.patch 2>error-wt-add &&\n'
            span_id: 200
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "beyond a symbolic link" error-wt-add &&\n' span_id:201) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing arch/i386/dir/file &&\n'
            span_id: 202
          ) (Token id:Id.Lit_Chars val:'\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tmkdir arch/i386/dir &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\t>arch/i386/dir/file &&\n' span_id:205) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply del_file.patch 2>error-wt-del &&\n'
            span_id: 206
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "beyond a symbolic link" error-wt-del &&\n' span_id:207) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_file arch/i386/dir/file &&\n'
            span_id: 208
          ) (Token id:Id.Lit_Chars val:'\trm arch/i386/dir/file &&\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\n' span_id:210) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply --index add_file.patch 2>error-ix-add &&\n'
            span_id: 211
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "beyond a symbolic link" error-ix-add &&\n' span_id:212) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing arch/i386/dir/file &&\n'
            span_id: 213
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/i386/dir &&\n'
            span_id: 214
          ) (Token id:Id.Lit_Chars val:'\n' span_id:215) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git apply --cached add_file.patch 2>error-ct-file &&\n'
            span_id: 216
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "beyond a symbolic link" error-ct-file &&\n' span_id:217) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch arch/i386/dir\n'
            span_id: 218
          )
        )
      }
    )
    (C {(test_done)})
  ]
)