(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)}) ] )