(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:'Test of the various options to git rm.' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Initialize test directory' span_id:32))} { (DQ ("touch -- foo bar baz 'space embedded' -q &&\n") (" git add -- foo bar baz 'space embedded' -q &&\n") (" git commit -m 'add normal files'") ) } ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test_have_prereq)} {(Id.KW_Bang '!') (MINGW)}) (command.Simple words: [ {(touch)} {(--)} {(SQ (Token id:Id.Lit_Chars val:'tab\tembedded' span_id:58))} { (SQ (Token id:Id.Lit_Chars val:'newline\n' span_id:62) (Token id:Id.Lit_Chars val:embedded span_id:63) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:66) fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) ] action: [(C {(test_set_prereq)} {(FUNNYNAMES)})] spids: [44 69] ) ] else_action: [ (C {(say)} { (SQ (Token id: Id.Lit_Chars val: 'Your filesystem does not allow tabs in filenames.' span_id: 82 ) ) } ) ] ) (C {(test_expect_success)} {(FUNNYNAMES)} {(SQ (Token id:Id.Lit_Chars val:'add files with funny names' span_id:93))} { (DQ ('\n') (" git add -- 'tab\tembedded' 'newline\n") ("embedded' &&\n") (" git commit -m 'add files with tabs and newlines'\n") ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Pre-check that foo exists and is in index before git rm foo' span_id: 109 ) ) } {(SQ (Token id:Id.Lit_Chars val:'[ -f foo ] && git ls-files --error-unmatch foo' span_id:115))} ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Test that git rm foo succeeds' span_id:124))} {(SQ (Token id:Id.Lit_Chars val:'git rm --cached foo' span_id:130))} ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Test that git rm --cached foo succeeds if the index matches the file' span_id: 139 ) ) } { (SQ (Token id:Id.Lit_Chars val:'echo content >foo &&\n' span_id:145) (Token id:Id.Lit_Chars val:' git add foo &&\n' span_id:146) (Token id:Id.Lit_Chars val:' git rm --cached foo' span_id:147) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Test that git rm --cached foo succeeds if the index matches the file' span_id: 156 ) ) } { (SQ (Token id:Id.Lit_Chars val:'echo content >foo &&\n' span_id:162) (Token id:Id.Lit_Chars val:' git add foo &&\n' span_id:163) (Token id:Id.Lit_Chars val:' git commit -m foo &&\n' span_id:164) (Token id:Id.Lit_Chars val:' echo "other content" >foo &&\n' span_id:165) (Token id:Id.Lit_Chars val:' git rm --cached foo' span_id:166) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Test that git rm --cached foo fails if the index matches neither the file nor HEAD' span_id: 175 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:179) (Token id:Id.Lit_Chars val:' echo content >foo &&\n' span_id:180) (Token id:Id.Lit_Chars val:' git add foo &&\n' span_id:181) (Token id: Id.Lit_Chars val: ' git commit -m foo --allow-empty &&\n' span_id: 182 ) (Token id:Id.Lit_Chars val:' echo "other content" >foo &&\n' span_id:183) (Token id:Id.Lit_Chars val:' git add foo &&\n' span_id:184) (Token id:Id.Lit_Chars val:' echo "yet another content" >foo &&\n' span_id:185) (Token id: Id.Lit_Chars val: ' test_must_fail git rm --cached foo\n' span_id: 186 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Test that git rm --cached -f foo works in case where --cached only did not' span_id: 195 ) ) } { (SQ (Token id:Id.Lit_Chars val:'echo content >foo &&\n' span_id:201) (Token id:Id.Lit_Chars val:' git add foo &&\n' span_id:202) (Token id:Id.Lit_Chars val:' git commit -m foo --allow-empty &&\n' span_id:203) (Token id:Id.Lit_Chars val:' echo "other content" >foo &&\n' span_id:204) (Token id:Id.Lit_Chars val:' git add foo &&\n' span_id:205) (Token id: Id.Lit_Chars val: ' echo "yet another content" >foo &&\n' span_id: 206 ) (Token id:Id.Lit_Chars val:' git rm --cached -f foo' span_id:207) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Post-check that foo exists but is not in index after git rm foo' span_id: 216 ) ) } { (SQ (Token id: Id.Lit_Chars val: '[ -f foo ] && test_must_fail git ls-files --error-unmatch foo' span_id: 222 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Pre-check that bar exists and is in index before "git rm bar"' span_id: 231 ) ) } {(SQ (Token id:Id.Lit_Chars val:'[ -f bar ] && git ls-files --error-unmatch bar' span_id:237))} ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Test that "git rm bar" succeeds' span_id:246))} {(SQ (Token id:Id.Lit_Chars val:'git rm bar' span_id:252))} ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Post-check that bar does not exist and is not in index after "git rm -f bar"' span_id: 261 ) ) } { (SQ (Token id: Id.Lit_Chars val: '! [ -f bar ] && test_must_fail git ls-files --error-unmatch bar' span_id: 267 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Test that "git rm -- -q" succeeds (remove a file that looks like an option)' span_id: 276 ) ) } {(SQ (Token id:Id.Lit_Chars val:'git rm -- -q' span_id:282))} ) (C {(test_expect_success)} {(FUNNYNAMES)} { (DQ ('Test that ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:294) ) ('git rm -f') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:296)) (' succeeds with embedded space, tab, or newline characters.') ) } {(DQ ("git rm -f 'space embedded' 'tab\tembedded' 'newline\n") ("embedded'"))} ) (C {(test_expect_success)} {(SANITY)} {(SQ (Token id:Id.Lit_Chars val:'Test that "git rm -f" fails if its rm fails' span_id:313))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:317) (Token id:Id.Lit_Chars val:'\tchmod a-w . &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm -f baz &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\tchmod 775 .\n' span_id:320) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'When the rm in "git rm -f" fails, it should not remove the file from the index' span_id: 329 ) ) } {(SQ (Token id:Id.Lit_Chars val:'git ls-files --error-unmatch baz' span_id:335))} ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Remove nonexistent file with --ignore-unmatch' span_id:342))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:346) (Token id:Id.Lit_Chars val:'\tgit rm --ignore-unmatch nonexistent\n' span_id:347) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"rm" command printed' span_id:354))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:358) (Token id:Id.Lit_Chars val:'\techo frotz > test-file &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\tgit add test-file &&\n' span_id:360) (Token id: Id.Lit_Chars val: '\tgit commit -m "add file for rm test" &&\n' span_id: 361 ) (Token id:Id.Lit_Chars val:'\tgit rm test-file > rm-output &&\n' span_id:362) (Token id: Id.Lit_Chars val: '\ttest $(grep "^rm " rm-output | wc -l) = 1 &&\n' span_id: 363 ) (Token id:Id.Lit_Chars val:'\trm -f test-file rm-output &&\n' span_id:364) (Token id: Id.Lit_Chars val: '\tgit commit -m "remove file from rm test"\n' span_id: 365 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"rm" command suppressed with --quiet' span_id:372))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:376) (Token id:Id.Lit_Chars val:'\techo frotz > test-file &&\n' span_id:377) (Token id:Id.Lit_Chars val:'\tgit add test-file &&\n' span_id:378) (Token id: Id.Lit_Chars val: '\tgit commit -m "add file for rm --quiet test" &&\n' span_id: 379 ) (Token id:Id.Lit_Chars val:'\tgit rm --quiet test-file > rm-output &&\n' span_id:380) (Token id:Id.Lit_Chars val:'\ttest $(wc -l < rm-output) = 0 &&\n' span_id:381) (Token id:Id.Lit_Chars val:'\trm -f test-file rm-output &&\n' span_id:382) (Token id: Id.Lit_Chars val: '\tgit commit -m "remove file from rm --quiet test"\n' span_id: 383 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Re-add foo and baz' span_id:393))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:397) (Token id:Id.Lit_Chars val:'\tgit add foo baz &&\n' span_id:398) (Token id:Id.Lit_Chars val:'\tgit ls-files --error-unmatch foo baz\n' span_id:399) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Modify foo -- rm should refuse' span_id:406))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:410) (Token id:Id.Lit_Chars val:'\techo >>foo &&\n' span_id:411) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm foo baz &&\n' span_id:412) (Token id:Id.Lit_Chars val:'\ttest -f foo &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\ttest -f baz &&\n' span_id:414) (Token id: Id.Lit_Chars val: '\tgit ls-files --error-unmatch foo baz\n' span_id: 415 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Modified foo -- rm -f should work' span_id:422))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:426) (Token id:Id.Lit_Chars val:'\tgit rm -f foo baz &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\ttest ! -f foo &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\ttest ! -f baz &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\ttest_must_fail git ls-files --error-unmatch foo &&\n' span_id:430) (Token id: Id.Lit_Chars val: '\ttest_must_fail git ls-files --error-unmatch bar\n' span_id: 431 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Re-add foo and baz for HEAD tests' span_id:438))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:442) (Token id:Id.Lit_Chars val:'\techo frotz >foo &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD -- baz &&\n' span_id:444) (Token id:Id.Lit_Chars val:'\tgit add foo baz &&\n' span_id:445) (Token id:Id.Lit_Chars val:'\tgit ls-files --error-unmatch foo baz\n' span_id:446) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'foo is different in index from HEAD -- rm should refuse' span_id: 453 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:457) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm foo baz &&\n' span_id:458) (Token id:Id.Lit_Chars val:'\ttest -f foo &&\n' span_id:459) (Token id:Id.Lit_Chars val:'\ttest -f baz &&\n' span_id:460) (Token id:Id.Lit_Chars val:'\tgit ls-files --error-unmatch foo baz\n' span_id:461) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'but with -f it should work.' span_id:468))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:472) (Token id:Id.Lit_Chars val:'\tgit rm -f foo baz &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\ttest ! -f foo &&\n' span_id:474) (Token id:Id.Lit_Chars val:'\ttest ! -f baz &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\ttest_must_fail git ls-files --error-unmatch foo &&\n' span_id:476) (Token id: Id.Lit_Chars val: '\ttest_must_fail git ls-files --error-unmatch baz\n' span_id: 477 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'refuse to remove cached empty file with modifications' span_id: 484 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:488) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:489) (Token id:Id.Lit_Chars val:'\tgit add empty &&\n' span_id:490) (Token id:Id.Lit_Chars val:'\techo content >empty &&\n' span_id:491) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm --cached empty\n' span_id:492) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'remove intent-to-add file without --force' span_id:499))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:503) (Token id:Id.Lit_Chars val:'\techo content >intent-to-add &&\n' span_id:504) (Token id:Id.Lit_Chars val:'\tgit add -N intent-to-add &&\n' span_id:505) (Token id:Id.Lit_Chars val:'\tgit rm --cached intent-to-add\n' span_id:506) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Recursive test setup' span_id:513))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:517) (Token id:Id.Lit_Chars val:'\tmkdir -p frotz &&\n' span_id:518) (Token id:Id.Lit_Chars val:'\techo qfwfq >frotz/nitfol &&\n' span_id:519) (Token id:Id.Lit_Chars val:'\tgit add frotz &&\n' span_id:520) (Token id:Id.Lit_Chars val:'\tgit commit -m "subdir test"\n' span_id:521) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Recursive without -r fails' span_id:528))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:532) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm frotz &&\n' span_id:533) (Token id:Id.Lit_Chars val:'\ttest -d frotz &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\ttest -f frotz/nitfol\n' span_id:535) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Recursive with -r but dirty' span_id:542))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:546) (Token id:Id.Lit_Chars val:'\techo qfwfq >>frotz/nitfol &&\n' span_id:547) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm -r frotz &&\n' span_id:548) (Token id:Id.Lit_Chars val:'\ttest -d frotz &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\ttest -f frotz/nitfol\n' span_id:550) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Recursive with -r -f' span_id:557))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:561) (Token id:Id.Lit_Chars val:'\tgit rm -f -r frotz &&\n' span_id:562) (Token id:Id.Lit_Chars val:'\t! test -f frotz/nitfol &&\n' span_id:563) (Token id:Id.Lit_Chars val:'\t! test -d frotz\n' span_id:564) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Remove nonexistent file returns nonzero exit status' span_id: 571 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:575) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm nonexistent\n' span_id:576) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Call "rm" from outside the work tree' span_id:583))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:587) (Token id:Id.Lit_Chars val:'\tmkdir repo &&\n' span_id:588) (Token id:Id.Lit_Chars val:'\t(cd repo &&\n' span_id:589) (Token id:Id.Lit_Chars val:'\t git init &&\n' span_id:590) (Token id:Id.Lit_Chars val:'\t echo something > somefile &&\n' span_id:591) (Token id:Id.Lit_Chars val:'\t git add somefile &&\n' span_id:592) (Token id:Id.Lit_Chars val:'\t git commit -m "add a file" &&\n' span_id:593) (Token id:Id.Lit_Chars val:'\t (cd .. &&\n' span_id:594) (Token id: Id.Lit_Chars val: '\t git --git-dir=repo/.git --work-tree=repo rm somefile) &&\n' span_id: 595 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git ls-files --error-unmatch somefile)\n' span_id:596) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'refresh index before checking if it is up-to-date' span_id: 603 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:607) (Token id:Id.Lit_Chars val:'\n' span_id:608) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:609) (Token id:Id.Lit_Chars val:'\ttest-chmtime -86400 frotz/nitfol &&\n' span_id:610) (Token id:Id.Lit_Chars val:'\tgit rm frotz/nitfol &&\n' span_id:611) (Token id:Id.Lit_Chars val:'\ttest ! -f frotz/nitfol\n' span_id:612) (Token id:Id.Lit_Chars val:'\n' span_id:613) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'choking "git rm" should not let it die with cruft' span_id: 620 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:624) (Token id:Id.Lit_Chars val:'\tgit reset -q --hard &&\n' span_id:625) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f .git/index.lock && git reset -q --hard" &&\n' span_id: 626 ) (Token id:Id.Lit_Chars val:'\ti=0 &&\n' span_id:627) (Token id:Id.Lit_Chars val:'\twhile test $i -lt 12000\n' span_id:628) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:629) (Token id: Id.Lit_Chars val: '\t echo "100644 1234567890123456789012345678901234567890 0\tsome-file-$i"\n' span_id: 630 ) (Token id:Id.Lit_Chars val:'\t i=$(( $i + 1 ))\n' span_id:631) (Token id: Id.Lit_Chars val: '\tdone | git update-index --index-info &&\n' span_id: 632 ) (Token id:Id.Lit_Chars val:'\tgit rm -n "some-file-*" | : &&\n' span_id:633) (Token id: Id.Lit_Chars val: '\ttest_path_is_missing .git/index.lock\n' span_id: 634 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm removes subdirectories recursively' span_id:641))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:645) (Token id:Id.Lit_Chars val:'\tmkdir -p dir/subdir/subsubdir &&\n' span_id:646) (Token id:Id.Lit_Chars val:'\techo content >dir/subdir/subsubdir/file &&\n' span_id:647) (Token id: Id.Lit_Chars val: '\tgit add dir/subdir/subsubdir/file &&\n' span_id: 648 ) (Token id:Id.Lit_Chars val:'\tgit rm -f dir/subdir/subsubdir/file &&\n' span_id:649) (Token id:Id.Lit_Chars val:'\t! test -d dir\n' span_id:650) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:656) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:659) fd: -1 here_begin: {(EOF)} here_end_span_id: 665 stdin_parts: [('M .gitmodules\n') ('D submod\n')] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:669) fd: -1 arg_word: {(expect.modified)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:672) fd: -1 here_begin: {(EOF)} here_end_span_id: 677 stdin_parts: [(' M submod\n')] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:681) fd: -1 arg_word: {(expect.cached)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:684) fd: -1 here_begin: {(EOF)} here_end_span_id: 689 stdin_parts: [('D submod\n')] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:693) fd: -1 arg_word: {(expect.both_deleted)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:695) fd: -1 here_begin: {(EOF)} here_end_span_id: 701 stdin_parts: [('D .gitmodules\n') ('D submod\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm removes empty submodules from work tree' span_id:706))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:710) (Token id:Id.Lit_Chars val:'\tmkdir submod &&\n' span_id:711) (Token id: Id.Lit_Chars val: '\tgit update-index --add --cacheinfo 160000 $(git rev-parse HEAD) submod &&\n' span_id: 712 ) (Token id:Id.Lit_Chars val:'\tgit config -f .gitmodules submodule.sub.url ./. &&\n' span_id:713) (Token id: Id.Lit_Chars val: '\tgit config -f .gitmodules submodule.sub.path submod &&\n' span_id: 714 ) (Token id:Id.Lit_Chars val:'\tgit submodule init &&\n' span_id:715) (Token id:Id.Lit_Chars val:'\tgit add .gitmodules &&\n' span_id:716) (Token id:Id.Lit_Chars val:'\tgit commit -m "add submodule" &&\n' span_id:717) (Token id:Id.Lit_Chars val:'\tgit rm submod &&\n' span_id:718) (Token id:Id.Lit_Chars val:'\ttest ! -e submod &&\n' span_id:719) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 720 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:721) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.url &&\n' span_id: 722 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.path\n' span_id: 723 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm removes removed submodule from index and .gitmodules' span_id: 730 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:734) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:735) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:736) (Token id:Id.Lit_Chars val:'\trm -rf submod &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\tgit rm submod &&\n' span_id:738) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 739 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:740) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.url &&\n' span_id: 741 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.path\n' span_id: 742 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm removes work tree of unmodified submodules' span_id:749))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:753) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:754) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:755) (Token id:Id.Lit_Chars val:'\tgit rm submod &&\n' span_id:756) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:757) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 758 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:759) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.url &&\n' span_id: 760 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.path\n' span_id: 761 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm removes a submodule with a trailing /' span_id:768))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:772) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:773) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:774) (Token id:Id.Lit_Chars val:'\tgit rm submod/ &&\n' span_id:775) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:776) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 777 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:778) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm fails when given a file with a trailing /' span_id:785))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:789) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm empty/\n' span_id:790) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm succeeds when given a directory with a trailing /' span_id: 797 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:801) (Token id:Id.Lit_Chars val:'\tgit rm -r frotz/\n' span_id:802) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated submodule with different HEAD fails unless forced' span_id: 809 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:813) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:814) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:815) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:816) (Token id:Id.Lit_Chars val:'\t\tgit checkout HEAD^\n' span_id:817) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:818) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:819) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:820) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:821) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 822 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.modified actual &&\n' span_id:823) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:824) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:825) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 826 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:827) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.url &&\n' span_id: 828 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.path\n' span_id: 829 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm --cached leaves work tree of populated submodules and .gitmodules alone' span_id: 836 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:840) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:841) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:842) (Token id:Id.Lit_Chars val:'\tgit rm --cached submod &&\n' span_id:843) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:844) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:845) (Token id:Id.Lit_Chars val:'\tgit status -s -uno >actual &&\n' span_id:846) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.cached actual &&\n' span_id:847) (Token id:Id.Lit_Chars val:'\tgit config -f .gitmodules submodule.sub.url &&\n' span_id:848) (Token id: Id.Lit_Chars val: '\tgit config -f .gitmodules submodule.sub.path\n' span_id: 849 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm --dry-run does not touch the submodule or .gitmodules' span_id: 856 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:860) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:861) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:862) (Token id:Id.Lit_Chars val:'\tgit rm -n submod &&\n' span_id:863) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:864) (Token id:Id.Lit_Chars val:'\tgit diff-index --exit-code HEAD\n' span_id:865) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm does not complain when no .gitmodules file is found' span_id: 872 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:876) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:877) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:878) (Token id:Id.Lit_Chars val:'\tgit rm .gitmodules &&\n' span_id:879) (Token id:Id.Lit_Chars val:'\tgit rm submod >actual 2>actual.err &&\n' span_id:880) (Token id:Id.Lit_Chars val:'\t! test -s actual.err &&\n' span_id:881) (Token id:Id.Lit_Chars val:'\t! test -d submod &&\n' span_id:882) (Token id:Id.Lit_Chars val:'\t! test -f submod/.git &&\n' span_id:883) (Token id:Id.Lit_Chars val:'\tgit status -s -uno >actual &&\n' span_id:884) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.both_deleted actual\n' span_id:885) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm will error out on a modified .gitmodules file unless staged' span_id: 892 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:896) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:897) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:898) (Token id: Id.Lit_Chars val: '\tgit config -f .gitmodules foo.bar true &&\n' span_id: 899 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod >actual 2>actual.err &&\n' span_id:900) (Token id:Id.Lit_Chars val:'\ttest -s actual.err &&\n' span_id:901) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:902) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:903) (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet -- submod &&\n' span_id:904) (Token id:Id.Lit_Chars val:'\tgit add .gitmodules &&\n' span_id:905) (Token id:Id.Lit_Chars val:'\tgit rm submod >actual 2>actual.err &&\n' span_id:906) (Token id:Id.Lit_Chars val:'\t! test -s actual.err &&\n' span_id:907) (Token id:Id.Lit_Chars val:'\t! test -d submod &&\n' span_id:908) (Token id:Id.Lit_Chars val:'\t! test -f submod/.git &&\n' span_id:909) (Token id:Id.Lit_Chars val:'\tgit status -s -uno >actual &&\n' span_id:910) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:911) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm issues a warning when section is not found in .gitmodules' span_id: 918 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:922) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:923) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:924) (Token id: Id.Lit_Chars val: '\tgit config -f .gitmodules --remove-section submodule.sub &&\n' span_id: 925 ) (Token id:Id.Lit_Chars val:'\tgit add .gitmodules &&\n' span_id:926) (Token id: Id.Lit_Chars val: '\techo "warning: Could not find section in .gitmodules where path=submod" >expect.err &&\n' span_id: 927 ) (Token id:Id.Lit_Chars val:'\tgit rm submod >actual 2>actual.err &&\n' span_id:928) (Token id: Id.Lit_Chars val: '\ttest_i18ncmp expect.err actual.err &&\n' span_id: 929 ) (Token id:Id.Lit_Chars val:'\t! test -d submod &&\n' span_id:930) (Token id:Id.Lit_Chars val:'\t! test -f submod/.git &&\n' span_id:931) (Token id:Id.Lit_Chars val:'\tgit status -s -uno >actual &&\n' span_id:932) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:933) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated submodule with modifications fails unless forced' span_id: 940 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:944) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:945) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:946) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:947) (Token id:Id.Lit_Chars val:'\t\techo X >empty\n' span_id:948) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:949) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:950) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:951) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:952) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 953 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.modified actual &&\n' span_id:954) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:955) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:956) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 957 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:958) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated submodule with untracked files fails unless forced' span_id: 965 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:969) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:970) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:971) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:972) (Token id:Id.Lit_Chars val:'\t\techo X >untracked\n' span_id:973) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:974) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:975) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:976) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:977) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 978 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.modified actual &&\n' span_id:979) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:980) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:981) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 982 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:983) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup submodule conflict' span_id:990))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:994) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:995) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:996) (Token id:Id.Lit_Chars val:'\tgit checkout -b branch1 &&\n' span_id:997) (Token id:Id.Lit_Chars val:'\techo 1 >nitfol &&\n' span_id:998) (Token id:Id.Lit_Chars val:'\tgit add nitfol &&\n' span_id:999) (Token id:Id.Lit_Chars val:'\tgit commit -m "added nitfol 1" &&\n' span_id:1000) (Token id:Id.Lit_Chars val:'\tgit checkout -b branch2 master &&\n' span_id:1001) (Token id:Id.Lit_Chars val:'\techo 2 >nitfol &&\n' span_id:1002) (Token id:Id.Lit_Chars val:'\tgit add nitfol &&\n' span_id:1003) (Token id:Id.Lit_Chars val:'\tgit commit -m "added nitfol 2" &&\n' span_id:1004) (Token id: Id.Lit_Chars val: '\tgit checkout -b conflict1 master &&\n' span_id: 1005 ) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1006) (Token id:Id.Lit_Chars val:'\t\tgit fetch &&\n' span_id:1007) (Token id:Id.Lit_Chars val:'\t\tgit checkout branch1\n' span_id:1008) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1009) (Token id:Id.Lit_Chars val:'\tgit add submod &&\n' span_id:1010) (Token id:Id.Lit_Chars val:'\tgit commit -m "submod 1" &&\n' span_id:1011) (Token id:Id.Lit_Chars val:'\tgit checkout -b conflict2 master &&\n' span_id:1012) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1013) (Token id:Id.Lit_Chars val:'\t\tgit checkout branch2\n' span_id:1014) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1015) (Token id:Id.Lit_Chars val:'\tgit add submod &&\n' span_id:1016) (Token id:Id.Lit_Chars val:'\tgit commit -m "submod 2"\n' span_id:1017) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1023) fd: -1 arg_word: {(expect.conflict)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1026) fd: -1 here_begin: {(EOF)} here_end_span_id: 1031 stdin_parts: [('UU submod\n')] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm removes work tree of unmodified conflicted submodule' span_id: 1036 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1040) (Token id:Id.Lit_Chars val:'\tgit checkout conflict1 &&\n' span_id:1041) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1042) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1043) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge conflict2 &&\n' span_id:1044) (Token id:Id.Lit_Chars val:'\tgit rm submod &&\n' span_id:1045) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1046) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1047 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1048) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a conflicted populated submodule with different HEAD fails unless forced' span_id: 1055 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1059) (Token id:Id.Lit_Chars val:'\tgit checkout conflict1 &&\n' span_id:1060) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1061) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1062) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1063) (Token id:Id.Lit_Chars val:'\t\tgit checkout HEAD^\n' span_id:1064) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1065) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge conflict2 &&\n' span_id: 1066 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1067) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1068) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:1069) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1070 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.conflict actual &&\n' span_id:1071) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:1072) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1073) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1074 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1075) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.url &&\n' span_id: 1076 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.path\n' span_id: 1077 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a conflicted populated submodule with modifications fails unless forced' span_id: 1084 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1088) (Token id:Id.Lit_Chars val:'\tgit checkout conflict1 &&\n' span_id:1089) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1090) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1091) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1092) (Token id:Id.Lit_Chars val:'\t\techo X >empty\n' span_id:1093) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1094) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge conflict2 &&\n' span_id: 1095 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1096) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1097) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:1098) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1099 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.conflict actual &&\n' span_id:1100) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:1101) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1102) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1103 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1104) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.url &&\n' span_id: 1105 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git config -f .gitmodules submodule.sub.path\n' span_id: 1106 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a conflicted populated submodule with untracked files fails unless forced' span_id: 1113 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1117) (Token id:Id.Lit_Chars val:'\tgit checkout conflict1 &&\n' span_id:1118) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1119) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1120) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1121) (Token id:Id.Lit_Chars val:'\t\techo X >untracked\n' span_id:1122) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1123) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge conflict2 &&\n' span_id: 1124 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1125) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1126) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:1127) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1128 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.conflict actual &&\n' span_id:1129) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:1130) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1131) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1132 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1133) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a conflicted populated submodule with a .git directory fails even when forced' span_id: 1140 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1144) (Token id:Id.Lit_Chars val:'\tgit checkout conflict1 &&\n' span_id:1145) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1146) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1147) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1148) (Token id:Id.Lit_Chars val:'\t\trm .git &&\n' span_id:1149) (Token id:Id.Lit_Chars val:'\t\tcp -R ../.git/modules/sub .git &&\n' span_id:1150) (Token id: Id.Lit_Chars val: '\t\tGIT_WORK_TREE=. git config --unset core.worktree\n' span_id: 1151 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1152) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge conflict2 &&\n' span_id: 1153 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1154) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1155) (Token id:Id.Lit_Chars val:'\ttest -d submod/.git &&\n' span_id:1156) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1157 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.conflict actual &&\n' span_id:1158) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm -f submod &&\n' span_id:1159) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1160) (Token id:Id.Lit_Chars val:'\ttest -d submod/.git &&\n' span_id:1161) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1162 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.conflict actual &&\n' span_id:1163) (Token id:Id.Lit_Chars val:'\tgit merge --abort &&\n' span_id:1164) (Token id:Id.Lit_Chars val:'\trm -rf submod\n' span_id:1165) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a conflicted unpopulated submodule succeeds' span_id: 1172 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1176) (Token id:Id.Lit_Chars val:'\tgit checkout conflict1 &&\n' span_id:1177) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1178) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge conflict2 &&\n' span_id: 1179 ) (Token id:Id.Lit_Chars val:'\tgit rm submod &&\n' span_id:1180) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1181) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1182 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1183) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated submodule with a .git directory fails even when forced' span_id: 1190 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1194) (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:1195) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1196) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1197) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1198) (Token id:Id.Lit_Chars val:'\t\trm .git &&\n' span_id:1199) (Token id:Id.Lit_Chars val:'\t\tcp -R ../.git/modules/sub .git &&\n' span_id:1200) (Token id: Id.Lit_Chars val: '\t\tGIT_WORK_TREE=. git config --unset core.worktree\n' span_id: 1201 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1202) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1203) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1204) (Token id:Id.Lit_Chars val:'\ttest -d submod/.git &&\n' span_id:1205) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1206 ) (Token id:Id.Lit_Chars val:'\t! test -s actual &&\n' span_id:1207) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm -f submod &&\n' span_id:1208) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1209) (Token id:Id.Lit_Chars val:'\ttest -d submod/.git &&\n' span_id:1210) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1211 ) (Token id:Id.Lit_Chars val:'\t! test -s actual &&\n' span_id:1212) (Token id:Id.Lit_Chars val:'\trm -rf submod\n' span_id:1213) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1219) fd: -1 arg_word: {(expect.deepmodified)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1222) fd: -1 here_begin: {(EOF)} here_end_span_id: 1227 stdin_parts: [(' M submod/subsubmod\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup subsubmodule' span_id:1232))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1236) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1237) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1238) (Token id:Id.Lit_Chars val:'\t(cd submod &&\n' span_id:1239) (Token id: Id.Lit_Chars val: '\t\tgit update-index --add --cacheinfo 160000 $(git rev-parse HEAD) subsubmod &&\n' span_id: 1240 ) (Token id:Id.Lit_Chars val:'\t\tgit config -f .gitmodules submodule.sub.url ../. &&\n' span_id:1241) (Token id: Id.Lit_Chars val: '\t\tgit config -f .gitmodules submodule.sub.path subsubmod &&\n' span_id: 1242 ) (Token id:Id.Lit_Chars val:'\t\tgit submodule init &&\n' span_id:1243) (Token id:Id.Lit_Chars val:'\t\tgit add .gitmodules &&\n' span_id:1244) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "add subsubmodule" &&\n' span_id:1245) (Token id:Id.Lit_Chars val:'\t\tgit submodule update subsubmod\n' span_id:1246) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1247) (Token id: Id.Lit_Chars val: '\tgit commit -a -m "added deep submodule"\n' span_id: 1248 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm recursively removes work tree of unmodified submodules' span_id: 1255 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1259) (Token id:Id.Lit_Chars val:'\tgit rm submod &&\n' span_id:1260) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1261) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1262 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1263) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated nested submodule with different nested HEAD fails unless forced' span_id: 1270 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1274) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1275) (Token id:Id.Lit_Chars val:'\tgit submodule update --recursive &&\n' span_id:1276) (Token id:Id.Lit_Chars val:'\t(cd submod/subsubmod &&\n' span_id:1277) (Token id:Id.Lit_Chars val:'\t\tgit checkout HEAD^\n' span_id:1278) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1279) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1280) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1281) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:1282) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1283 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.modified actual &&\n' span_id:1284) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:1285) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1286) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1287 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1288) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated nested submodule with nested modifications fails unless forced' span_id: 1295 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1299) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1300) (Token id:Id.Lit_Chars val:'\tgit submodule update --recursive &&\n' span_id:1301) (Token id:Id.Lit_Chars val:'\t(cd submod/subsubmod &&\n' span_id:1302) (Token id:Id.Lit_Chars val:'\t\techo X >empty\n' span_id:1303) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1304) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1305) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1306) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:1307) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1308 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.modified actual &&\n' span_id:1309) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:1310) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1311) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1312 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1313) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated nested submodule with nested untracked files fails unless forced' span_id: 1320 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1324) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1325) (Token id:Id.Lit_Chars val:'\tgit submodule update --recursive &&\n' span_id:1326) (Token id:Id.Lit_Chars val:'\t(cd submod/subsubmod &&\n' span_id:1327) (Token id:Id.Lit_Chars val:'\t\techo X >untracked\n' span_id:1328) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1329) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1330) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1331) (Token id:Id.Lit_Chars val:'\ttest -f submod/.git &&\n' span_id:1332) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1333 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.modified actual &&\n' span_id:1334) (Token id:Id.Lit_Chars val:'\tgit rm -f submod &&\n' span_id:1335) (Token id:Id.Lit_Chars val:'\ttest ! -d submod &&\n' span_id:1336) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1337 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1338) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm of a populated nested submodule with a nested .git directory fails even when forced' span_id: 1345 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1349) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1350) (Token id:Id.Lit_Chars val:'\tgit submodule update --recursive &&\n' span_id:1351) (Token id:Id.Lit_Chars val:'\t(cd submod/subsubmod &&\n' span_id:1352) (Token id:Id.Lit_Chars val:'\t\trm .git &&\n' span_id:1353) (Token id: Id.Lit_Chars val: '\t\tcp -R ../../.git/modules/sub/modules/sub .git &&\n' span_id: 1354 ) (Token id:Id.Lit_Chars val:'\t\tGIT_WORK_TREE=. git config --unset core.worktree\n' span_id:1355) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1356) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm submod &&\n' span_id:1357) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1358) (Token id:Id.Lit_Chars val:'\ttest -d submod/subsubmod/.git &&\n' span_id:1359) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1360 ) (Token id:Id.Lit_Chars val:'\t! test -s actual &&\n' span_id:1361) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm -f submod &&\n' span_id:1362) (Token id:Id.Lit_Chars val:'\ttest -d submod &&\n' span_id:1363) (Token id:Id.Lit_Chars val:'\ttest -d submod/subsubmod/.git &&\n' span_id:1364) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1365 ) (Token id:Id.Lit_Chars val:'\t! test -s actual &&\n' span_id:1366) (Token id:Id.Lit_Chars val:'\trm -rf submod\n' span_id:1367) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checking out a commit after submodule removal needs manual updates' span_id: 1374 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1378) (Token id: Id.Lit_Chars val: '\tgit commit -m "submodule removal" submod &&\n' span_id: 1379 ) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:1380) (Token id:Id.Lit_Chars val:'\tgit submodule update &&\n' span_id:1381) (Token id:Id.Lit_Chars val:'\tgit checkout -q HEAD^ 2>actual &&\n' span_id:1382) (Token id:Id.Lit_Chars val:'\tgit checkout -q master 2>actual &&\n' span_id:1383) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "^warning: unable to rmdir submod:" actual &&\n' span_id: 1384 ) (Token id:Id.Lit_Chars val:'\tgit status -s submod >actual &&\n' span_id:1385) (Token id:Id.Lit_Chars val:'\techo "?? submod/" >expected &&\n' span_id:1386) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:1387) (Token id:Id.Lit_Chars val:'\trm -rf submod &&\n' span_id:1388) (Token id: Id.Lit_Chars val: '\tgit status -s -uno --ignore-submodules=none > actual &&\n' span_id: 1389 ) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:1390) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm of d/f when d has become a non-directory' span_id:1397))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1401) (Token id:Id.Lit_Chars val:'\trm -rf d &&\n' span_id:1402) (Token id:Id.Lit_Chars val:'\tmkdir d &&\n' span_id:1403) (Token id:Id.Lit_Chars val:'\t>d/f &&\n' span_id:1404) (Token id:Id.Lit_Chars val:'\tgit add d &&\n' span_id:1405) (Token id:Id.Lit_Chars val:'\trm -rf d &&\n' span_id:1406) (Token id:Id.Lit_Chars val:'\t>d &&\n' span_id:1407) (Token id:Id.Lit_Chars val:'\tgit rm d/f &&\n' span_id:1408) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify :d/f &&\n' span_id:1409) (Token id:Id.Lit_Chars val:'\ttest_path_is_file d\n' span_id:1410) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'rm of d/f when d has become a dangling symlink' span_id:1419))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1423) (Token id:Id.Lit_Chars val:'\trm -rf d &&\n' span_id:1424) (Token id:Id.Lit_Chars val:'\tmkdir d &&\n' span_id:1425) (Token id:Id.Lit_Chars val:'\t>d/f &&\n' span_id:1426) (Token id:Id.Lit_Chars val:'\tgit add d &&\n' span_id:1427) (Token id:Id.Lit_Chars val:'\trm -rf d &&\n' span_id:1428) (Token id:Id.Lit_Chars val:'\tln -s nonexistent d &&\n' span_id:1429) (Token id:Id.Lit_Chars val:'\tgit rm d/f &&\n' span_id:1430) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify :d/f &&\n' span_id:1431) (Token id:Id.Lit_Chars val:'\ttest -h d &&\n' span_id:1432) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing d\n' span_id:1433) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm of file when it has become a directory' span_id:1440))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1444) (Token id:Id.Lit_Chars val:'\trm -rf d &&\n' span_id:1445) (Token id:Id.Lit_Chars val:'\t>d &&\n' span_id:1446) (Token id:Id.Lit_Chars val:'\tgit add d &&\n' span_id:1447) (Token id:Id.Lit_Chars val:'\trm -f d &&\n' span_id:1448) (Token id:Id.Lit_Chars val:'\tmkdir d &&\n' span_id:1449) (Token id:Id.Lit_Chars val:'\t>d/f &&\n' span_id:1450) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm d &&\n' span_id:1451) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify :d &&\n' span_id:1452) (Token id:Id.Lit_Chars val:'\ttest_path_is_file d/f\n' span_id:1453) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'rm across a symlinked leading path (no index)' span_id:1462))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1466) (Token id:Id.Lit_Chars val:'\trm -rf d e &&\n' span_id:1467) (Token id:Id.Lit_Chars val:'\tmkdir e &&\n' span_id:1468) (Token id:Id.Lit_Chars val:'\techo content >e/f &&\n' span_id:1469) (Token id:Id.Lit_Chars val:'\tln -s e d &&\n' span_id:1470) (Token id:Id.Lit_Chars val:'\tgit add -A e d &&\n' span_id:1471) (Token id:Id.Lit_Chars val:'\tgit commit -m "symlink d to e, e/f exists" &&\n' span_id:1472) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm d/f &&\n' span_id:1473) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify :d &&\n' span_id:1474) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify :e/f &&\n' span_id:1475) (Token id:Id.Lit_Chars val:'\ttest -h d &&\n' span_id:1476) (Token id:Id.Lit_Chars val:'\ttest_path_is_file e/f\n' span_id:1477) ) } ) (C {(test_expect_failure)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'rm across a symlinked leading path (w/ index)' span_id:1486))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1490) (Token id:Id.Lit_Chars val:'\trm -rf d e &&\n' span_id:1491) (Token id:Id.Lit_Chars val:'\tmkdir d &&\n' span_id:1492) (Token id:Id.Lit_Chars val:'\techo content >d/f &&\n' span_id:1493) (Token id:Id.Lit_Chars val:'\tgit add -A e d &&\n' span_id:1494) (Token id:Id.Lit_Chars val:'\tgit commit -m "d/f exists" &&\n' span_id:1495) (Token id:Id.Lit_Chars val:'\tmv d e &&\n' span_id:1496) (Token id:Id.Lit_Chars val:'\tln -s e d &&\n' span_id:1497) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm d/f &&\n' span_id:1498) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify :d/f &&\n' span_id:1499) (Token id:Id.Lit_Chars val:'\ttest -h d &&\n' span_id:1500) (Token id:Id.Lit_Chars val:'\ttest_path_is_file e/f\n' span_id:1501) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for testing rm messages' span_id:1508))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1512) (Token id:Id.Lit_Chars val:'\t>bar.txt &&\n' span_id:1513) (Token id:Id.Lit_Chars val:'\t>foo.txt &&\n' span_id:1514) (Token id:Id.Lit_Chars val:'\tgit add bar.txt foo.txt\n' span_id:1515) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm files with different staged content' span_id:1522))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1526) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1527) (Token id: Id.Lit_Chars val: '\terror: the following files have staged content different from both the\n' span_id: 1528 ) (Token id:Id.Lit_Chars val:'\tfile and the HEAD:\n' span_id:1529) (Token id:Id.Lit_Chars val:'\t bar.txt\n' span_id:1530) (Token id:Id.Lit_Chars val:'\t foo.txt\n' span_id:1531) (Token id:Id.Lit_Chars val:'\t(use -f to force removal)\n' span_id:1532) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1533) (Token id:Id.Lit_Chars val:'\techo content1 >foo.txt &&\n' span_id:1534) (Token id:Id.Lit_Chars val:'\techo content1 >bar.txt &&\n' span_id:1535) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rm foo.txt bar.txt 2>actual &&\n' span_id: 1536 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1537) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm files with different staged content without hints' span_id: 1544 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1548) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1549) (Token id: Id.Lit_Chars val: '\terror: the following files have staged content different from both the\n' span_id: 1550 ) (Token id:Id.Lit_Chars val:'\tfile and the HEAD:\n' span_id:1551) (Token id:Id.Lit_Chars val:'\t bar.txt\n' span_id:1552) (Token id:Id.Lit_Chars val:'\t foo.txt\n' span_id:1553) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1554) (Token id:Id.Lit_Chars val:'\techo content2 >foo.txt &&\n' span_id:1555) (Token id:Id.Lit_Chars val:'\techo content2 >bar.txt &&\n' span_id:1556) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -c advice.rmhints=false rm foo.txt bar.txt 2>actual &&\n' span_id: 1557 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1558) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm file with local modification' span_id:1565))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1569) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1570) (Token id:Id.Lit_Chars val:'\terror: the following file has local modifications:\n' span_id:1571) (Token id:Id.Lit_Chars val:'\t foo.txt\n' span_id:1572) (Token id: Id.Lit_Chars val: '\t(use --cached to keep the file, or -f to force removal)\n' span_id: 1573 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1574) (Token id:Id.Lit_Chars val:'\tgit commit -m "testing rm 3" &&\n' span_id:1575) (Token id:Id.Lit_Chars val:'\techo content3 >foo.txt &&\n' span_id:1576) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rm foo.txt 2>actual &&\n' span_id: 1577 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1578) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm file with local modification without hints' span_id:1585))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1589) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1590) (Token id:Id.Lit_Chars val:'\terror: the following file has local modifications:\n' span_id:1591) (Token id:Id.Lit_Chars val:'\t bar.txt\n' span_id:1592) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1593) (Token id:Id.Lit_Chars val:'\techo content4 >bar.txt &&\n' span_id:1594) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -c advice.rmhints=false rm bar.txt 2>actual &&\n' span_id: 1595 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1596) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm file with changes in the index' span_id:1603))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1607) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1608) (Token id: Id.Lit_Chars val: '\terror: the following file has changes staged in the index:\n' span_id: 1609 ) (Token id:Id.Lit_Chars val:'\t foo.txt\n' span_id:1610) (Token id: Id.Lit_Chars val: '\t(use --cached to keep the file, or -f to force removal)\n' span_id: 1611 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1612) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1613) (Token id:Id.Lit_Chars val:'\techo content5 >foo.txt &&\n' span_id:1614) (Token id:Id.Lit_Chars val:'\tgit add foo.txt &&\n' span_id:1615) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm foo.txt 2>actual &&\n' span_id:1616) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1617) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rm file with changes in the index without hints' span_id: 1624 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1628) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1629) (Token id: Id.Lit_Chars val: '\terror: the following file has changes staged in the index:\n' span_id: 1630 ) (Token id:Id.Lit_Chars val:'\t foo.txt\n' span_id:1631) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1632) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -c advice.rmhints=false rm foo.txt 2>actual &&\n' span_id: 1633 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1634) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm files with two different errors' span_id:1641))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1645) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1646) (Token id: Id.Lit_Chars val: '\terror: the following file has staged content different from both the\n' span_id: 1647 ) (Token id:Id.Lit_Chars val:'\tfile and the HEAD:\n' span_id:1648) (Token id:Id.Lit_Chars val:'\t foo1.txt\n' span_id:1649) (Token id:Id.Lit_Chars val:'\t(use -f to force removal)\n' span_id:1650) (Token id: Id.Lit_Chars val: '\terror: the following file has changes staged in the index:\n' span_id: 1651 ) (Token id:Id.Lit_Chars val:'\t bar1.txt\n' span_id:1652) (Token id: Id.Lit_Chars val: '\t(use --cached to keep the file, or -f to force removal)\n' span_id: 1653 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1654) (Token id:Id.Lit_Chars val:'\techo content >foo1.txt &&\n' span_id:1655) (Token id:Id.Lit_Chars val:'\tgit add foo1.txt &&\n' span_id:1656) (Token id:Id.Lit_Chars val:'\techo content6 >foo1.txt &&\n' span_id:1657) (Token id:Id.Lit_Chars val:'\techo content6 >bar1.txt &&\n' span_id:1658) (Token id:Id.Lit_Chars val:'\tgit add bar1.txt &&\n' span_id:1659) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rm bar1.txt foo1.txt 2>actual &&\n' span_id:1660) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1661) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rm empty string should invoke warning' span_id:1668))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1672) (Token id:Id.Lit_Chars val:'\tgit rm -rf "" 2>output &&\n' span_id:1673) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "warning: empty strings" output\n' span_id:1674) ) } ) (C {(test_done)}) ] )