(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"git grep various.\n">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(hello.c)} spids:[26]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("#include <assert.h>\n") ("#include <stdio.h>\n") ("\n") ("int main(int argc, const char **argv)\n") ("{\n") ("\tprintf(") (Right_DoubleQuote "\"") ("Hello world.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (Right_DoubleQuote "\"") (");\n") ("\treturn 0;\n") ("\t/* char ?? */\n") ("}\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [29] ) ] ) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\t{\n"> <"\t\techo foo mmap bar\n"> <"\t\techo foo_mmap bar\n"> <"\t\techo foo_mmap bar mmap\n"> <"\t\techo foo mmap bar_mmap\n"> <"\t\techo foo_mmap bar mmap baz\n"> <"\t} >file &&\n"> <"\t{\n"> <"\t\techo Hello world\n"> <"\t\techo HeLLo world\n"> <"\t\techo Hello_world\n"> <"\t\techo HeLLo_world\n"> <"\t} >hello_world &&\n"> <"\t{\n"> <"\t\techo \"a+b*c\"\n"> <"\t\techo \"a+bc\"\n"> <"\t\techo \"abc\"\n"> <"\t} >ab &&\n"> <"\techo vvv >v &&\n"> <"\techo ww w >w &&\n"> <"\techo x x xx x >x &&\n"> <"\techo y yy >y &&\n"> <"\techo zzz > z &&\n"> <"\tmkdir t &&\n"> <"\techo test >t/t &&\n"> <"\techo vvv >t/v &&\n"> <"\tmkdir t/a &&\n"> <"\techo vvv >t/a/v &&\n"> <"\t{\n"> <"\t\techo \"line without leading space1\"\n"> <"\t\techo \" line with leading space1\"\n"> <"\t\techo \" line with leading space2\"\n"> <"\t\techo \" line with leading space3\"\n"> <"\t\techo \"line without leading space2\"\n"> <"\t} >space &&\n"> <"\tgit add . &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m initial\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep should not segfault with a bad input">)} {(SQ <"\n"> <"\ttest_must_fail git grep \"(\"\n">)} ) (ForEach iter_name: H iter_words: [{(HEAD)} {(SQ )}] do_arg_iter: False body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Name "$H"))} arms: [ (case_arm pat_list: [{(HEAD)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:HC) op: Equal rhs: {(SQ <"HEAD:">)} spids: [132] ) (assign_pair lhs: (LhsName name:L) op: Equal rhs: {(SQ <HEAD>)} spids: [137] ) ] spids: [132] ) ] spids: [129 130 142 -1] ) (case_arm pat_list: [{(SQ )}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:HC) op: Equal rhs: {(SQ )} spids: [149] ) (assign_pair lhs: (LhsName name:L) op: Equal rhs: {(SQ <"in working tree">)} spids: [151] ) ] spids: [149] ) ] spids: [-1 147 156 -1] ) ] spids: [120 126 159] ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}file:1:foo mmap bar\n"> <"\t\t\techo ${HC}file:3:foo_mmap bar mmap\n"> <"\t\t\techo ${HC}file:4:foo mmap bar_mmap\n"> <"\t\t\techo ${HC}file:5:foo_mmap bar mmap baz\n"> <"\t\t} >expected &&\n"> <"\t\tgit -c grep.linenumber=false grep -n -w -e mmap $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}file:1:foo mmap bar\n"> <"\t\t\techo ${HC}file:3:foo_mmap bar mmap\n"> <"\t\t\techo ${HC}file:4:foo mmap bar_mmap\n"> <"\t\t\techo ${HC}file:5:foo_mmap bar mmap baz\n"> <"\t\t} >expected &&\n"> <"\t\tgit -c grep.linenumber=true grep -w -e mmap $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}file:foo mmap bar\n"> <"\t\t\techo ${HC}file:foo_mmap bar mmap\n"> <"\t\t\techo ${HC}file:foo mmap bar_mmap\n"> <"\t\t\techo ${HC}file:foo_mmap bar mmap baz\n"> <"\t\t} >expected &&\n"> <"\t\tgit -c grep.linenumber=true grep --no-line-number -w -e mmap $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L") (" (w)"))} { (SQ <"\n"> <"\t\t: >expected &&\n"> <"\t\ttest_must_fail git grep -n -w -e \"^w\" $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L") (" (x)"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}x:1:x x xx x\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep -n -w -e \"x xx* x\" $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L") (" (y-1)"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}y:1:y yy\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep -n -w -e \"^y\" $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L") (" (y-2)"))} { (SQ <"\n"> <"\t\t: >expected &&\n"> <"\t\tif git grep -n -w -e \"^y y\" $H >actual\n"> <"\t\tthen\n"> <"\t\t\techo should not have matched\n"> <"\t\t\tcat actual\n"> <"\t\t\tfalse\n"> <"\t\telse\n"> <"\t\t\ttest_cmp expected actual\n"> <"\t\tfi\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -w ") ($ VSub_Name "$L") (" (z)"))} { (SQ <"\n"> <"\t\t: >expected &&\n"> <"\t\tif git grep -n -w -e \"^z\" $H >actual\n"> <"\t\tthen\n"> <"\t\t\techo should not have matched\n"> <"\t\t\tcat actual\n"> <"\t\t\tfalse\n"> <"\t\telse\n"> <"\t\t\ttest_cmp expected actual\n"> <"\t\tfi\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" (t-1)"))} { (SQ <"\n"> <"\t\techo \"${HC}t/t:1:test\" >expected &&\n"> <"\t\tgit grep -n -e test $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" (t-2)"))} { (SQ <"\n"> <"\t\techo \"${HC}t:1:test\" >expected &&\n"> <"\t\t(\n"> <"\t\t\tcd t &&\n"> <"\t\t\tgit grep -n -e test $H\n"> <"\t\t) >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" (t-3)"))} { (SQ <"\n"> <"\t\techo \"${HC}t/t:1:test\" >expected &&\n"> <"\t\t(\n"> <"\t\t\tcd t &&\n"> <"\t\t\tgit grep --full-name -n -e test $H\n"> <"\t\t) >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep -c ") ($ VSub_Name "$L") (" (no /dev/null)"))} {(SQ <"\n"> <"\t\t! git grep -c test $H | grep /dev/null\n"> <"\t">)} ) (C {(test_expect_success)} {(DQ ("grep --max-depth -1 ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}t/a/v:1:vvv\n"> <"\t\t\techo ${HC}t/v:1:vvv\n"> <"\t\t\techo ${HC}v:1:vvv\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep --max-depth -1 -n -e vvv $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --max-depth 0 ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}v:1:vvv\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep --max-depth 0 -n -e vvv $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --max-depth 0 -- '*' ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}t/a/v:1:vvv\n"> <"\t\t\techo ${HC}t/v:1:vvv\n"> <"\t\t\techo ${HC}v:1:vvv\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep --max-depth 0 -n -e vvv $H -- \"*\" >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --max-depth 1 ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}t/v:1:vvv\n"> <"\t\t\techo ${HC}v:1:vvv\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep --max-depth 1 -n -e vvv $H >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --max-depth 0 -- t ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}t/v:1:vvv\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep --max-depth 0 -n -e vvv $H -- t >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --max-depth 0 -- . t ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}t/v:1:vvv\n"> <"\t\t\techo ${HC}v:1:vvv\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep --max-depth 0 -n -e vvv $H -- . t >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --max-depth 0 -- t . ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\t{\n"> <"\t\t\techo ${HC}t/v:1:vvv\n"> <"\t\t\techo ${HC}v:1:vvv\n"> <"\t\t} >expected &&\n"> <"\t\tgit grep --max-depth 0 -n -e vvv $H -- t . >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" with grep.extendedRegexp=false"))} { (SQ <"\n"> <"\t\techo \"${HC}ab:a+bc\" >expected &&\n"> <"\t\tgit -c grep.extendedRegexp=false grep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" with grep.extendedRegexp=true"))} { (SQ <"\n"> <"\t\techo \"${HC}ab:abc\" >expected &&\n"> <"\t\tgit -c grep.extendedRegexp=true grep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" with grep.patterntype=basic"))} { (SQ <"\n"> <"\t\techo \"${HC}ab:a+bc\" >expected &&\n"> <"\t\tgit -c grep.patterntype=basic grep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" with grep.patterntype=extended"))} { (SQ <"\n"> <"\t\techo \"${HC}ab:abc\" >expected &&\n"> <"\t\tgit -c grep.patterntype=extended grep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep ") ($ VSub_Name "$L") (" with grep.patterntype=fixed"))} { (SQ <"\n"> <"\t\techo \"${HC}ab:a+b*c\" >expected &&\n"> <"\t\tgit -c grep.patterntype=fixed grep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(DQ ("grep ") ($ VSub_Name "$L") (" with grep.patterntype=perl"))} { (SQ <"\n"> <"\t\techo \"${HC}ab:a+b*c\" >expected &&\n"> < "\t\tgit -c grep.patterntype=perl grep \"a\\x{2b}b\\x{2a}c\" $H ab >actual &&\n" > <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ("grep ") ($ VSub_Name "$L") (" with grep.patternType=default and grep.extendedRegexp=true") ) } { (SQ <"\n"> <"\t\techo \"${HC}ab:abc\" >expected &&\n"> <"\t\tgit \\\n"> <"\t\t\t-c grep.patternType=default \\\n"> <"\t\t\t-c grep.extendedRegexp=true \\\n"> <"\t\t\tgrep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ("grep ") ($ VSub_Name "$L") (" with grep.extendedRegexp=true and grep.patternType=default") ) } { (SQ <"\n"> <"\t\techo \"${HC}ab:abc\" >expected &&\n"> <"\t\tgit \\\n"> <"\t\t\t-c grep.extendedRegexp=true \\\n"> <"\t\t\t-c grep.patternType=default \\\n"> <"\t\t\tgrep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ("grep ") ($ VSub_Name "$L") (" with grep.patternType=extended and grep.extendedRegexp=false") ) } { (SQ <"\n"> <"\t\techo \"${HC}ab:abc\" >expected &&\n"> <"\t\tgit \\\n"> <"\t\t\t-c grep.patternType=extended \\\n"> <"\t\t\t-c grep.extendedRegexp=false \\\n"> <"\t\t\tgrep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ("grep ") ($ VSub_Name "$L") (" with grep.patternType=basic and grep.extendedRegexp=true") ) } { (SQ <"\n"> <"\t\techo \"${HC}ab:a+bc\" >expected &&\n"> <"\t\tgit \\\n"> <"\t\t\t-c grep.patternType=basic \\\n"> <"\t\t\t-c grep.extendedRegexp=true \\\n"> <"\t\t\tgrep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ("grep ") ($ VSub_Name "$L") (" with grep.extendedRegexp=false and grep.patternType=extended") ) } { (SQ <"\n"> <"\t\techo \"${HC}ab:abc\" >expected &&\n"> <"\t\tgit \\\n"> <"\t\t\t-c grep.extendedRegexp=false \\\n"> <"\t\t\t-c grep.patternType=extended \\\n"> <"\t\t\tgrep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} { (DQ ("grep ") ($ VSub_Name "$L") (" with grep.extendedRegexp=true and grep.patternType=basic") ) } { (SQ <"\n"> <"\t\techo \"${HC}ab:a+bc\" >expected &&\n"> <"\t\tgit \\\n"> <"\t\t\t-c grep.extendedRegexp=true \\\n"> <"\t\t\t-c grep.patternType=basic \\\n"> <"\t\t\tgrep \"a+b*c\" $H ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --count ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\techo ${HC}ab:3 >expected &&\n"> <"\t\tgit grep --count -e b $H -- ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) (C {(test_expect_success)} {(DQ ("grep --count -h ") ($ VSub_Name "$L"))} { (SQ <"\n"> <"\t\techo 3 >expected &&\n"> <"\t\tgit grep --count -h -e b $H -- ab >actual &&\n"> <"\t\ttest_cmp expected actual\n"> <"\t"> ) } ) ] spids: [117 818] ) spids: [111 -1] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[823]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("file\n"))} do_expansion: True here_end: EOF was_filled: True spids: [826] ) ] ) (C {(test_expect_success)} {(SQ <"grep -l -C">)} {(SQ <"\n"> <"\tgit grep -l -C1 foo >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[845]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("file:5\n"))} do_expansion: True here_end: EOF was_filled: True spids: [848] ) ] ) (C {(test_expect_success)} {(SQ <"grep -c -C">)} {(SQ <"\n"> <"\tgit grep -c -C1 foo >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (C {(test_expect_success)} {(SQ <"grep -L -C">)} { (SQ <"\n"> <"\tgit ls-files >expected &&\n"> <"\tgit grep -L -C1 nonexistent_string >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[881]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("file:foo mmap bar_mmap\n"))} do_expansion: True here_end: EOF was_filled: True spids: [884] ) ] ) (C {(test_expect_success)} {(SQ <"grep -e A --and -e B">)} { (SQ <"\n"> <"\tgit grep -e \"foo mmap\" --and -e bar_mmap >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[904]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("file:foo_mmap bar mmap\n") ("file:foo_mmap bar mmap baz\n"))} do_expansion: True here_end: EOF was_filled: True spids: [907] ) ] ) (C {(test_expect_success)} {(SQ <"grep ( -e A --or -e B ) --and -e B">)} { (SQ <"\n"> <"\tgit grep \\( -e foo_ --or -e baz \\) \\\n"> <"\t\t--and -e \" mmap\" >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[930]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("file:foo mmap bar\n"))} do_expansion: True here_end: EOF was_filled: True spids: [933] ) ] ) (C {(test_expect_success)} {(SQ <"grep -e A --and --not -e B">)} { (SQ <"\n"> <"\tgit grep -e \"foo mmap\" --and --not -e bar_mmap >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep should ignore GREP_OPTIONS">)} { (SQ <"\n"> <"\tGREP_OPTIONS=-v git grep \" mmap bar\\$\" >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -f, non-existent file">)} {(SQ <"\n"> <"\ttest_must_fail git grep -f patterns\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[978]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("file:foo mmap bar\n") ("file:foo_mmap bar\n") ("file:foo_mmap bar mmap\n") ("file:foo mmap bar_mmap\n") ("file:foo_mmap bar mmap baz\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [981] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(pattern)} spids:[992]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("mmap\n"))} do_expansion: True here_end: EOF was_filled: True spids: [995] ) ] ) (C {(test_expect_success)} {(SQ <"grep -f, one pattern">)} {(SQ <"\n"> <"\tgit grep -f pattern >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1015]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("file:foo mmap bar\n") ("file:foo_mmap bar\n") ("file:foo_mmap bar mmap\n") ("file:foo mmap bar_mmap\n") ("file:foo_mmap bar mmap baz\n") ("t/a/v:vvv\n") ("t/v:vvv\n") ("v:vvv\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1018] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(patterns)} spids:[1032]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("mmap\n") ("vvv\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1035] ) ] ) (C {(test_expect_success)} {(SQ <"grep -f, multiple patterns">)} {(SQ <"\n"> <"\tgit grep -f patterns >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (C {(test_expect_success)} {(SQ <"grep, multiple patterns">)} {(SQ <"\n"> <"\tgit grep \"$(cat patterns)\" >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1069]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("file:foo mmap bar\n") ("file:foo_mmap bar\n") ("file:foo_mmap bar mmap\n") ("file:foo mmap bar_mmap\n") ("file:foo_mmap bar mmap baz\n") ("t/a/v:vvv\n") ("t/v:vvv\n") ("v:vvv\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1072] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(patterns)} spids:[1086]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("\n") ("mmap\n") ("\n") ("vvv\n") ("\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1089] ) ] ) (C {(test_expect_success)} {(SQ <"grep -f, ignore empty lines">)} {(SQ <"\n"> <"\tgit grep -f patterns >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (C {(test_expect_success)} {(SQ <"grep -f, ignore empty lines, read patterns from stdin">)} {(SQ <"\n"> <"\tgit grep -f - <patterns >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1126]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("y:y yy\n") ("--\n") ("z:zzz\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1129] ) ] ) (C {(test_expect_success)} {(SQ <"grep -q, silently report matches">)} { (SQ <"\n"> <"\t>empty &&\n"> <"\tgit grep -q mmap >actual &&\n"> <"\ttest_cmp empty actual &&\n"> <"\ttest_must_fail git grep -q qfwfq >actual &&\n"> <"\ttest_cmp empty actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -C1 hunk mark between files">)} {(SQ <"\n"> <"\tgit grep -C1 \"^[yz]\" >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (C {(test_expect_success)} {(SQ <"log grep setup">)} { (SQ <"\n"> <"\techo a >>file &&\n"> <"\ttest_tick &&\n"> <"\tGIT_AUTHOR_NAME=\"With * Asterisk\" \\\n"> <"\tGIT_AUTHOR_EMAIL=\"xyzzy@frotz.com\" \\\n"> <"\tgit commit -a -m \"second\" &&\n"> <"\n"> <"\techo a >>file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -a -m \"third\" &&\n"> <"\n"> <"\techo a >>file &&\n"> <"\ttest_tick &&\n"> <"\tGIT_AUTHOR_NAME=\"Night Fall\" \\\n"> <"\tGIT_AUTHOR_EMAIL=\"nitfol@frobozz.com\" \\\n"> <"\tgit commit -a -m \"fourth\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (1)">)} { (SQ <"\n"> <"\tgit log --author=author --pretty=tformat:%s >actual &&\n"> <"\t{\n"> <"\t\techo third && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (2)">)} { (SQ <"\n"> <"\tgit log --author=\" * \" -F --pretty=tformat:%s >actual &&\n"> <"\t{\n"> <"\t\techo second\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (3)">)} { (SQ <"\n"> <"\tgit log --author=\"^A U\" --pretty=tformat:%s >actual &&\n"> <"\t{\n"> <"\t\techo third && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (4)">)} { (SQ <"\n"> <"\tgit log --author=\"frotz\\.com>$\" --pretty=tformat:%s >actual &&\n"> <"\t{\n"> <"\t\techo second\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (5)">)} { (SQ <"\n"> <"\tgit log --author=Thor -F --pretty=tformat:%s >actual &&\n"> <"\t{\n"> <"\t\techo third && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (6)">)} { (SQ <"\n"> <"\tgit log --author=-0700 --pretty=tformat:%s >actual &&\n"> <"\t>expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (7)">)} { (SQ <"\n"> <"\tgit log -g --grep-reflog=\"commit: third\" --pretty=tformat:%s >actual &&\n"> <"\techo third >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (8)">)} { (SQ <"\n"> < "\tgit log -g --grep-reflog=\"commit: third\" --grep-reflog=\"commit: second\" --pretty=tformat:%s >actual &&\n" > <"\t{\n"> <"\t\techo third && echo second\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (9)">)} { (SQ <"\n"> < "\tgit log -g --grep-reflog=\"commit: third\" --author=\"Thor\" --pretty=tformat:%s >actual &&\n" > <"\techo third >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log grep (9)">)} { (SQ <"\n"> < "\tgit log -g --grep-reflog=\"commit: third\" --author=\"non-existent\" --pretty=tformat:%s >actual &&\n" > <"\t: >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --grep-reflog can only be used under -g">)} {(SQ <"\n"> <"\ttest_must_fail git log --grep-reflog=\"commit: third\"\n">)} ) (C {(test_expect_success)} {(SQ <"log with multiple --grep uses union">)} { (SQ <"\n"> <"\tgit log --grep=i --grep=r --format=%s >actual &&\n"> <"\t{\n"> <"\t\techo fourth && echo third && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --all-match with multiple --grep uses intersection">)} { (SQ <"\n"> <"\tgit log --all-match --grep=i --grep=r --format=%s >actual &&\n"> <"\t{\n"> <"\t\techo third\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log with multiple --author uses union">)} { (SQ <"\n"> <"\tgit log --author=\"Thor\" --author=\"Aster\" --format=%s >actual &&\n"> <"\t{\n"> <"\t echo third && echo second && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --all-match with multiple --author still uses union">)} { (SQ <"\n"> <"\tgit log --all-match --author=\"Thor\" --author=\"Aster\" --format=%s >actual &&\n"> <"\t{\n"> <"\t echo third && echo second && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --grep --author uses intersection">)} { (SQ <"\n"> <"\t# grep matches only third and fourth\n"> <"\t# author matches only initial and third\n"> <"\tgit log --author=\"A U Thor\" --grep=r --format=%s >actual &&\n"> <"\t{\n"> <"\t\techo third\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --grep --grep --author takes union of greps and intersects with author">)} { (SQ <"\n"> <"\t# grep matches initial and second but not third\n"> <"\t# author matches only initial and third\n"> <"\tgit log --author=\"A U Thor\" --grep=s --grep=l --format=%s >actual &&\n"> <"\t{\n"> <"\t\techo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} { (SQ < "log ---all-match -grep --author --author still takes union of authors and intersects with grep" > ) } { (SQ <"\n"> <"\t# grep matches only initial and third\n"> <"\t# author matches all but second\n"> <"\tgit log --all-match --author=\"Thor\" --author=\"Night\" --grep=i --format=%s >actual &&\n"> <"\t{\n"> <"\t echo third && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --grep --author --author takes union of authors and intersects with grep">)} { (SQ <"\n"> <"\t# grep matches only initial and third\n"> <"\t# author matches all but second\n"> <"\tgit log --author=\"Thor\" --author=\"Night\" --grep=i --format=%s >actual &&\n"> <"\t{\n"> <"\t echo third && echo initial\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --all-match --grep --grep --author takes intersection">)} { (SQ <"\n"> <"\t# grep matches only third\n"> <"\t# author matches only initial and third\n"> < "\tgit log --all-match --author=\"A U Thor\" --grep=i --grep=r --format=%s >actual &&\n" > <"\t{\n"> <"\t\techo third\n"> <"\t} >expect &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --author does not search in timestamp">)} { (SQ <"\n"> <"\t: >expect &&\n"> <"\tgit log --author=\"$GIT_AUTHOR_DATE\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"log --committer does not search in timestamp">)} { (SQ <"\n"> <"\t: >expect &&\n"> <"\tgit log --committer=\"$GIT_COMMITTER_DATE\" >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep with CE_VALID file">)} { (SQ <"\n"> <"\tgit update-index --assume-unchanged t/t &&\n"> <"\trm t/t &&\n"> <"\ttest \"$(git grep test)\" = \"t/t:test\" &&\n"> <"\tgit update-index --no-assume-unchanged t/t &&\n"> <"\tgit checkout t/t\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1555]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("hello.c=#include <stdio.h>\n") ("hello.c:\treturn 0;\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1558] ) ] ) (C {(test_expect_success)} {(SQ <"grep -p with userdiff">)} { (SQ <"\n"> <"\tgit config diff.custom.funcname \"^#\" &&\n"> <"\techo \"hello.c diff=custom\" >.gitattributes &&\n"> <"\tgit grep -p return >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1581]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("hello.c=int main(int argc, const char **argv)\n") ("hello.c:\treturn 0;\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1584] ) ] ) (C {(test_expect_success)} {(SQ <"grep -p">)} { (SQ <"\n"> <"\trm -f .gitattributes &&\n"> <"\tgit grep -p return >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1606]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c-#include <stdio.h>\n") ("hello.c-\n") ("hello.c=int main(int argc, const char **argv)\n") ("hello.c-{\n") ("hello.c-\tprintf(") (Right_DoubleQuote "\"") ("Hello world.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (Right_DoubleQuote "\"") (");\n") ("hello.c:\treturn 0;\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1609] ) ] ) (C {(test_expect_success)} {(SQ <"grep -p -B5">)} {(SQ <"\n"> <"\tgit grep -p -B5 return >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1639]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c=int main(int argc, const char **argv)\n") ("hello.c-{\n") ("hello.c-\tprintf(") (Right_DoubleQuote "\"") ("Hello world.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (Right_DoubleQuote "\"") (");\n") ("hello.c:\treturn 0;\n") ("hello.c-\t/* char ?? */\n") ("hello.c-}\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1642] ) ] ) (C {(test_expect_success)} {(SQ <"grep -W">)} {(SQ <"\n"> <"\tgit grep -W return >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1672]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("hello.c-#include <assert.h>\n") ("hello.c:#include <stdio.h>\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1675] ) ] ) (C {(test_expect_success)} {(SQ <"grep -W shows no trailing empty lines">)} {(SQ <"\n"> <"\tgit grep -W stdio >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1696]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c=\tprintf(") (Right_DoubleQuote "\"") ("Hello world.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (Right_DoubleQuote "\"") (");\n") ("hello.c:\treturn 0;\n") ("hello.c-\t/* char ?? */\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1699] ) ] ) (C {(test_expect_success)} {(SQ <"grep -W with userdiff">)} { (SQ <"\n"> <"\ttest_when_finished \"rm -f .gitattributes\" &&\n"> <"\tgit config diff.custom.xfuncname \"(printf.*|})$\" &&\n"> <"\techo \"hello.c diff=custom\" >.gitattributes &&\n"> <"\tgit grep -W return >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep from a subdirectory to search wider area (1)">)} {(SQ <"\n"> <"\tmkdir -p s &&\n"> <"\t(\n"> <"\t\tcd s && git grep \"x x x\" ..\n"> <"\t)\n">)} ) (C {(test_expect_success)} {(SQ <"grep from a subdirectory to search wider area (2)">)} { (SQ <"\n"> <"\tmkdir -p s &&\n"> <"\t(\n"> <"\t\tcd s || exit 1\n"> <"\t\t( git grep xxyyzz .. >out ; echo $? >status )\n"> <"\t\t! test -s out &&\n"> <"\t\ttest 1 = $(cat status)\n"> <"\t)\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1762]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("hello.c:int main(int argc, const char **argv)\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1765] ) ] ) (C {(test_expect_success)} {(SQ <"grep -Fi">)} {(SQ <"\n"> <"\tgit grep -Fi \"CHAR *\" >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (C {(test_expect_success)} {(SQ <"outside of git repository">)} { (SQ <"\n"> <"\trm -fr non &&\n"> <"\tmkdir -p non/git/sub &&\n"> <"\techo hello >non/git/file1 &&\n"> <"\techo world >non/git/sub/file2 &&\n"> <"\t{\n"> <"\t\techo file1:hello &&\n"> <"\t\techo sub/file2:world\n"> <"\t} >non/expect.full &&\n"> <"\techo file2:world >non/expect.sub &&\n"> <"\t(\n"> <"\t\tGIT_CEILING_DIRECTORIES=\"$(pwd)/non\" &&\n"> <"\t\texport GIT_CEILING_DIRECTORIES &&\n"> <"\t\tcd non/git &&\n"> <"\t\ttest_must_fail git grep o &&\n"> <"\t\tgit grep --no-index o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.full ../actual.full &&\n"> <"\t\tcd sub &&\n"> <"\t\ttest_must_fail git grep o &&\n"> <"\t\tgit grep --no-index o >../../actual.sub &&\n"> <"\t\ttest_cmp ../../expect.sub ../../actual.sub\n"> <"\t) &&\n"> <"\n"> <"\techo \".*o*\" >non/git/.gitignore &&\n"> <"\t(\n"> <"\t\tGIT_CEILING_DIRECTORIES=\"$(pwd)/non\" &&\n"> <"\t\texport GIT_CEILING_DIRECTORIES &&\n"> <"\t\tcd non/git &&\n"> <"\t\ttest_must_fail git grep o &&\n"> <"\t\tgit grep --no-index --exclude-standard o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.full ../actual.full &&\n"> <"\n"> <"\t\t{\n"> <"\t\t\techo \".gitignore:.*o*\" &&\n"> <"\t\t\tcat ../expect.full\n"> <"\t\t} >../expect.with.ignored &&\n"> <"\t\tgit grep --no-index --no-exclude o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.with.ignored ../actual.full\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"outside of git repository with fallbackToNoIndex">)} { (SQ <"\n"> <"\trm -fr non &&\n"> <"\tmkdir -p non/git/sub &&\n"> <"\techo hello >non/git/file1 &&\n"> <"\techo world >non/git/sub/file2 &&\n"> <"\tcat <<-\\EOF >non/expect.full &&\n"> <"\tfile1:hello\n"> <"\tsub/file2:world\n"> <"\tEOF\n"> <"\techo file2:world >non/expect.sub &&\n"> <"\t(\n"> <"\t\tGIT_CEILING_DIRECTORIES=\"$(pwd)/non\" &&\n"> <"\t\texport GIT_CEILING_DIRECTORIES &&\n"> <"\t\tcd non/git &&\n"> <"\t\ttest_must_fail git -c grep.fallbackToNoIndex=false grep o &&\n"> <"\t\tgit -c grep.fallbackToNoIndex=true grep o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.full ../actual.full &&\n"> <"\t\tcd sub &&\n"> <"\t\ttest_must_fail git -c grep.fallbackToNoIndex=false grep o &&\n"> <"\t\tgit -c grep.fallbackToNoIndex=true grep o >../../actual.sub &&\n"> <"\t\ttest_cmp ../../expect.sub ../../actual.sub\n"> <"\t) &&\n"> <"\n"> <"\techo \".*o*\" >non/git/.gitignore &&\n"> <"\t(\n"> <"\t\tGIT_CEILING_DIRECTORIES=\"$(pwd)/non\" &&\n"> <"\t\texport GIT_CEILING_DIRECTORIES &&\n"> <"\t\tcd non/git &&\n"> <"\t\ttest_must_fail git -c grep.fallbackToNoIndex=false grep o &&\n"> <"\t\tgit -c grep.fallbackToNoIndex=true grep --exclude-standard o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.full ../actual.full &&\n"> <"\n"> <"\t\t{\n"> <"\t\t\techo \".gitignore:.*o*\" &&\n"> <"\t\t\tcat ../expect.full\n"> <"\t\t} >../expect.with.ignored &&\n"> <"\t\tgit -c grep.fallbackToNoIndex grep --no-exclude o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.with.ignored ../actual.full\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"inside git repository but with --no-index">)} { (SQ <"\n"> <"\trm -fr is &&\n"> <"\tmkdir -p is/git/sub &&\n"> <"\techo hello >is/git/file1 &&\n"> <"\techo world >is/git/sub/file2 &&\n"> <"\techo \".*o*\" >is/git/.gitignore &&\n"> <"\t{\n"> <"\t\techo file1:hello &&\n"> <"\t\techo sub/file2:world\n"> <"\t} >is/expect.unignored &&\n"> <"\t{\n"> <"\t\techo \".gitignore:.*o*\" &&\n"> <"\t\tcat is/expect.unignored\n"> <"\t} >is/expect.full &&\n"> <"\t: >is/expect.empty &&\n"> <"\techo file2:world >is/expect.sub &&\n"> <"\t(\n"> <"\t\tcd is/git &&\n"> <"\t\tgit init &&\n"> <"\t\ttest_must_fail git grep o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.empty ../actual.full &&\n"> <"\n"> <"\t\tgit grep --untracked o >../actual.unignored &&\n"> <"\t\ttest_cmp ../expect.unignored ../actual.unignored &&\n"> <"\n"> <"\t\tgit grep --no-index o >../actual.full &&\n"> <"\t\ttest_cmp ../expect.full ../actual.full &&\n"> <"\n"> <"\t\tgit grep --no-index --exclude-standard o >../actual.unignored &&\n"> <"\t\ttest_cmp ../expect.unignored ../actual.unignored &&\n"> <"\n"> <"\t\tcd sub &&\n"> <"\t\ttest_must_fail git grep o >../../actual.sub &&\n"> <"\t\ttest_cmp ../../expect.empty ../../actual.sub &&\n"> <"\n"> <"\t\tgit grep --no-index o >../../actual.sub &&\n"> <"\t\ttest_cmp ../../expect.sub ../../actual.sub &&\n"> <"\n"> <"\t\tgit grep --untracked o >../../actual.sub &&\n"> <"\t\ttest_cmp ../../expect.sub ../../actual.sub\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep --no-index descends into repos, but not .git">)} { (SQ <"\n"> <"\trm -fr non &&\n"> <"\tmkdir -p non/git &&\n"> <"\t(\n"> <"\t\tGIT_CEILING_DIRECTORIES=\"$(pwd)/non\" &&\n"> <"\t\texport GIT_CEILING_DIRECTORIES &&\n"> <"\t\tcd non/git &&\n"> <"\n"> <"\t\techo magic >file &&\n"> <"\t\tgit init repo &&\n"> <"\t\t(\n"> <"\t\t\tcd repo &&\n"> <"\t\t\techo magic >file &&\n"> <"\t\t\tgit add file &&\n"> <"\t\t\tgit commit -m foo &&\n"> <"\t\t\techo magic >.git/file\n"> <"\t\t) &&\n"> <"\n"> <"\t\tcat >expect <<-\\EOF &&\n"> <"\t\tfile\n"> <"\t\trepo/file\n"> <"\t\tEOF\n"> <"\t\tgit grep -l --no-index magic >actual &&\n"> <"\t\ttest_cmp expect actual\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"setup double-dash tests">)} { (SQ <"\n"> <"cat >double-dash <<EOF &&\n"> <"--\n"> <"->\n"> <"other\n"> <"EOF\n"> <"git add double-dash\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[1986]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("double-dash:->\n"))} do_expansion: True here_end: EOF was_filled: True spids: [1989] ) ] ) (C {(test_expect_success)} {(SQ <"grep -- pattern">)} {(SQ <"\n"> <"\tgit grep -- \"->\" >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (C {(test_expect_success)} {(SQ <"grep -- pattern -- pathspec">)} { (SQ <"\n"> <"\tgit grep -- \"->\" -- double-dash >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -e pattern -- path">)} { (SQ <"\n"> <"\tgit grep -e \"->\" -- double-dash >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2032]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("double-dash:--\n"))} do_expansion: True here_end: EOF was_filled: True spids: [2035] ) ] ) (C {(test_expect_success)} {(SQ <"grep -e -- -- path">)} {(SQ <"\n"> <"\tgit grep -e -- -- double-dash >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2054]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c:int main(int argc, const char **argv)\n") ("hello.c:\tprintf(") (Right_DoubleQuote "\"") ("Hello world.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (Right_DoubleQuote "\"") (");\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2057] ) ] ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep --perl-regexp pattern">)} { (SQ <"\n"> <"\tgit grep --perl-regexp \"\\p{Ps}.*?\\p{Pe}\" hello.c >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P pattern">)} { (SQ <"\n"> <"\tgit grep -P \"\\p{Ps}.*?\\p{Pe}\" hello.c >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep pattern with grep.extendedRegexp=true">)} { (SQ <"\n"> <"\t>empty &&\n"> <"\ttest_must_fail git -c grep.extendedregexp=true \\\n"> <"\t\tgrep \"\\p{Ps}.*?\\p{Pe}\" hello.c >actual &&\n"> <"\ttest_cmp empty actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P pattern with grep.extendedRegexp=true">)} { (SQ <"\n"> <"\tgit -c grep.extendedregexp=true \\\n"> <"\t\tgrep -P \"\\p{Ps}.*?\\p{Pe}\" hello.c >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P -v pattern">)} { (SQ <"\n"> <"\t{\n"> <"\t\techo \"ab:a+b*c\"\n"> <"\t\techo \"ab:a+bc\"\n"> <"\t} >expected &&\n"> <"\tgit grep -P -v \"abc\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P -i pattern">)} { (SQ <"\n"> <"\tcat >expected <<-EOF &&\n"> <"\thello.c:\tprintf(\"Hello world.\\n\");\n"> <"\tEOF\n"> <"\tgit grep -P -i \"PRINTF\\([^\\d]+\\)\" hello.c >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P -w pattern">)} { (SQ <"\n"> <"\t{\n"> <"\t\techo \"hello_world:Hello world\"\n"> <"\t\techo \"hello_world:HeLLo world\"\n"> <"\t} >expected &&\n"> <"\tgit grep -P -w \"He((?i)ll)o\" hello_world >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -G invalidpattern properly dies ">)} {(SQ <"\n"> <"\ttest_must_fail git grep -G \"a[\"\n">)} ) (C {(test_expect_success)} {(SQ <"grep invalidpattern properly dies with grep.patternType=basic">)} {(SQ <"\n"> <"\ttest_must_fail git -c grep.patterntype=basic grep \"a[\"\n">)} ) (C {(test_expect_success)} {(SQ <"grep -E invalidpattern properly dies ">)} {(SQ <"\n"> <"\ttest_must_fail git grep -E \"a[\"\n">)} ) (C {(test_expect_success)} {(SQ <"grep invalidpattern properly dies with grep.patternType=extended">)} {(SQ <"\n"> <"\ttest_must_fail git -c grep.patterntype=extended grep \"a[\"\n">)} ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P invalidpattern properly dies ">)} {(SQ <"\n"> <"\ttest_must_fail git grep -P \"a[\"\n">)} ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep invalidpattern properly dies with grep.patternType=perl">)} {(SQ <"\n"> <"\ttest_must_fail git -c grep.patterntype=perl grep \"a[\"\n">)} ) (C {(test_expect_success)} {(SQ <"grep -G -E -F pattern">)} { (SQ <"\n"> <"\techo \"ab:a+b*c\" >expected &&\n"> <"\tgit grep -G -E -F \"a+b*c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep pattern with grep.patternType=basic, =extended, =fixed">)} { (SQ <"\n"> <"\techo \"ab:a+b*c\" >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=basic \\\n"> <"\t\t-c grep.patterntype=extended \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\tgrep \"a+b*c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -E -F -G pattern">)} { (SQ <"\n"> <"\techo \"ab:a+bc\" >expected &&\n"> <"\tgit grep -E -F -G \"a+b*c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep pattern with grep.patternType=extended, =fixed, =basic">)} { (SQ <"\n"> <"\techo \"ab:a+bc\" >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=extended \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\t-c grep.patterntype=basic \\\n"> <"\t\tgrep \"a+b*c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -F -G -E pattern">)} { (SQ <"\n"> <"\techo \"ab:abc\" >expected &&\n"> <"\tgit grep -F -G -E \"a+b*c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep pattern with grep.patternType=fixed, =basic, =extended">)} { (SQ <"\n"> <"\techo \"ab:abc\" >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\t-c grep.patterntype=basic \\\n"> <"\t\t-c grep.patterntype=extended \\\n"> <"\t\tgrep \"a+b*c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -G -F -P -E pattern">)} { (SQ <"\n"> <"\t>empty &&\n"> <"\ttest_must_fail git grep -G -F -P -E \"a\\x{2b}b\\x{2a}c\" ab >actual &&\n"> <"\ttest_cmp empty actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep pattern with grep.patternType=fixed, =basic, =perl, =extended">)} { (SQ <"\n"> <"\t>empty &&\n"> <"\ttest_must_fail git \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\t-c grep.patterntype=basic \\\n"> <"\t\t-c grep.patterntype=perl \\\n"> <"\t\t-c grep.patterntype=extended \\\n"> <"\t\tgrep \"a\\x{2b}b\\x{2a}c\" ab >actual &&\n"> <"\ttest_cmp empty actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -G -F -E -P pattern">)} { (SQ <"\n"> <"\techo \"ab:a+b*c\" >expected &&\n"> <"\tgit grep -G -F -E -P \"a\\x{2b}b\\x{2a}c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep pattern with grep.patternType=fixed, =basic, =extended, =perl">)} { (SQ <"\n"> <"\techo \"ab:a+b*c\" >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\t-c grep.patterntype=basic \\\n"> <"\t\t-c grep.patterntype=extended \\\n"> <"\t\t-c grep.patterntype=perl \\\n"> <"\t\tgrep \"a\\x{2b}b\\x{2a}c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P pattern with grep.patternType=fixed">)} { (SQ <"\n"> <"\techo \"ab:a+b*c\" >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\tgrep -P \"a\\x{2b}b\\x{2a}c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -F pattern with grep.patternType=basic">)} { (SQ <"\n"> <"\techo \"ab:a+b*c\" >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=basic \\\n"> <"\t\tgrep -F \"*c\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -G pattern with grep.patternType=fixed">)} { (SQ <"\n"> <"\t{\n"> <"\t\techo \"ab:a+b*c\"\n"> <"\t\techo \"ab:a+bc\"\n"> <"\t} >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\tgrep -G \"a+b\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep -E pattern with grep.patternType=fixed">)} { (SQ <"\n"> <"\t{\n"> <"\t\techo \"ab:a+b*c\"\n"> <"\t\techo \"ab:a+bc\"\n"> <"\t\techo \"ab:abc\"\n"> <"\t} >expected &&\n"> <"\tgit \\\n"> <"\t\t-c grep.patterntype=fixed \\\n"> <"\t\tgrep -E \"a+\" ab >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2502]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c<RED>:<RESET>int main(int argc, const char **argv)\n") ("hello.c<RED>-<RESET>{\n") ("<RED>--<RESET>\n") ("hello.c<RED>:<RESET>\t/* char ?? */\n") ("hello.c<RED>-<RESET>}\n") ("<RED>--<RESET>\n") ("hello_world<RED>:<RESET>Hello_world\n") ("hello_world<RED>-<RESET>HeLLo_world\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2505] ) ] ) (C {(test_expect_success)} {(SQ <"grep --color, separator">)} { (SQ <"\n"> <"\ttest_config color.grep.context\t\tnormal &&\n"> <"\ttest_config color.grep.filename\t\tnormal &&\n"> <"\ttest_config color.grep.function\t\tnormal &&\n"> <"\ttest_config color.grep.linenumber\tnormal &&\n"> <"\ttest_config color.grep.match\t\tnormal &&\n"> <"\ttest_config color.grep.selected\t\tnormal &&\n"> <"\ttest_config color.grep.separator\tred &&\n"> <"\n"> <"\tgit grep --color=always -A1 -e char -e lo_w hello.c hello_world |\n"> <"\ttest_decode_color >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2541]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c:int main(int argc, const char **argv)\n") ("hello.c:\t/* char ?? */\n") ("\n") ("hello_world:Hello_world\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2544] ) ] ) (C {(test_expect_success)} {(SQ <"grep --break">)} { (SQ <"\n"> <"\tgit grep --break -e char -e lo_w hello.c hello_world >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2567]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c:int main(int argc, const char **argv)\n") ("hello.c-{\n") ("--\n") ("hello.c:\t/* char ?? */\n") ("hello.c-}\n") ("\n") ("hello_world:Hello_world\n") ("hello_world-HeLLo_world\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2570] ) ] ) (C {(test_expect_success)} {(SQ <"grep --break with context">)} { (SQ <"\n"> <"\tgit grep --break -A1 -e char -e lo_w hello.c hello_world >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2597]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c\n") ("int main(int argc, const char **argv)\n") ("\t/* char ?? */\n") ("hello_world\n") ("Hello_world\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2600] ) ] ) (C {(test_expect_success)} {(SQ <"grep --heading">)} { (SQ <"\n"> <"\tgit grep --heading -e char -e lo_w hello.c hello_world >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2624]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("<BOLD;GREEN>hello.c<RESET>\n") ("4:int main(int argc, const <BLACK;BYELLOW>char<RESET> **argv)\n") ("8:\t/* <BLACK;BYELLOW>char<RESET> ?? */\n") ("\n") ("<BOLD;GREEN>hello_world<RESET>\n") ("3:Hel<BLACK;BYELLOW>lo_w<RESET>orld\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2627] ) ] ) (C {(test_expect_success)} {(SQ <"mimic ack-grep --group">)} { (SQ <"\n"> <"\ttest_config color.grep.context\t\tnormal &&\n"> <"\ttest_config color.grep.filename\t\t\"bold green\" &&\n"> <"\ttest_config color.grep.function\t\tnormal &&\n"> <"\ttest_config color.grep.linenumber\tnormal &&\n"> <"\ttest_config color.grep.match\t\t\"black yellow\" &&\n"> <"\ttest_config color.grep.selected\t\tnormal &&\n"> <"\ttest_config color.grep.separator\tnormal &&\n"> <"\n"> <"\tgit grep --break --heading -n --color \\\n"> <"\t\t-e char -e lo_w hello.c hello_world |\n"> <"\ttest_decode_color >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2662]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("space: line with leading space1\n") ("space: line with leading space2\n") ("space: line with leading space3\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2665] ) ] ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -E \"^ \"">)} {(SQ <"\n"> <"\tgit grep -E \"^ \" space >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (C {(test_expect_success)} {(LIBPCRE)} {(SQ <"grep -P \"^ \"">)} {(SQ <"\n"> <"\tgit grep -P \"^ \" space >actual &&\n"> <"\ttest_cmp expected actual\n">)} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2704]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("space-line without leading space1\n") ("space: line <RED>with <RESET>leading space1\n") ("space: line <RED>with <RESET>leading <RED>space2<RESET>\n") ("space: line <RED>with <RESET>leading space3\n") ("space:line without leading <RED>space2<RESET>\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2707] ) ] ) (C {(test_expect_success)} {(SQ <"grep --color -e A -e B with context">)} { (SQ <"\n"> <"\ttest_config color.grep.context\t\tnormal &&\n"> <"\ttest_config color.grep.filename\t\tnormal &&\n"> <"\ttest_config color.grep.function\t\tnormal &&\n"> <"\ttest_config color.grep.linenumber\tnormal &&\n"> <"\ttest_config color.grep.matchContext\tnormal &&\n"> <"\ttest_config color.grep.matchSelected\tred &&\n"> <"\ttest_config color.grep.selected\t\tnormal &&\n"> <"\ttest_config color.grep.separator\tnormal &&\n"> <"\n"> <"\tgit grep --color=always -C2 -e \"with \" -e space2 space |\n"> <"\ttest_decode_color >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2741]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("space-line without leading space1\n") ("space- line with leading space1\n") ("space: line <RED>with <RESET>leading <RED>space2<RESET>\n") ("space- line with leading space3\n") ("space-line without leading space2\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2744] ) ] ) (C {(test_expect_success)} {(SQ <"grep --color -e A --and -e B with context">)} { (SQ <"\n"> <"\ttest_config color.grep.context\t\tnormal &&\n"> <"\ttest_config color.grep.filename\t\tnormal &&\n"> <"\ttest_config color.grep.function\t\tnormal &&\n"> <"\ttest_config color.grep.linenumber\tnormal &&\n"> <"\ttest_config color.grep.matchContext\tnormal &&\n"> <"\ttest_config color.grep.matchSelected\tred &&\n"> <"\ttest_config color.grep.selected\t\tnormal &&\n"> <"\ttest_config color.grep.separator\tnormal &&\n"> <"\n"> <"\tgit grep --color=always -C2 -e \"with \" --and -e space2 space |\n"> <"\ttest_decode_color >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2778]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("space-line without leading space1\n") ("space: line <RED>with <RESET>leading space1\n") ("space- line with leading space2\n") ("space: line <RED>with <RESET>leading space3\n") ("space-line without leading space2\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2781] ) ] ) (C {(test_expect_success)} {(SQ <"grep --color -e A --and --not -e B with context">)} { (SQ <"\n"> <"\ttest_config color.grep.context\t\tnormal &&\n"> <"\ttest_config color.grep.filename\t\tnormal &&\n"> <"\ttest_config color.grep.function\t\tnormal &&\n"> <"\ttest_config color.grep.linenumber\tnormal &&\n"> <"\ttest_config color.grep.matchContext\tnormal &&\n"> <"\ttest_config color.grep.matchSelected\tred &&\n"> <"\ttest_config color.grep.selected\t\tnormal &&\n"> <"\ttest_config color.grep.separator\tnormal &&\n"> <"\n"> <"\tgit grep --color=always -C2 -e \"with \" --and --not -e space2 space |\n"> <"\ttest_decode_color >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[2815]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("hello.c-\n") ("hello.c=int main(int argc, const char **argv)\n") ("hello.c-{\n") ("hello.c:\tpr<RED>int<RESET>f(") (Right_DoubleQuote "\"") ("<RED>Hello<RESET> world.") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (Right_DoubleQuote "\"") (");\n") ("hello.c-\treturn 0;\n") ("hello.c-\t/* char ?? */\n") ("hello.c-}\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [2818] ) ] ) (C {(test_expect_success)} {(SQ <"grep --color -e A --and -e B -p with context">)} { (SQ <"\n"> <"\ttest_config color.grep.context\t\tnormal &&\n"> <"\ttest_config color.grep.filename\t\tnormal &&\n"> <"\ttest_config color.grep.function\t\tnormal &&\n"> <"\ttest_config color.grep.linenumber\tnormal &&\n"> <"\ttest_config color.grep.matchContext\tnormal &&\n"> <"\ttest_config color.grep.matchSelected\tred &&\n"> <"\ttest_config color.grep.selected\t\tnormal &&\n"> <"\ttest_config color.grep.separator\tnormal &&\n"> <"\n"> <"\tgit grep --color=always -p -C3 -e int --and -e Hello --no-index hello.c |\n"> <"\ttest_decode_color >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep can find things only in the work tree">)} { (SQ <"\n"> <"\t: >work-tree-only &&\n"> <"\tgit add work-tree-only &&\n"> <"\ttest_when_finished \"git rm -f work-tree-only\" &&\n"> <"\techo \"find in work tree\" >work-tree-only &&\n"> <"\tgit grep --quiet \"find in work tree\" &&\n"> <"\ttest_must_fail git grep --quiet --cached \"find in work tree\" &&\n"> <"\ttest_must_fail git grep --quiet \"find in work tree\" HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep can find things only in the work tree (i-t-a)">)} { (SQ <"\n"> <"\techo \"intend to add this\" >intend-to-add &&\n"> <"\tgit add -N intend-to-add &&\n"> <"\ttest_when_finished \"git rm -f intend-to-add\" &&\n"> <"\tgit grep --quiet \"intend to add this\" &&\n"> <"\ttest_must_fail git grep --quiet --cached \"intend to add this\" &&\n"> <"\ttest_must_fail git grep --quiet \"intend to add this\" HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep does not search work tree with assume unchanged">)} { (SQ <"\n"> <"\techo \"intend to add this\" >intend-to-add &&\n"> <"\tgit add -N intend-to-add &&\n"> <"\tgit update-index --assume-unchanged intend-to-add &&\n"> <"\ttest_when_finished \"git rm -f intend-to-add\" &&\n"> <"\ttest_must_fail git grep --quiet \"intend to add this\" &&\n"> <"\ttest_must_fail git grep --quiet --cached \"intend to add this\" &&\n"> <"\ttest_must_fail git grep --quiet \"intend to add this\" HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep can find things only in the index">)} { (SQ <"\n"> <"\techo \"only in the index\" >cache-this &&\n"> <"\tgit add cache-this &&\n"> <"\trm cache-this &&\n"> <"\ttest_when_finished \"git rm --cached cache-this\" &&\n"> <"\ttest_must_fail git grep --quiet \"only in the index\" &&\n"> <"\tgit grep --quiet --cached \"only in the index\" &&\n"> <"\ttest_must_fail git grep --quiet \"only in the index\" HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep does not report i-t-a with -L --cached">)} { (SQ <"\n"> <"\techo \"intend to add this\" >intend-to-add &&\n"> <"\tgit add -N intend-to-add &&\n"> <"\ttest_when_finished \"git rm -f intend-to-add\" &&\n"> <"\tgit ls-files | grep -v \"^intend-to-add\\$\" >expected &&\n"> <"\tgit grep -L --cached \"nonexistent_string\" >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"grep does not report i-t-a and assume unchanged with -L">)} { (SQ <"\n"> <"\techo \"intend to add this\" >intend-to-add-assume-unchanged &&\n"> <"\tgit add -N intend-to-add-assume-unchanged &&\n"> <"\ttest_when_finished \"git rm -f intend-to-add-assume-unchanged\" &&\n"> <"\tgit update-index --assume-unchanged intend-to-add-assume-unchanged &&\n"> <"\tgit ls-files | grep -v \"^intend-to-add-assume-unchanged\\$\" >expected &&\n"> <"\tgit grep -L \"nonexistent_string\" >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_done)}) ] )