(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 porcelain-ish' span_id:6))} spids: [4] ) ] ) (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: [23] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:actual) op: assign_op.Equal rhs: {(commit_msg_is.actual)} spids: [27] ) ] ) (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:39) 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:57) fd: -1 arg_word: {($ 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:73) fd: -1 arg_word: {($ Id.VSub_DollarName '$expect')} ) ] ) (C {(test_i18ncmp)} {($ Id.VSub_DollarName '$expect')} {($ Id.VSub_DollarName '$actual')} ) ] ) ] ) ) (command.ShFunction name: check_summary_oneline body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test_tick)}) (command.Pipeline children: [ (C {(git)} {(commit)} { (braced_var_sub token: (Token id:Id.VSub_Number val:3 span_id:108) suffix_op: (suffix_op.Unary op_id: Id.VTest_Plus arg_word: {(DQ ($ Id.VSub_Number '$3'))} ) ) } {(-m)} {(DQ ($ Id.VSub_Number '$2'))} ) (command.Simple words: [{(head)} {(-1)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:127) fd: -1 arg_word: {(act)} ) ] ) ] negated: F ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUMMARY_PREFIX) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:141) command_list: (command.CommandList children: [(C {(git)} {(name-rev)} {(--name-only)} {(HEAD)})] ) ) ) } spids: [139] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_Number '$1'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUMMARY_PREFIX) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$SUMMARY_PREFIX') (' (') ($ Id.VSub_Number '$1') (')') ) } spids: [174] ) ] ) ] spids: [160 171] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUMMARY_POSTFIX) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:193) command_list: (command.CommandList children: [ (C {(git)} {(log)} {(-1)} {(--pretty) (Id.Lit_Equals '=') (SQ (Token id:Id.Lit_Chars val:'format:%h' span_id:203)) } ) ] ) ) ) } spids: [191] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(echo)} { (DQ ('[') ($ Id.VSub_DollarName '$SUMMARY_PREFIX') (' ') ($ Id.VSub_DollarName '$SUMMARY_POSTFIX') ('] ') ($ Id.VSub_Number '$2') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:220) fd: -1 arg_word: {(exp)} ) ] ) (C {(test_i18ncmp)} {(exp)} {(act)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'output summary format' span_id:239))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id:Id.Lit_Chars val:'\n' span_id:244) (Token id:Id.Lit_Chars val:'\techo new >file1 &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:246) (Token id: Id.Lit_Chars val: '\tcheck_summary_oneline "root-commit" "initial" &&\n' span_id: 247 ) (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id:Id.Lit_Chars val:'\techo change >>file1 &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\tgit add file1\n' span_id:250) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'output summary format: root-commit' span_id:257))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:261) (Token id:Id.Lit_Chars val:'\tcheck_summary_oneline "" "a change"\n' span_id:262) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'output summary format for commit with an empty diff' span_id: 269 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:273) (Token id:Id.Lit_Chars val:'\n' span_id:274) (Token id: Id.Lit_Chars val: '\tcheck_summary_oneline "" "empty" "--allow-empty"\n' span_id: 275 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'output summary format for merges' span_id:282))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:286) (Token id:Id.Lit_Chars val:'\n' span_id:287) (Token id:Id.Lit_Chars val:'\tgit checkout -b recursive-base &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\ttest_commit base file1 &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\n' span_id:290) (Token id:Id.Lit_Chars val:'\tgit checkout -b recursive-a recursive-base &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\ttest_commit commit-a file1 &&\n' span_id:292) (Token id:Id.Lit_Chars val:'\n' span_id:293) (Token id: Id.Lit_Chars val: '\tgit checkout -b recursive-b recursive-base &&\n' span_id: 294 ) (Token id:Id.Lit_Chars val:'\ttest_commit commit-b file1 &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\n' span_id:296) (Token id:Id.Lit_Chars val:'\t# conflict\n' span_id:297) (Token id:Id.Lit_Chars val:'\tgit checkout recursive-a &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge recursive-b &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\t# resolve the conflict\n' span_id:300) (Token id:Id.Lit_Chars val:'\techo commit-a > file1 &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\tcheck_summary_oneline "" "Merge"\n' span_id:303) ) } ) (command.ShFunction name: output_tests_cleanup body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(git)} {(checkout)} {(master)}) (C {(git)} {(rm)} {(file1)}) (C {(git)} {(commit)} {(-m)} {(DQ (cleanup))}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'the basics' span_id:357))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:361) (Token id:Id.Lit_Chars val:'\n' span_id:362) (Token id:Id.Lit_Chars val:'\toutput_tests_cleanup &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\n' span_id:364) (Token id:Id.Lit_Chars val:'\techo doing partial >"commit is" &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tmkdir not &&\n' span_id:366) (Token id: Id.Lit_Chars val: '\techo very much encouraged but we should >not/forbid &&\n' span_id: 367 ) (Token id:Id.Lit_Chars val:'\tgit add "commit is" not &&\n' span_id:368) (Token id: Id.Lit_Chars val: '\techo update added "commit is" file >"commit is" &&\n' span_id: 369 ) (Token id:Id.Lit_Chars val:'\techo also update another >not/forbid &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:371) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "initial with -a" &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\n' span_id:373) (Token id:Id.Lit_Chars val:'\tgit cat-file blob HEAD:"commit is" >current.1 &&\n' span_id:374) (Token id: Id.Lit_Chars val: '\tgit cat-file blob HEAD:not/forbid >current.2 &&\n' span_id: 375 ) (Token id:Id.Lit_Chars val:'\n' span_id:376) (Token id:Id.Lit_Chars val:'\tcmp current.1 "commit is" &&\n' span_id:377) (Token id:Id.Lit_Chars val:'\tcmp current.2 not/forbid\n' span_id:378) (Token id:Id.Lit_Chars val:'\n' span_id:379) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:partial span_id:386))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:390) (Token id:Id.Lit_Chars val:'\n' span_id:391) (Token id:Id.Lit_Chars val:'\techo another >"commit is" &&\n' span_id:392) (Token id:Id.Lit_Chars val:'\techo another >not/forbid &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:394) (Token id: Id.Lit_Chars val: '\tgit commit -m "partial commit to handle a file" "commit is" &&\n' span_id: 395 ) (Token id:Id.Lit_Chars val:'\n' span_id:396) (Token id: Id.Lit_Chars val: '\tchanged=$(git diff-tree --name-only HEAD^ HEAD) &&\n' span_id: 397 ) (Token id:Id.Lit_Chars val:'\ttest "$changed" = "commit is"\n' span_id:398) (Token id:Id.Lit_Chars val:'\n' span_id:399) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'partial modification in a subdirectory' span_id:406))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:410) (Token id:Id.Lit_Chars val:'\n' span_id:411) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:412) (Token id:Id.Lit_Chars val:'\tgit commit -m "partial commit to subdirectory" not &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\n' span_id:414) (Token id:Id.Lit_Chars val:'\tchanged=$(git diff-tree -r --name-only HEAD^ HEAD) &&\n' span_id:415) (Token id:Id.Lit_Chars val:'\ttest "$changed" = "not/forbid"\n' span_id:416) (Token id:Id.Lit_Chars val:'\n' span_id:417) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'partial removal' span_id:424))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:428) (Token id:Id.Lit_Chars val:'\n' span_id:429) (Token id:Id.Lit_Chars val:'\tgit rm not/forbid &&\n' span_id:430) (Token id: Id.Lit_Chars val: '\tgit commit -m "partial commit to remove not/forbid" not &&\n' span_id: 431 ) (Token id:Id.Lit_Chars val:'\n' span_id:432) (Token id: Id.Lit_Chars val: '\tchanged=$(git diff-tree -r --name-only HEAD^ HEAD) &&\n' span_id: 433 ) (Token id:Id.Lit_Chars val:'\ttest "$changed" = "not/forbid" &&\n' span_id:434) (Token id: Id.Lit_Chars val: '\tremain=$(git ls-tree -r --name-only HEAD) &&\n' span_id: 435 ) (Token id:Id.Lit_Chars val:'\ttest "$remain" = "commit is"\n' span_id:436) (Token id:Id.Lit_Chars val:'\n' span_id:437) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'sign off' span_id:444))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:448) (Token id:Id.Lit_Chars val:'\n' span_id:449) (Token id:Id.Lit_Chars val:'\t>positive &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\tgit add positive &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\tgit commit -s -m "thank you" &&\n' span_id:452) (Token id: Id.Lit_Chars val: '\tactual=$(git cat-file commit HEAD | sed -ne "s/Signed-off-by: //p") &&\n' span_id: 453 ) (Token id: Id.Lit_Chars val: '\texpected=$(git var GIT_COMMITTER_IDENT | sed -e "s/>.*/>/") &&\n' span_id: 454 ) (Token id:Id.Lit_Chars val:'\ttest "z$actual" = "z$expected"\n' span_id:455) (Token id:Id.Lit_Chars val:'\n' span_id:456) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'multiple -m' span_id:463))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:467) (Token id:Id.Lit_Chars val:'\n' span_id:468) (Token id:Id.Lit_Chars val:'\t>negative &&\n' span_id:469) (Token id:Id.Lit_Chars val:'\tgit add negative &&\n' span_id:470) (Token id: Id.Lit_Chars val: '\tgit commit -m "one" -m "two" -m "three" &&\n' span_id: 471 ) (Token id: Id.Lit_Chars val: '\tactual=$(git cat-file commit HEAD | sed -e "1,/^\\$/d") &&\n' span_id: 472 ) (Token id: Id.Lit_Chars val: '\texpected=$(echo one; echo; echo two; echo; echo three) &&\n' span_id: 473 ) (Token id:Id.Lit_Chars val:'\ttest "z$actual" = "z$expected"\n' span_id:474) (Token id:Id.Lit_Chars val:'\n' span_id:475) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:verbose span_id:482))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:486) (Token id:Id.Lit_Chars val:'\n' span_id:487) (Token id:Id.Lit_Chars val:'\techo minus >negative &&\n' span_id:488) (Token id:Id.Lit_Chars val:'\tgit add negative &&\n' span_id:489) (Token id: Id.Lit_Chars val: '\tgit status -v | sed -ne "/^diff --git /p" >actual &&\n' span_id: 490 ) (Token id:Id.Lit_Chars val:'\techo "diff --git a/negative b/negative" >expect &&\n' span_id:491) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:492) (Token id:Id.Lit_Chars val:'\n' span_id:493) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verbose respects diff config' span_id:500))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:504) (Token id:Id.Lit_Chars val:'\n' span_id:505) (Token id:Id.Lit_Chars val:'\ttest_config color.diff always &&\n' span_id:506) (Token id:Id.Lit_Chars val:'\tgit status -v >actual &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\tgrep "\\[1mdiff --git" actual\n' span_id:508) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:mesg_with_comment_and_newlines) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:514) (Token id:Id.Lit_Chars val:'# text\n' span_id:515) (Token id:Id.Lit_Chars val:'\n' span_id:516) ) } spids: [512] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'prepare file with comment line and trailing newlines' span_id: 523 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:527) (Token id: Id.Lit_Chars val: '\tprintf "%s" "$mesg_with_comment_and_newlines" >expect\n' span_id: 528 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit messages (verbatim option,-t)' span_id:535))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:539) (Token id:Id.Lit_Chars val:'\n' span_id:540) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:541) (Token id: Id.Lit_Chars val: '\tgit commit --cleanup=verbatim --no-status -t expect -a &&\n' span_id: 542 ) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD |sed -e "1,/^\\$/d" >actual &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:544) (Token id:Id.Lit_Chars val:'\n' span_id:545) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit messages (verbatim option,-F)' span_id:552))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:556) (Token id:Id.Lit_Chars val:'\n' span_id:557) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:558) (Token id:Id.Lit_Chars val:'\tgit commit --cleanup=verbatim -F expect -a &&\n' span_id:559) (Token id: Id.Lit_Chars val: '\tgit cat-file -p HEAD |sed -e "1,/^\\$/d">actual &&\n' span_id: 560 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:561) (Token id:Id.Lit_Chars val:'\n' span_id:562) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit messages (verbatim option,-m)' span_id:569))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:573) (Token id:Id.Lit_Chars val:'\n' span_id:574) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:575) (Token id: Id.Lit_Chars val: '\tgit commit --cleanup=verbatim -m "$mesg_with_comment_and_newlines" -a &&\n' span_id: 576 ) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD |sed -e "1,/^\\$/d">actual &&\n' span_id:577) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:578) (Token id:Id.Lit_Chars val:'\n' span_id:579) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit messages (whitespace option,-F)' span_id:586))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:590) (Token id:Id.Lit_Chars val:'\n' span_id:591) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:592) (Token id:Id.Lit_Chars val:'\t{ echo;echo "# text";echo; } >text &&\n' span_id:593) (Token id:Id.Lit_Chars val:'\techo "# text" >expect &&\n' span_id:594) (Token id:Id.Lit_Chars val:'\tgit commit --cleanup=whitespace -F text -a &&\n' span_id:595) (Token id: Id.Lit_Chars val: '\tgit cat-file -p HEAD |sed -e "1,/^\\$/d">actual &&\n' span_id: 596 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:597) (Token id:Id.Lit_Chars val:'\n' span_id:598) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit messages (scissors option,-F,-e)' span_id:605))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:609) (Token id:Id.Lit_Chars val:'\n' span_id:610) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:611) (Token id:Id.Lit_Chars val:'\tcat >text <<EOF &&\n' span_id:612) (Token id:Id.Lit_Chars val:'\n' span_id:613) (Token id:Id.Lit_Chars val:'# to be kept\n' span_id:614) (Token id:Id.Lit_Chars val:'\n' span_id:615) (Token id: Id.Lit_Chars val: ' # ------------------------ >8 ------------------------\n' span_id: 616 ) (Token id:Id.Lit_Chars val:'# to be kept, too\n' span_id:617) (Token id: Id.Lit_Chars val: '# ------------------------ >8 ------------------------\n' span_id: 618 ) (Token id:Id.Lit_Chars val:'to be removed\n' span_id:619) (Token id: Id.Lit_Chars val: '# ------------------------ >8 ------------------------\n' span_id: 620 ) (Token id:Id.Lit_Chars val:'to be removed, too\n' span_id:621) (Token id:Id.Lit_Chars val:'EOF\n' span_id:622) (Token id:Id.Lit_Chars val:'\n' span_id:623) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:624) (Token id:Id.Lit_Chars val:'# to be kept\n' span_id:625) (Token id:Id.Lit_Chars val:'\n' span_id:626) (Token id: Id.Lit_Chars val: ' # ------------------------ >8 ------------------------\n' span_id: 627 ) (Token id:Id.Lit_Chars val:'# to be kept, too\n' span_id:628) (Token id:Id.Lit_Chars val:'EOF\n' span_id:629) (Token id:Id.Lit_Chars val:'\tgit commit --cleanup=scissors -e -F text -a &&\n' span_id:630) (Token id: Id.Lit_Chars val: '\tgit cat-file -p HEAD |sed -e "1,/^\\$/d">actual &&\n' span_id: 631 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:632) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit messages (scissors option,-F,-e, scissors on first line)' span_id: 639 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:643) (Token id:Id.Lit_Chars val:'\n' span_id:644) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:645) (Token id:Id.Lit_Chars val:'\tcat >text <<EOF &&\n' span_id:646) (Token id: Id.Lit_Chars val: '# ------------------------ >8 ------------------------\n' span_id: 647 ) (Token id:Id.Lit_Chars val:'to be removed\n' span_id:648) (Token id:Id.Lit_Chars val:'EOF\n' span_id:649) (Token id: Id.Lit_Chars val: '\tgit commit --cleanup=scissors -e -F text -a --allow-empty-message &&\n' span_id: 650 ) (Token id:Id.Lit_Chars val:'\tgit cat-file -p HEAD |sed -e "1,/^\\$/d">actual &&\n' span_id:651) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty actual\n' span_id:652) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit messages (strip option,-F)' span_id:659))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:663) (Token id:Id.Lit_Chars val:'\n' span_id:664) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:665) (Token id:Id.Lit_Chars val:'\t{ echo;echo "# text";echo sample;echo; } >text &&\n' span_id:666) (Token id:Id.Lit_Chars val:'\techo sample >expect &&\n' span_id:667) (Token id:Id.Lit_Chars val:'\tgit commit --cleanup=strip -F text -a &&\n' span_id:668) (Token id: Id.Lit_Chars val: '\tgit cat-file -p HEAD |sed -e "1,/^\\$/d">actual &&\n' span_id: 669 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:670) (Token id:Id.Lit_Chars val:'\n' span_id:671) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit messages (strip option,-F,-e)' span_id:678))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:682) (Token id:Id.Lit_Chars val:'\n' span_id:683) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:684) (Token id:Id.Lit_Chars val:'\t{ echo;echo sample;echo; } >text &&\n' span_id:685) (Token id:Id.Lit_Chars val:'\tgit commit -e -F text -a &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\thead -n 4 .git/COMMIT_EDITMSG >actual\n' span_id:687) ) } ) (command.Simple words: [ {(echo)} { (DQ ('sample\n') ('\n') ('# Please enter the commit message for your changes. Lines starting\n') ("# with '#' will be ignored, and an empty message aborts the commit.") ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:700) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit messages (strip option,-F,-e): output' span_id: 707 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:711) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:712) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit message (fail on invalid cleanup mode option)' span_id: 719 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:723) (Token id: Id.Lit_Chars val: '\ttest_must_fail git commit --cleanup=non-existent\n' span_id: 724 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit message (fail on invalid cleanup mode configuration)' span_id: 731 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:735) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -c commit.cleanup=non-existent commit\n' span_id: 736 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit message (no config and no option uses default)' span_id: 743 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:747) (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:748) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:749) (Token id:Id.Lit_Chars val:'\t(\n' span_id:750) (Token id: Id.Lit_Chars val: '\t test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&\n' span_id: 751 ) (Token id:Id.Lit_Chars val:'\t git commit --no-status\n' span_id:752) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:753) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "commit message"\n' span_id:754) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit message (option overrides default)' span_id: 761 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:765) (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:766) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:767) (Token id:Id.Lit_Chars val:'\t(\n' span_id:768) (Token id: Id.Lit_Chars val: '\t test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&\n' span_id: 769 ) (Token id:Id.Lit_Chars val:'\t git commit --cleanup=whitespace --no-status\n' span_id:770) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:771) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "commit message # comment"\n' span_id:772) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit message (config overrides default)' span_id: 779 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:783) (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:784) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:785) (Token id:Id.Lit_Chars val:'\t(\n' span_id:786) (Token id: Id.Lit_Chars val: '\t test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&\n' span_id: 787 ) (Token id:Id.Lit_Chars val:'\t git -c commit.cleanup=whitespace commit --no-status\n' span_id:788) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:789) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "commit message # comment"\n' span_id:790) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cleanup commit message (option overrides config)' span_id: 797 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:801) (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:802) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:803) (Token id:Id.Lit_Chars val:'\t(\n' span_id:804) (Token id: Id.Lit_Chars val: '\t test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&\n' span_id: 805 ) (Token id: Id.Lit_Chars val: '\t git -c commit.cleanup=whitespace commit --cleanup=default\n' span_id: 806 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:807) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "commit message"\n' span_id:808) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit message (default, -m)' span_id:815))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:819) (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:820) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:821) (Token id: Id.Lit_Chars val: '\tgit commit -m "message #comment " &&\n' span_id: 822 ) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "message #comment"\n' span_id:823) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit message (whitespace option, -m)' span_id:830))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:834) (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:835) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:836) (Token id: Id.Lit_Chars val: '\tgit commit --cleanup=whitespace --no-status -m "message #comment " &&\n' span_id: 837 ) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "message #comment"\n' span_id:838) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup commit message (whitespace config, -m)' span_id:845))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:849) (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:850) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:851) (Token id: Id.Lit_Chars val: '\tgit -c commit.cleanup=whitespace commit --no-status -m "message #comment " &&\n' span_id: 852 ) (Token id:Id.Lit_Chars val:'\tcommit_msg_is "message #comment"\n' span_id:853) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'message shows author when it is not equal to committer' span_id: 860 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:864) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:865) (Token id:Id.Lit_Chars val:'\tgit commit -e -m "sample" -a &&\n' span_id:866) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep \\\n' span_id:867) (Token id:Id.Lit_Chars val:'\t "^# Author: *A U Thor <author@example.com>\\$" \\\n' span_id:868) (Token id:Id.Lit_Chars val:'\t .git/COMMIT_EDITMSG\n' span_id:869) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'message shows date when it is explicitly set' span_id:876))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:880) (Token id: Id.Lit_Chars val: '\tgit commit --allow-empty -e -m foo --date="2010-01-02T03:04:05" &&\n' span_id: 881 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep \\\n' span_id:882) (Token id: Id.Lit_Chars val: '\t "^# Date: *Sat Jan 2 03:04:05 2010 +0000" \\\n' span_id: 883 ) (Token id:Id.Lit_Chars val:'\t .git/COMMIT_EDITMSG\n' span_id:884) ) } ) (C {(test_expect_success)} {(AUTOIDENT)} {(SQ (Token id:Id.Lit_Chars val:'message shows committer when it is automatic' span_id:893))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:897) (Token id:Id.Lit_Chars val:'\n' span_id:898) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:899) (Token id:Id.Lit_Chars val:'\t(\n' span_id:900) (Token id:Id.Lit_Chars val:'\t\tsane_unset GIT_COMMITTER_EMAIL &&\n' span_id:901) (Token id:Id.Lit_Chars val:'\t\tsane_unset GIT_COMMITTER_NAME &&\n' span_id:902) (Token id:Id.Lit_Chars val:'\t\tgit commit -e -m "sample" -a\n' span_id:903) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:904) (Token id: Id.Lit_Chars val: '\t# the ident is calculated from the system, so we cannot\n' span_id: 905 ) (Token id:Id.Lit_Chars val:'\t# check the actual value, only that it is there\n' span_id:906) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "^# Committer: " .git/COMMIT_EDITMSG\n' span_id: 907 ) ) } ) (command.Simple words: [{(write_script)} {(.git/FAKE_EDITOR)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:915) fd: -1 here_begin: {(EOF)} here_end_span_id: 928 stdin_parts: [ ('echo editor started > ') (Id.Right_DoubleQuote '"') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:920) command_list: (command.CommandList children:[(C {(pwd)})]) ) (/.git/result) (Id.Right_DoubleQuote '"') ('\n') ('exit 0\n') ] ) ] ) (C {(test_expect_success)} {(Id.KW_Bang '!') (AUTOIDENT)} {(SQ (Token id:Id.Lit_Chars val:'do not fire editor when committer is bogus' span_id:936))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:940) (Token id:Id.Lit_Chars val:'\t>.git/result &&\n' span_id:941) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:942) (Token id:Id.Lit_Chars val:'\n' span_id:943) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:944) (Token id:Id.Lit_Chars val:'\t(\n' span_id:945) (Token id:Id.Lit_Chars val:'\t\tsane_unset GIT_COMMITTER_EMAIL &&\n' span_id:946) (Token id:Id.Lit_Chars val:'\t\tsane_unset GIT_COMMITTER_NAME &&\n' span_id:947) (Token id: Id.Lit_Chars val: '\t\tGIT_EDITOR="\\"$(pwd)/.git/FAKE_EDITOR\\"" &&\n' span_id: 948 ) (Token id:Id.Lit_Chars val:'\t\texport GIT_EDITOR &&\n' span_id:949) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git commit -e -m sample -a\n' span_id: 950 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:951) (Token id:Id.Lit_Chars val:'\ttest_cmp expect .git/result\n' span_id:952) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not fire editor if -m <msg> was given' span_id:959))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:963) (Token id:Id.Lit_Chars val:'\techo tick >file &&\n' span_id:964) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:965) (Token id: Id.Lit_Chars val: '\techo "editor not started" >.git/result &&\n' span_id: 966 ) (Token id: Id.Lit_Chars val: '\t(GIT_EDITOR="\\"$(pwd)/.git/FAKE_EDITOR\\"" git commit -m tick) &&\n' span_id: 967 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat .git/result)" = "editor not started"\n' span_id:968) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not fire editor if -m "" was given' span_id:975))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:979) (Token id:Id.Lit_Chars val:'\techo tock >file &&\n' span_id:980) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:981) (Token id: Id.Lit_Chars val: '\techo "editor not started" >.git/result &&\n' span_id: 982 ) (Token id:Id.Lit_Chars val:'\t(GIT_EDITOR="\\"$(pwd)/.git/FAKE_EDITOR\\"" \\\n' span_id:983) (Token id: Id.Lit_Chars val: '\t git commit -m "" --allow-empty-message) &&\n' span_id: 984 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat .git/result)" = "editor not started"\n' span_id:985) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not fire editor in the presence of conflicts' span_id:992))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:996) (Token id:Id.Lit_Chars val:'\n' span_id:997) (Token id:Id.Lit_Chars val:'\tgit clean -f &&\n' span_id:998) (Token id:Id.Lit_Chars val:'\techo f >g &&\n' span_id:999) (Token id:Id.Lit_Chars val:'\tgit add g &&\n' span_id:1000) (Token id:Id.Lit_Chars val:'\tgit commit -m "add g" &&\n' span_id:1001) (Token id:Id.Lit_Chars val:'\tgit branch second &&\n' span_id:1002) (Token id:Id.Lit_Chars val:'\techo master >g &&\n' span_id:1003) (Token id:Id.Lit_Chars val:'\techo g >h &&\n' span_id:1004) (Token id:Id.Lit_Chars val:'\tgit add g h &&\n' span_id:1005) (Token id: Id.Lit_Chars val: '\tgit commit -m "modify g and add h" &&\n' span_id: 1006 ) (Token id:Id.Lit_Chars val:'\tgit checkout second &&\n' span_id:1007) (Token id:Id.Lit_Chars val:'\techo second >g &&\n' span_id:1008) (Token id:Id.Lit_Chars val:'\tgit add g &&\n' span_id:1009) (Token id:Id.Lit_Chars val:'\tgit commit -m second &&\n' span_id:1010) (Token id:Id.Lit_Chars val:'\t# Must fail due to conflict\n' span_id:1011) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick -n master &&\n' span_id: 1012 ) (Token id:Id.Lit_Chars val:'\techo "editor not started" >.git/result &&\n' span_id:1013) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1014) (Token id:Id.Lit_Chars val:'\t\tGIT_EDITOR="\\"$(pwd)/.git/FAKE_EDITOR\\"" &&\n' span_id:1015) (Token id:Id.Lit_Chars val:'\t\texport GIT_EDITOR &&\n' span_id:1016) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git commit\n' span_id:1017) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1018) (Token id:Id.Lit_Chars val:'\ttest "$(cat .git/result)" = "editor not started"\n' span_id:1019) ) } ) (command.Simple words: [{(write_script)} {(.git/FAKE_EDITOR)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1027) fd: -1 here_begin: {(EOF)} here_end_span_id: 1032 stdin_parts: [('# kill -TERM command added below.\n')] ) ] ) (C {(test_expect_success)} {(EXECKEEPSPID)} {(SQ (Token id:Id.Lit_Chars val:'a SIGTERM should break locks' span_id:1039))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1043) (Token id:Id.Lit_Chars val:'\techo >>negative &&\n' span_id:1044) (Token id:Id.Lit_Chars val:'\t! "$SHELL_PATH" -c ' span_id:1045) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1047)) (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1049) (Token id: Id.Lit_Chars val: '\t echo kill -TERM $$ >> .git/FAKE_EDITOR\n' span_id: 1050 ) (Token id:Id.Lit_Chars val:'\t GIT_EDITOR=.git/FAKE_EDITOR\n' span_id:1051) (Token id:Id.Lit_Chars val:'\t export GIT_EDITOR\n' span_id:1052) (Token id:Id.Lit_Chars val:'\t exec git commit -a' span_id:1053) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1055)) (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:1057) (Token id:Id.Lit_Chars val:'\ttest ! -f .git/index.lock\n' span_id:1058) ) } ) (C {(rm)} {(-f)} {(.git/MERGE_MSG)} {(.git/COMMIT_EDITMSG)}) (C {(git)} {(reset)} {(-q)} {(--hard)}) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Hand committing of a redundant merge removes dups' span_id: 1082 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1086) (Token id:Id.Lit_Chars val:'\n' span_id:1087) (Token id:Id.Lit_Chars val:'\tgit rev-parse second master >expect &&\n' span_id:1088) (Token id: Id.Lit_Chars val: '\ttest_must_fail git merge second master &&\n' span_id: 1089 ) (Token id:Id.Lit_Chars val:'\tgit checkout master g &&\n' span_id:1090) (Token id:Id.Lit_Chars val:'\tEDITOR=: git commit -a &&\n' span_id:1091) (Token id: Id.Lit_Chars val: '\tgit cat-file commit HEAD | sed -n -e "s/^parent //p" -e "/^$/q" >actual &&\n' span_id: 1092 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1093) (Token id:Id.Lit_Chars val:'\n' span_id:1094) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'A single-liner subject with a token plus colon is not a footer' span_id: 1101 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1105) (Token id:Id.Lit_Chars val:'\n' span_id:1106) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1107) (Token id: Id.Lit_Chars val: '\tgit commit -s -m "hello: kitty" --allow-empty &&\n' span_id: 1108 ) (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD | sed -e "1,/^$/d" >actual &&\n' span_id:1109) (Token id:Id.Lit_Chars val:'\ttest_line_count = 3 actual\n' span_id:1110) (Token id:Id.Lit_Chars val:'\n' span_id:1111) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit -s places sob on third line after two empty lines' span_id: 1118 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1122) (Token id: Id.Lit_Chars val: '\tgit commit -s --allow-empty --allow-empty-message &&\n' span_id: 1123 ) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expect &&\n' span_id:1124) (Token id:Id.Lit_Chars val:'\n' span_id:1125) (Token id:Id.Lit_Chars val:'\n' span_id:1126) (Token id: Id.Lit_Chars val: '\tSigned-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>\n' span_id: 1127 ) (Token id:Id.Lit_Chars val:'\n' span_id:1128) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1129) (Token id: Id.Lit_Chars val: '\tsed -e "/^#/d" -e "s/^:.*//" .git/COMMIT_EDITMSG >actual &&\n' span_id: 1130 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1131) ) } ) (command.Simple words: [{(write_script)} {(.git/FAKE_EDITOR)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1139) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1140)) (OF) } here_end_span_id: 1148 stdin_parts: [ ('mv "$1" "$1.orig"\n') ('(\n') ('\techo message\n') ('\tcat "$1.orig"\n') (') >"$1"\n') ] ) ] ) (command.Simple words: [{(echo)} {(SQ (Token id:Id.Lit_Chars val:'## Custom template' span_id:1153))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1156) fd: -1 arg_word: {(template)} ) ] ) (command.ShFunction name: try_commit body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(git)} {(reset)} {(--hard)}) (command.Simple words: [{(echo)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1179) fd: -1 arg_word: {(negative)} ) ] ) (command.Simple words: [ {(git)} {(commit)} {(-a)} {($ Id.VSub_Star '$*')} {($ Id.VSub_DollarName '$use_template')} ] more_env: [(env_pair name:GIT_EDITOR val:{(.git/FAKE_EDITOR)} spids:[1185])] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$use_template'))} arms: [ (case_arm pat_list: [{(SQ )}] action: [ (C {(test_i18ngrep)} {(Id.KW_Bang '!')} {(DQ ('^## Custom template'))} {(.git/COMMIT_EDITMSG)} ) ] spids: [1210 1212 1225 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (C {(test_i18ngrep)} {(DQ ('^## Custom template'))} {(.git/COMMIT_EDITMSG)}) ] spids: [1228 1229 1240 -1] ) ] ) ] ) ] ) ) (command.ShFunction name: try_commit_status_combo body: (command.BraceGroup children: [ (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:commit span_id:1260))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1264) (Token id:Id.Lit_Chars val:'\t\ttry_commit "" &&\n' span_id:1265) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1266 ) (Token id:Id.Lit_Chars val:'\t' span_id:1267) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --status' span_id:1275))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1279) (Token id: Id.Lit_Chars val: '\t\ttry_commit --status &&\n' span_id: 1280 ) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1281 ) (Token id:Id.Lit_Chars val:'\t' span_id:1282) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --no-status' span_id:1290))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1294) (Token id: Id.Lit_Chars val: '\t\ttry_commit --no-status &&\n' span_id: 1295 ) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1296 ) (Token id:Id.Lit_Chars val:'\t' span_id:1297) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit with commit.status = yes' span_id:1305))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1309) (Token id: Id.Lit_Chars val: '\t\ttest_config commit.status yes &&\n' span_id: 1310 ) (Token id:Id.Lit_Chars val:'\t\ttry_commit "" &&\n' span_id:1311) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1312 ) (Token id:Id.Lit_Chars val:'\t' span_id:1313) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit with commit.status = no' span_id:1321))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1325) (Token id: Id.Lit_Chars val: '\t\ttest_config commit.status no &&\n' span_id: 1326 ) (Token id:Id.Lit_Chars val:'\t\ttry_commit "" &&\n' span_id:1327) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1328 ) (Token id:Id.Lit_Chars val:'\t' span_id:1329) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit --status with commit.status = yes' span_id: 1337 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1341) (Token id: Id.Lit_Chars val: '\t\ttest_config commit.status yes &&\n' span_id: 1342 ) (Token id:Id.Lit_Chars val:'\t\ttry_commit --status &&\n' span_id:1343) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1344 ) (Token id:Id.Lit_Chars val:'\t' span_id:1345) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit --no-status with commit.status = yes' span_id: 1353 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1357) (Token id: Id.Lit_Chars val: '\t\ttest_config commit.status yes &&\n' span_id: 1358 ) (Token id:Id.Lit_Chars val:'\t\ttry_commit --no-status &&\n' span_id:1359) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1360 ) (Token id:Id.Lit_Chars val:'\t' span_id:1361) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit --status with commit.status = no' span_id: 1369 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1373) (Token id: Id.Lit_Chars val: '\t\ttest_config commit.status no &&\n' span_id: 1374 ) (Token id:Id.Lit_Chars val:'\t\ttry_commit --status &&\n' span_id:1375) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1376 ) (Token id:Id.Lit_Chars val:'\t' span_id:1377) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit --no-status with commit.status = no' span_id: 1385 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1389) (Token id: Id.Lit_Chars val: '\t\ttest_config commit.status no &&\n' span_id: 1390 ) (Token id:Id.Lit_Chars val:'\t\ttry_commit --no-status &&\n' span_id:1391) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1392 ) (Token id:Id.Lit_Chars val:'\t' span_id:1393) ) } ) ] ) ) (C {(try_commit_status_combo)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:use_template) op: assign_op.Equal rhs: {(DQ ('-t template'))} spids: [1403] ) ] ) (C {(try_commit_status_combo)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --status with custom comment character' span_id:1415))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1419) (Token id: Id.Lit_Chars val: '\ttest_config core.commentchar ";" &&\n' span_id: 1420 ) (Token id:Id.Lit_Chars val:'\ttry_commit --status &&\n' span_id:1421) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "^; Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1422 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'switch core.commentchar' span_id:1429))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1433) (Token id:Id.Lit_Chars val:'\ttest_commit "#foo" foo &&\n' span_id:1434) (Token id: Id.Lit_Chars val: '\tGIT_EDITOR=.git/FAKE_EDITOR git -c core.commentChar=auto commit --amend &&\n' span_id: 1435 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "^; Changes to be committed:" .git/COMMIT_EDITMSG\n' span_id: 1436 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'switch core.commentchar but out of options' span_id:1443))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1447) (Token id:Id.Lit_Chars val:'\tcat >text <<\\EOF &&\n' span_id:1448) (Token id:Id.Lit_Chars val:'# 1\n' span_id:1449) (Token id:Id.Lit_Chars val:'; 2\n' span_id:1450) (Token id:Id.Lit_Chars val:'@ 3\n' span_id:1451) (Token id:Id.Lit_Chars val:'! 4\n' span_id:1452) (Token id:Id.Lit_Chars val:'$ 5\n' span_id:1453) (Token id:Id.Lit_Chars val:'% 6\n' span_id:1454) (Token id:Id.Lit_Chars val:'^ 7\n' span_id:1455) (Token id:Id.Lit_Chars val:'& 8\n' span_id:1456) (Token id:Id.Lit_Chars val:'| 9\n' span_id:1457) (Token id:Id.Lit_Chars val:': 10\n' span_id:1458) (Token id:Id.Lit_Chars val:'EOF\n' span_id:1459) (Token id:Id.Lit_Chars val:'\tgit commit --amend -F text &&\n' span_id:1460) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1461) (Token id: Id.Lit_Chars val: '\t\ttest_set_editor .git/FAKE_EDITOR &&\n' span_id: 1462 ) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git -c core.commentChar=auto commit --amend\n' span_id: 1463 ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1464) ) } ) (C {(test_done)}) ] )