(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:'git commit\n' span_id:15) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'Tests for selected commit options.' span_id:17) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: commit_msg_is body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {(commit_msg_is.expect)} spids: [34] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:actual) op: assign_op.Equal rhs: {(commit_msg_is.actual)} spids: [38] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} {(DQ ('%s'))} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:50) command_list: (command.CommandList children: [ (C {(git)} {(log)} {(--pretty) (Id.Lit_Equals '=') (format) (Id.Lit_Other ':') (Id.Lit_Other '%') (s) (Id.Lit_Other '%') (b) } {(-1)} ) ] ) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:68) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$actual'))} ) ] ) (command.Simple words: [{(printf)} {(DQ ('%s'))} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:86) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$expect'))} ) ] ) (C {(test_i18ncmp)} {(DQ ($ Id.VSub_DollarName '$expect'))} {(DQ ($ Id.VSub_DollarName '$actual'))} ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'a basic commit in an empty tree should succeed' span_id:113))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:117) (Token id:Id.Lit_Chars val:'\techo content > foo &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit commit -m "initial commit"\n' span_id:120) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'nonexistent template file should return error' span_id:127))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:131) (Token id:Id.Lit_Chars val:'\techo changes >> foo &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\t(\n' span_id:134) (Token id:Id.Lit_Chars val:'\t\tGIT_EDITOR="echo hello >\\"\\$1\\"" &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\t\texport GIT_EDITOR &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git commit --template "$PWD"/notexist\n' span_id:137) (Token id:Id.Lit_Chars val:'\t)\n' span_id:138) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'nonexistent template file in config should return error' span_id: 145 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) (Token id: Id.Lit_Chars val: '\ttest_config commit.template "$PWD"/notexist &&\n' span_id: 150 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:151) (Token id: Id.Lit_Chars val: '\t\tGIT_EDITOR="echo hello >\\"\\$1\\"" &&\n' span_id: 152 ) (Token id:Id.Lit_Chars val:'\t\texport GIT_EDITOR &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git commit\n' span_id:154) (Token id:Id.Lit_Chars val:'\t)\n' span_id:155) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEMPLATE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$PWD')) (/template)} spids: [162] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unedited template should not commit' span_id:172))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:176) (Token id: Id.Lit_Chars val: '\techo "template line" > "$TEMPLATE" &&\n' span_id: 177 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit --template "$TEMPLATE"\n' span_id:178) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'unedited template with comments should not commit' span_id: 185 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:189) (Token id: Id.Lit_Chars val: '\techo "# comment in template" >> "$TEMPLATE" &&\n' span_id: 190 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit --template "$TEMPLATE"\n' span_id:191) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'a Signed-off-by line by itself should not commit' span_id: 198 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:202) (Token id:Id.Lit_Chars val:'\t(\n' span_id:203) (Token id: Id.Lit_Chars val: '\t\ttest_set_editor "$TEST_DIRECTORY"/t7500/add-signed-off &&\n' span_id: 204 ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git commit --template "$TEMPLATE"\n' span_id:205) (Token id:Id.Lit_Chars val:'\t)\n' span_id:206) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'adding comments to a template should not commit' span_id:213))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) (Token id:Id.Lit_Chars val:'\t(\n' span_id:218) (Token id: Id.Lit_Chars val: '\t\ttest_set_editor "$TEST_DIRECTORY"/t7500/add-comments &&\n' span_id: 219 ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git commit --template "$TEMPLATE"\n' span_id:220) (Token id:Id.Lit_Chars val:'\t)\n' span_id:221) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'adding real content to a template should commit' span_id:228))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:232) (Token id:Id.Lit_Chars val:'\t(\n' span_id:233) (Token id: Id.Lit_Chars val: '\t\ttest_set_editor "$TEST_DIRECTORY"/t7500/add-content &&\n' span_id: 234 ) (Token id:Id.Lit_Chars val:'\t\tgit commit --template "$TEMPLATE"\n' span_id:235) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:236) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "template linecommit message"\n' span_id:237) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'-t option should be short for --template' span_id:244))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id: Id.Lit_Chars val: '\techo "short template" > "$TEMPLATE" &&\n' span_id: 249 ) (Token id:Id.Lit_Chars val:'\techo "new content" >> foo &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\t(\n' span_id:252) (Token id: Id.Lit_Chars val: '\t\ttest_set_editor "$TEST_DIRECTORY"/t7500/add-content &&\n' span_id: 253 ) (Token id:Id.Lit_Chars val:'\t\tgit commit -t "$TEMPLATE"\n' span_id:254) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "short templatecommit message"\n' span_id:256) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'config-specified template should commit' span_id:263))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:267) (Token id: Id.Lit_Chars val: '\techo "new template" > "$TEMPLATE" &&\n' span_id: 268 ) (Token id:Id.Lit_Chars val:'\ttest_config commit.template "$TEMPLATE" &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\techo "more content" >> foo &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\t(\n' span_id:272) (Token id: Id.Lit_Chars val: '\t\ttest_set_editor "$TEST_DIRECTORY"/t7500/add-content &&\n' span_id: 273 ) (Token id:Id.Lit_Chars val:'\t\tgit commit\n' span_id:274) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "new templatecommit message"\n' span_id:276) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'explicit commit message should override template' span_id: 283 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:287) (Token id:Id.Lit_Chars val:'\techo "still more content" >> foo &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:289) (Token id: Id.Lit_Chars val: '\tGIT_EDITOR="$TEST_DIRECTORY"/t7500/add-content git commit --template "$TEMPLATE" \\\n' span_id: 290 ) (Token id:Id.Lit_Chars val:'\t\t-m "command line msg" &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "command line msg"\n' span_id:292) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit message from file should override template' span_id: 299 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:303) (Token id:Id.Lit_Chars val:'\techo "content galore" >> foo &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:305) (Token id:Id.Lit_Chars val:'\techo "standard input msg" |\n' span_id:306) (Token id:Id.Lit_Chars val:'\t(\n' span_id:307) (Token id: Id.Lit_Chars val: '\t\ttest_set_editor "$TEST_DIRECTORY"/t7500/add-content &&\n' span_id: 308 ) (Token id:Id.Lit_Chars val:'\t\tgit commit --template "$TEMPLATE" --file -\n' span_id:309) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:310) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "standard input msg"\n' span_id:311) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:317) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$TEMPLATE'))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:322) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:323)) (OF) } here_end_span_id: 330 stdin_parts: [('\n') ('\n') ('### template\n') ('\n')] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit message from template with whitespace issue' span_id: 334 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:338) (Token id:Id.Lit_Chars val:'\techo "content galore" >>foo &&\n' span_id:339) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:340) (Token id: Id.Lit_Chars val: '\tGIT_EDITOR="$TEST_DIRECTORY"/t7500/add-whitespaced-content git commit \\\n' span_id: 341 ) (Token id:Id.Lit_Chars val:'\t\t--template "$TEMPLATE" &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "commit message"\n' span_id:343) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'using alternate GIT_INDEX_FILE (1)' span_id:350))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:354) (Token id:Id.Lit_Chars val:'\n' span_id:355) (Token id:Id.Lit_Chars val:'\tcp .git/index saved-index &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\t(\n' span_id:357) (Token id:Id.Lit_Chars val:'\t\techo some new content >file &&\n' span_id:358) (Token id:Id.Lit_Chars val:'\t GIT_INDEX_FILE=.git/another_index &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\t\texport GIT_INDEX_FILE &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\t\tgit add file &&\n' span_id:361) (Token id: Id.Lit_Chars val: '\t\tgit commit -m "commit using another index" &&\n' span_id: 362 ) (Token id:Id.Lit_Chars val:'\t\tgit diff-index --exit-code HEAD &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\t\tgit diff-files --exit-code\n' span_id:364) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:365) (Token id: Id.Lit_Chars val: '\tcmp .git/index saved-index >/dev/null\n' span_id: 366 ) (Token id:Id.Lit_Chars val:'\n' span_id:367) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'using alternate GIT_INDEX_FILE (2)' span_id:374))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:378) (Token id:Id.Lit_Chars val:'\n' span_id:379) (Token id:Id.Lit_Chars val:'\tcp .git/index saved-index &&\n' span_id:380) (Token id:Id.Lit_Chars val:'\t(\n' span_id:381) (Token id:Id.Lit_Chars val:'\t\trm -f .git/no-such-index &&\n' span_id:382) (Token id:Id.Lit_Chars val:'\t\tGIT_INDEX_FILE=.git/no-such-index &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\t\texport GIT_INDEX_FILE &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "commit using nonexistent index" &&\n' span_id:385) (Token id:Id.Lit_Chars val:'\t\ttest -z "$(git ls-files)" &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\t\ttest -z "$(git ls-tree HEAD)"\n' span_id:387) (Token id:Id.Lit_Chars val:'\n' span_id:388) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:389) (Token id: Id.Lit_Chars val: '\tcmp .git/index saved-index >/dev/null\n' span_id: 390 ) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:396) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:400) fd: -1 here_begin: {(EOF)} here_end_span_id: 408 stdin_parts: [('zort\n') ('\n') ('Signed-off-by: C O Mitter <committer@example.com>\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--signoff span_id:413))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:417) (Token id: Id.Lit_Chars val: '\techo "yet another content *narf*" >> foo &&\n' span_id: 418 ) (Token id:Id.Lit_Chars val:'\techo "zort" | git commit -s -F - foo &&\n' span_id:419) (Token id: Id.Lit_Chars val: '\tgit cat-file commit HEAD | sed "1,/^\\$/d" > output &&\n' span_id: 420 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect output\n' span_id:421) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit message from file (1)' span_id:428))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:432) (Token id:Id.Lit_Chars val:'\tmkdir subdir &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\techo "Log in top directory" >log &&\n' span_id:434) (Token id: Id.Lit_Chars val: '\techo "Log in sub directory" >subdir/log &&\n' span_id: 435 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:436) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:437) (Token id:Id.Lit_Chars val:'\t\tgit commit --allow-empty -F log\n' span_id:438) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:439) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "Log in sub directory"\n' span_id:440) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit message from file (2)' span_id:447))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:451) (Token id:Id.Lit_Chars val:'\trm -f log &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\techo "Log in sub directory" >subdir/log &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\t(\n' span_id:454) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\t\tgit commit --allow-empty -F log\n' span_id:456) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:457) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "Log in sub directory"\n' span_id: 458 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit message from stdin' span_id:465))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:469) (Token id:Id.Lit_Chars val:'\t(\n' span_id:470) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:471) (Token id: Id.Lit_Chars val: '\t\techo "Log with foo word" | git commit --allow-empty -F -\n' span_id: 472 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "Log with foo word"\n' span_id:474) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit -F overrides -t' span_id:481))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:485) (Token id:Id.Lit_Chars val:'\t(\n' span_id:486) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:487) (Token id:Id.Lit_Chars val:'\t\techo "-F log" > f.log &&\n' span_id:488) (Token id:Id.Lit_Chars val:'\t\techo "-t template" > t.template &&\n' span_id:489) (Token id: Id.Lit_Chars val: '\t\tgit commit --allow-empty -F f.log -t t.template\n' span_id: 490 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:491) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "-F log"\n' span_id:492) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Commit without message is allowed with --allow-empty-message' span_id: 499 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:503) (Token id:Id.Lit_Chars val:'\techo "more content" >>foo &&\n' span_id:504) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:505) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:506) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty-message <empty &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "" &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\tgit tag empty-message-commit\n' span_id:509) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Commit without message is no-no without --allow-empty-message' span_id: 516 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:520) (Token id:Id.Lit_Chars val:'\techo "more content" >>foo &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:522) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:523) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit <empty\n' span_id:524) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Commit a message with --allow-empty-message' span_id:531))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:535) (Token id:Id.Lit_Chars val:'\techo "even more content" >>foo &&\n' span_id:536) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:537) (Token id: Id.Lit_Chars val: '\tgit commit --allow-empty-message -m"hello there" &&\n' span_id: 538 ) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "hello there"\n' span_id:539) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit -C empty respects --allow-empty-message' span_id:546))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:550) (Token id:Id.Lit_Chars val:'\techo more >>foo &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:552) (Token id: Id.Lit_Chars val: '\ttest_must_fail git commit -C empty-message-commit &&\n' span_id: 553 ) (Token id: Id.Lit_Chars val: '\tgit commit -C empty-message-commit --allow-empty-message &&\n' span_id: 554 ) (Token id:Id.Lit_Chars val:'\tcommit_msg_is ""\n' span_id:555) ) } ) (command.ShFunction name: commit_for_rebase_autosquash_setup body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [{(echo)} {(DQ ('first content line'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:573) fd: -1 arg_word: {(foo)} ) ] ) (C {(git)} {(add)} {(foo)}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:590) fd: -1 arg_word: {(log)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:593) fd: -1 here_begin: {(EOF)} here_end_span_id: 603 stdin_parts: [ ('target message subject line\n') ('\n') ('target message body line 1\n') ('target message body line 2\n') ] ) ] ) (C {(git)} {(commit)} {(-F)} {(log)}) (command.Simple words: [{(echo)} {(DQ ('second content line'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:622) fd: -1 arg_word: {(foo)} ) ] ) (C {(git)} {(add)} {(foo)}) (C {(git)} {(commit)} {(-m)} {(DQ ('intermediate commit'))}) (command.Simple words: [{(echo)} {(DQ ('third content line'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:656) fd: -1 arg_word: {(foo)} ) ] ) (C {(git)} {(add)} {(foo)}) ] ) ] ) ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit --fixup provides correct one-line commit message' span_id: 674 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:678) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 679 ) (Token id:Id.Lit_Chars val:'\tgit commit --fixup HEAD~1 &&\n' span_id:680) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "fixup! target message subject line"\n' span_id: 681 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --squash works with -F' span_id:688))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:692) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 693 ) (Token id:Id.Lit_Chars val:'\techo "log message from file" >msgfile &&\n' span_id:694) (Token id: Id.Lit_Chars val: '\tgit commit --squash HEAD~1 -F msgfile &&\n' span_id: 695 ) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "squash! target message subject linelog message from file"\n' span_id: 696 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --squash works with -m' span_id:703))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:707) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 708 ) (Token id:Id.Lit_Chars val:'\tgit commit --squash HEAD~1 -m "foo bar\\nbaz" &&\n' span_id:709) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "squash! target message subject linefoo bar\\nbaz"\n' span_id: 710 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --squash works with -C' span_id:717))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:721) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 722 ) (Token id:Id.Lit_Chars val:'\tgit commit --squash HEAD~1 -C HEAD &&\n' span_id:723) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "squash! target message subject lineintermediate commit"\n' span_id: 724 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --squash works with -c' span_id:731))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:735) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 736 ) (Token id:Id.Lit_Chars val:'\ttest_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&\n' span_id:737) (Token id: Id.Lit_Chars val: '\tgit commit --squash HEAD~1 -c HEAD &&\n' span_id: 738 ) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "squash! target message subject lineedited commit"\n' span_id: 739 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --squash works with -C for same commit' span_id:746))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:750) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 751 ) (Token id:Id.Lit_Chars val:'\tgit commit --squash HEAD -C HEAD &&\n' span_id:752) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "squash! intermediate commit"\n' span_id: 753 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --squash works with -c for same commit' span_id:760))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:764) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 765 ) (Token id:Id.Lit_Chars val:'\ttest_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&\n' span_id:766) (Token id:Id.Lit_Chars val:'\tgit commit --squash HEAD -c HEAD &&\n' span_id:767) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "squash! edited commit"\n' span_id:768) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --squash works with editor' span_id:775))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:779) (Token id: Id.Lit_Chars val: '\tcommit_for_rebase_autosquash_setup &&\n' span_id: 780 ) (Token id:Id.Lit_Chars val:'\ttest_set_editor "$TEST_DIRECTORY"/t7500/add-content &&\n' span_id:781) (Token id:Id.Lit_Chars val:'\tgit commit --squash HEAD~1 &&\n' span_id:782) (Token id: Id.Lit_Chars val: '\tcommit_msg_is "squash! target message subject linecommit message"\n' span_id: 783 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'invalid message options when using --fixup' span_id:790))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:794) (Token id:Id.Lit_Chars val:'\techo changes >>foo &&\n' span_id:795) (Token id:Id.Lit_Chars val:'\techo "message" >log &&\n' span_id:796) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:797) (Token id: Id.Lit_Chars val: '\ttest_must_fail git commit --fixup HEAD~1 --squash HEAD~2 &&\n' span_id: 798 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit --fixup HEAD~1 -C HEAD~2 &&\n' span_id:799) (Token id: Id.Lit_Chars val: '\ttest_must_fail git commit --fixup HEAD~1 -c HEAD~2 &&\n' span_id: 800 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git commit --fixup HEAD~1 -m "cmdline message" &&\n' span_id: 801 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit --fixup HEAD~1 -F log\n' span_id:802) ) } ) (C {(test_done)}) ] )