(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:'Intent to add' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'intent to add' span_id:18))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) (Token id:Id.Lit_Chars val:'\ttest_commit 1 &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tgit rm 1.t &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\techo hello >1.t &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\techo hello >file &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\techo hello >elif &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit add -N file &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\tgit add elif &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit add -N 1.t\n' span_id:30) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git status' span_id:37))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:41) (Token id: Id.Lit_Chars val: '\tgit status --porcelain | grep -v actual >actual &&\n' span_id: 42 ) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\tDA 1.t\n' span_id:44) (Token id:Id.Lit_Chars val:'\tA elif\n' span_id:45) (Token id:Id.Lit_Chars val:'\t A file\n' span_id:46) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:47) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:48) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check result of "add -N"' span_id:55))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit ls-files -s file >actual &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tempty=$(git hash-object --stdin </dev/null) &&\n' span_id:61) (Token id: Id.Lit_Chars val: '\techo "100644 $empty 0\tfile" >expect &&\n' span_id: 62 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:63) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'intent to add is just an ordinary empty blob' span_id:70))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\tgit add -u &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit ls-files -s file >actual &&\n' span_id:76) (Token id: Id.Lit_Chars val: '\tgit ls-files -s elif | sed -e "s/elif/file/" >expect &&\n' span_id: 77 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:78) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'intent to add does not clobber existing paths' span_id:85))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) (Token id:Id.Lit_Chars val:'\tgit add -N file elif &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tempty=$(git hash-object --stdin </dev/null) &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit ls-files -s >actual &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\t! grep "$empty" actual\n' span_id:93) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'i-t-a entry is simply ignored' span_id:100))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:104) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tgit commit -a -m initial &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\n' span_id:108) (Token id:Id.Lit_Chars val:'\techo xyzzy >rezrov &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\techo frotz >nitfol &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\tgit add rezrov &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\tgit add -N nitfol &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit commit -m second &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\ttest $(git ls-tree HEAD -- nitfol | wc -l) = 0 &&\n' span_id:114) (Token id: Id.Lit_Chars val: '\ttest $(git diff --name-only HEAD -- nitfol | wc -l) = 1 &&\n' span_id: 115 ) (Token id: Id.Lit_Chars val: '\ttest $(git diff --name-only --ita-invisible-in-index HEAD -- nitfol | wc -l) = 0 &&\n' span_id: 116 ) (Token id: Id.Lit_Chars val: '\ttest $(git diff --name-only --ita-invisible-in-index -- nitfol | wc -l) = 1\n' span_id: 117 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'can commit with an unrelated i-t-a entry in index' span_id: 124 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:128) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\techo bozbar >rezrov &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\techo frotz >nitfol &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgit add rezrov &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tgit add -N nitfol &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\tgit commit -m partial rezrov\n' span_id:134) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'can "commit -a" with an i-t-a entry' span_id:141))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:145) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\t: >nitfol &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\tgit add -N nitfol &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tgit commit -a -m all\n' span_id:149) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cache-tree invalidates i-t-a paths' span_id:156))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:160) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:161) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\t: >dir/foo &&\n' span_id:163) (Token id:Id.Lit_Chars val:'\tgit add dir/foo &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\tgit commit -m foo &&\n' span_id:165) (Token id:Id.Lit_Chars val:'\n' span_id:166) (Token id:Id.Lit_Chars val:'\t: >dir/bar &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit add -N dir/bar &&\n' span_id:168) (Token id: Id.Lit_Chars val: '\tgit diff --cached --name-only >actual &&\n' span_id: 169 ) (Token id:Id.Lit_Chars val:'\techo dir/bar >expect &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\n' span_id:172) (Token id:Id.Lit_Chars val:'\tgit write-tree >/dev/null &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\n' span_id:174) (Token id: Id.Lit_Chars val: '\tgit diff --cached --name-only >actual &&\n' span_id: 175 ) (Token id:Id.Lit_Chars val:'\techo dir/bar >expect &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:177) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cache-tree does not ignore dir that has i-t-a entries' span_id: 184 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:188) (Token id:Id.Lit_Chars val:'\tgit init ita-in-dir &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\t(\n' span_id:190) (Token id:Id.Lit_Chars val:'\t\tcd ita-in-dir &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\t\tmkdir 2 &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\t\tfor f in 1 2/1 2/2 3\n' span_id:193) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:194) (Token id:Id.Lit_Chars val:'\t\t\techo "$f" >"$f"\n' span_id:195) (Token id:Id.Lit_Chars val:'\t\tdone &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\t\tgit add 1 2/2 3 &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\t\tgit add -N 2/1 &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\t\tgit commit -m committed &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r HEAD >actual &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\t\tgrep 2/2 actual\n' span_id:201) (Token id:Id.Lit_Chars val:'\t)\n' span_id:202) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cache-tree does skip dir that becomes empty' span_id:209))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:213) (Token id:Id.Lit_Chars val:'\trm -fr ita-in-dir &&\n' span_id:214) (Token id:Id.Lit_Chars val:'\tgit init ita-in-dir &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\t(\n' span_id:216) (Token id:Id.Lit_Chars val:'\t\tcd ita-in-dir &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\t\tmkdir -p 1/2/3 &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\t\techo 4 >1/2/3/4 &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\t\tgit add -N 1/2/3/4 &&\n' span_id:220) (Token id:Id.Lit_Chars val:'\t\tgit write-tree >actual &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\t\techo $EMPTY_TREE >expected &&\n' span_id:222) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expected actual\n' span_id:223) (Token id:Id.Lit_Chars val:'\t)\n' span_id:224) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit: ita entries ignored in empty intial commit check' span_id: 231 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:235) (Token id:Id.Lit_Chars val:'\tgit init empty-intial-commit &&\n' span_id:236) (Token id:Id.Lit_Chars val:'\t(\n' span_id:237) (Token id:Id.Lit_Chars val:'\t\tcd empty-intial-commit &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\t\t: >one &&\n' span_id:239) (Token id:Id.Lit_Chars val:'\t\tgit add -N one &&\n' span_id:240) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git commit -m nothing-new-here\n' span_id:241) (Token id:Id.Lit_Chars val:'\t)\n' span_id:242) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit: ita entries ignored in empty commit check' span_id: 249 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:253) (Token id:Id.Lit_Chars val:'\tgit init empty-subsequent-commit &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\t(\n' span_id:255) (Token id:Id.Lit_Chars val:'\t\tcd empty-subsequent-commit &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\t\ttest_commit one &&\n' span_id:257) (Token id:Id.Lit_Chars val:'\t\t: >two &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\t\tgit add -N two &&\n' span_id:259) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git commit -m nothing-new-here\n' span_id: 260 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:261) ) } ) (C {(test_done)}) ] )