(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"RCS merge replacement: merge-file">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(orig.txt)} spids:[16]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("Dominus regit me,\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [20] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(new1.txt)} spids:[34]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("Dominus regit me,\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam tu mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [38] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(new2.txt)} spids:[55]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("Dominus regit me, et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [59] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(new3.txt)} spids:[72]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("DOMINUS regit me,\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [76] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(new4.txt)} spids:[90]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("Dominus regit me, et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [94] ) ] ) (SimpleCommand words: [{(printf)} {(DQ ("propter nomen suum."))}] redirects: [(Redir op_id:Redir_DGreat fd:-1 arg_word:{(new4.txt)} spids:[109])] ) (C {(test_expect_success)} {(SQ <"merge with no changes">)} { (SQ <"\n"> <"\tcp orig.txt test.txt &&\n"> <"\tgit merge-file test.txt orig.txt orig.txt &&\n"> <"\ttest_cmp test.txt orig.txt\n"> ) } ) (C {(cp)} {(new1.txt)} {(test.txt)}) (C {(test_expect_success)} {(DQ ("merge without conflict"))} {(DQ ("git merge-file test.txt orig.txt new2.txt"))} ) (C {(test_expect_success)} {(SQ <"works in subdirectory">)} { (SQ <"\n"> <"\tmkdir dir &&\n"> <"\tcp new1.txt dir/a.txt &&\n"> <"\tcp orig.txt dir/o.txt &&\n"> <"\tcp new2.txt dir/b.txt &&\n"> <"\t( cd dir && git merge-file a.txt o.txt b.txt ) &&\n"> <"\ttest_path_is_missing a.txt\n"> ) } ) (C {(cp)} {(new1.txt)} {(test.txt)}) (C {(test_expect_success)} {(DQ ("merge without conflict (--quiet)"))} {(DQ ("git merge-file --quiet test.txt orig.txt new2.txt"))} ) (C {(cp)} {(new1.txt)} {(test2.txt)}) (C {(test_expect_failure)} {(DQ ("merge without conflict (missing LF at EOF)"))} {(DQ ("git merge-file test2.txt orig.txt new4.txt"))} ) (C {(test_expect_failure)} {(DQ ("merge result added missing LF"))} {(DQ ("test_cmp test.txt test2.txt"))} ) (C {(cp)} {(new4.txt)} {(test3.txt)}) (C {(test_expect_success)} {(DQ ("merge without conflict (missing LF at EOF, away from change in the other file)"))} {(DQ ("git merge-file --quiet test3.txt new2.txt new3.txt"))} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect.txt)} spids:[236]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("DOMINUS regit me,\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [240] ) ] ) (SimpleCommand words: [{(printf)} {(DQ ("propter nomen suum."))}] redirects: [(Redir op_id:Redir_DGreat fd:-1 arg_word:{(expect.txt)} spids:[256])] ) (C {(test_expect_success)} {(DQ ("merge does not add LF away of change"))} {(DQ ("test_cmp test3.txt expect.txt"))} ) (C {(cp)} {(test.txt)} {(backup.txt)}) (C {(test_expect_success)} {(DQ ("merge with conflicts"))} {(DQ ("test_must_fail git merge-file test.txt orig.txt new3.txt"))} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect.txt)} spids:[295]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("<<<<<<< test.txt\n") ("Dominus regit me, et nihil mihi deerit.\n") ("=======\n") ("DOMINUS regit me,\n") ("et nihil mihi deerit.\n") (">>>>>>> new3.txt\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam tu mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [299] ) ] ) (C {(test_expect_success)} {(DQ ("expected conflict markers"))} {(DQ ("test_cmp test.txt expect.txt"))} ) (C {(cp)} {(backup.txt)} {(test.txt)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect.txt)} spids:[338]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("Dominus regit me, et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam tu mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [342] ) ] ) (C {(test_expect_success)} {(DQ ("merge conflicting with --ours"))} {(DQ ("git merge-file --ours test.txt orig.txt new3.txt && test_cmp test.txt expect.txt"))} ) (C {(cp)} {(backup.txt)} {(test.txt)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect.txt)} spids:[376]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("DOMINUS regit me,\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam tu mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [380] ) ] ) (C {(test_expect_success)} {(DQ ("merge conflicting with --theirs"))} {(DQ ("git merge-file --theirs test.txt orig.txt new3.txt && test_cmp test.txt expect.txt"))} ) (C {(cp)} {(backup.txt)} {(test.txt)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect.txt)} spids:[415]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("Dominus regit me, et nihil mihi deerit.\n") ("DOMINUS regit me,\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam tu mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [419] ) ] ) (C {(test_expect_success)} {(DQ ("merge conflicting with --union"))} {(DQ ("git merge-file --union test.txt orig.txt new3.txt && test_cmp test.txt expect.txt"))} ) (C {(cp)} {(backup.txt)} {(test.txt)}) (C {(test_expect_success)} {(DQ ("merge with conflicts, using -L"))} {(DQ ("test_must_fail git merge-file -L 1 -L 2 test.txt orig.txt new3.txt"))} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect.txt)} spids:[468]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("<<<<<<< 1\n") ("Dominus regit me, et nihil mihi deerit.\n") ("=======\n") ("DOMINUS regit me,\n") ("et nihil mihi deerit.\n") (">>>>>>> new3.txt\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam tu mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [472] ) ] ) (C {(test_expect_success)} {(DQ ("expected conflict markers, with -L"))} {(DQ ("test_cmp test.txt expect.txt"))} ) (SimpleCommand words: [{(sed)} {(DQ ("s/ tu / TU /"))}] redirects: [ (Redir op_id:Redir_Less fd:-1 arg_word:{(new1.txt)} spids:[510]) (Redir op_id:Redir_Great fd:-1 arg_word:{(new5.txt)} spids:[514]) ] ) (C {(test_expect_success)} {(DQ ("conflict in removed tail"))} {(DQ ("test_must_fail git merge-file -p orig.txt new1.txt new5.txt > out"))} ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[533]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("Dominus regit me,\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("<<<<<<< orig.txt\n") ("=======\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam TU mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") (">>>>>>> new5.txt\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [537] ) ] ) (C {(test_expect_success)} {(DQ ("expected conflict markers"))} {(DQ ("test_cmp expect out"))}) (C {(test_expect_success)} {(SQ <"binary files cannot be merged">)} { (SQ <"\n"> <"\ttest_must_fail git merge-file -p \\\n"> <"\t\torig.txt \"$TEST_DIRECTORY\"/test-binary-1.png new1.txt 2> merge.err &&\n"> <"\tgrep \"Cannot merge binary files\" merge.err\n"> ) } ) (SimpleCommand words: [ {(sed)} {(-e)} {(DQ (s/deerit.) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("/deerit;/"))} {(-e)} {(DQ ("s/me;") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) (/me./))} ] redirects: [ (Redir op_id:Redir_Less fd:-1 arg_word:{(new5.txt)} spids:[598]) (Redir op_id:Redir_Great fd:-1 arg_word:{(new6.txt)} spids:[602]) ] ) (SimpleCommand words: [ {(sed)} {(-e)} {(DQ (s/deerit.) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("/deerit,/"))} {(-e)} {(DQ ("s/me;") (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("/me,/"))} ] redirects: [ (Redir op_id:Redir_Less fd:-1 arg_word:{(new5.txt)} spids:[624]) (Redir op_id:Redir_Great fd:-1 arg_word:{(new7.txt)} spids:[628]) ] ) (C {(test_expect_success)} {(SQ <"MERGE_ZEALOUS simplifies non-conflicts">)} { (SQ <"\n"> <"\n"> <"\ttest_must_fail git merge-file -p new6.txt new5.txt new7.txt > output &&\n"> <"\ttest 1 = $(grep ======= < output | wc -l)\n"> <"\n"> ) } ) (Pipeline children: [ (SimpleCommand words: [{(sed)} {(-e)} {(SQ <"s/deerit./&%%%%/">)} {(-e)} {(DQ ("s/locavit,/locavit;/"))}] redirects: [(Redir op_id:Redir_Less fd:-1 arg_word:{(new6.txt)} spids:[661])] ) (SimpleCommand words: [{(tr)} {(SQ <"%">)} {(SQ <"\\012">)}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(new8.txt)} spids:[677])] ) ] negated: False ) (Pipeline children: [ (SimpleCommand words: [{(sed)} {(-e)} {(SQ <"s/deerit./&%%%%/">)} {(-e)} {(DQ ("s/locavit,/locavit --/"))}] redirects: [(Redir op_id:Redir_Less fd:-1 arg_word:{(new7.txt)} spids:[695])] ) (SimpleCommand words: [{(tr)} {(SQ <"%">)} {(SQ <"\\012">)}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(new9.txt)} spids:[711])] ) ] negated: False ) (C {(test_expect_success)} {(SQ <ZEALOUS_ALNUM>)} { (SQ <"\n"> <"\n"> <"\ttest_must_fail git merge-file -p \\\n"> <"\t\tnew8.txt new5.txt new9.txt > merge.out &&\n"> <"\ttest 1 = $(grep ======= < merge.out | wc -l)\n"> <"\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[734]) (HereDoc op_id: Redir_DLess fd: -1 body: {("Dominus regit me,\n") ("<<<<<<< new8.txt\n") ("et nihil mihi deerit;\n") ("\n") ("\n") ("\n") ("\n") ("In loco pascuae ibi me collocavit;\n") ("super aquam refectionis educavit me.\n") ("||||||| new5.txt\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("=======\n") ("et nihil mihi deerit,\n") ("\n") ("\n") ("\n") ("\n") ("In loco pascuae ibi me collocavit --\n") ("super aquam refectionis educavit me,\n") (">>>>>>> new9.txt\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam TU mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") } do_expansion: False here_end: EOF was_filled: True spids: [737] ) ] ) (C {(test_expect_success)} {(SQ <"\"diff3 -m\" style output (1)">)} { (SQ <"\n"> <"\ttest_must_fail git merge-file -p --diff3 \\\n"> <"\t\tnew8.txt new5.txt new9.txt >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"\"diff3 -m\" style output (2)">)} { (SQ <"\n"> <"\tgit config merge.conflictstyle diff3 &&\n"> <"\ttest_must_fail git merge-file -p \\\n"> <"\t\tnew8.txt new5.txt new9.txt >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[773]) (HereDoc op_id: Redir_DLess fd: -1 body: {("Dominus regit me,\n") ("<<<<<<<<<< new8.txt\n") ("et nihil mihi deerit;\n") ("\n") ("\n") ("\n") ("\n") ("In loco pascuae ibi me collocavit;\n") ("super aquam refectionis educavit me.\n") ("|||||||||| new5.txt\n") ("et nihil mihi deerit.\n") ("In loco pascuae ibi me collocavit,\n") ("super aquam refectionis educavit me;\n") ("==========\n") ("et nihil mihi deerit,\n") ("\n") ("\n") ("\n") ("\n") ("In loco pascuae ibi me collocavit --\n") ("super aquam refectionis educavit me,\n") (">>>>>>>>>> new9.txt\n") ("animam meam convertit,\n") ("deduxit me super semitas jusitiae,\n") ("propter nomen suum.\n") ("Nam et si ambulavero in medio umbrae mortis,\n") ("non timebo mala, quoniam TU mecum es:\n") ("virga tua et baculus tuus ipsa me consolata sunt.\n") } do_expansion: False here_end: EOF was_filled: True spids: [776] ) ] ) (C {(test_expect_success)} {(SQ <"marker size">)} { (SQ <"\n"> <"\ttest_must_fail git merge-file -p --marker-size=10 \\\n"> <"\t\tnew8.txt new5.txt new9.txt >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (SimpleCommand words: [ {(printf)} { (DQ (line1) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (line2) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (line3) ) } ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(nolf-orig.txt)} spids:[805])] ) (SimpleCommand words: [ {(printf)} { (DQ (line1) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (line2) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (line3x) ) } ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(nolf-diff1.txt)} spids:[818])] ) (SimpleCommand words: [ {(printf)} { (DQ (line1) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (line2) (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) (line3y) ) } ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(nolf-diff2.txt)} spids:[831])] ) (C {(test_expect_success)} {(SQ <"conflict at EOF without LF resolved by --ours">)} { (SQ <"git merge-file -p --ours nolf-diff1.txt nolf-orig.txt nolf-diff2.txt >output.txt &&\n"> <"\t printf \"line1\\nline2\\nline3x\" >expect.txt &&\n"> <"\t test_cmp expect.txt output.txt"> ) } ) (C {(test_expect_success)} {(SQ <"conflict at EOF without LF resolved by --theirs">)} { (SQ < "git merge-file -p --theirs nolf-diff1.txt nolf-orig.txt nolf-diff2.txt >output.txt &&\n" > <"\t printf \"line1\\nline2\\nline3y\" >expect.txt &&\n"> <"\t test_cmp expect.txt output.txt"> ) } ) (C {(test_expect_success)} {(SQ <"conflict at EOF without LF resolved by --union">)} { (SQ < "git merge-file -p --union nolf-diff1.txt nolf-orig.txt nolf-diff2.txt >output.txt &&\n" > <"\t printf \"line1\\nline2\\nline3x\\nline3y\" >expect.txt &&\n"> <"\t test_cmp expect.txt output.txt"> ) } ) (C {(test_expect_success)} {(SQ <"conflict sections match existing line endings">)} { (SQ <"\n"> <"\tprintf \"1\\\\r\\\\n2\\\\r\\\\n3\" >crlf-orig.txt &&\n"> <"\tprintf \"1\\\\r\\\\n2\\\\r\\\\n4\" >crlf-diff1.txt &&\n"> <"\tprintf \"1\\\\r\\\\n2\\\\r\\\\n5\" >crlf-diff2.txt &&\n"> <"\ttest_must_fail git -c core.eol=crlf merge-file -p \\\n"> <"\t\tcrlf-diff1.txt crlf-orig.txt crlf-diff2.txt >crlf.txt &&\n"> <"\ttest $(tr \"\\015\" Q <crlf.txt | grep \"^[<=>].*Q$\" | wc -l) = 3 &&\n"> <"\ttest $(tr \"\\015\" Q <crlf.txt | grep \"[345]Q$\" | wc -l) = 3 &&\n"> <"\ttest_must_fail git -c core.eol=crlf merge-file -p \\\n"> <"\t\tnolf-diff1.txt nolf-orig.txt nolf-diff2.txt >nolf.txt &&\n"> <"\ttest $(tr \"\\015\" Q <nolf.txt | grep \"^[<=>].*Q$\" | wc -l) = 0\n"> ) } ) (C {(test_done)}) ] )