(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_EDITOR, core.editor, and stuff' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(unset)} {(EDITOR)} {(VISUAL)} {(GIT_EDITOR)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'determine default editor' span_id:27))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:31) (Token id:Id.Lit_Chars val:'\n' span_id:32) (Token id: Id.Lit_Chars val: '\tvi=$(TERM=vt100 git var GIT_EDITOR) &&\n' span_id: 33 ) (Token id:Id.Lit_Chars val:'\ttest -n "$vi"\n' span_id:34) (Token id:Id.Lit_Chars val:'\n' span_id:35) ) } ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (command.Simple words: [ {(expr)} {(DQ ($ Id.VSub_DollarName '$vi'))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'[a-z]*$' span_id:52))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:55) fd: -1 arg_word: {(/dev/null)} ) ] ) ] negated: T ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:vi) op: assign_op.Equal rhs: (word.Empty) spids: [61] ) ] ) ] spids: [39 58] ) ] ) (command.ForEach iter_name: i iter_words: [{(GIT_EDITOR)} {(core_editor)} {(EDITOR)} {(VISUAL)} {($ Id.VSub_DollarName '$vi')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:87) fd: -1 arg_word: {(e-) ($ Id.VSub_DollarName '$i') (.sh)} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:92) fd: -1 here_begin: {(EOF)} here_end_span_id: 110 stdin_parts: [ ('#!') ($ Id.VSub_DollarName '$SHELL_PATH') ('\n') ('echo ') (Id.Right_DoubleQuote '"') ('Edited by ') ($ Id.VSub_DollarName '$i') (Id.Right_DoubleQuote '"') (' >') (Id.Right_DoubleQuote '"') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:105) ) (1) (Id.Right_DoubleQuote '"') ('\n') ] ) ] ) (C {(chmod)} {(Id.Lit_Other '+') (x)} {(e-) ($ Id.VSub_DollarName '$i') (.sh)}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$vi'))})] negated: T ) ] action: [(C {(mv)} {(e-) ($ Id.VSub_DollarName '$vi') (.sh)} {($ Id.VSub_DollarName '$vi')})] spids: [124 136] ) ] ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:155) (Token id:Id.Lit_Chars val:'\n' span_id:156) (Token id:Id.Lit_Chars val:'\tmsg="Hand-edited" &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\ttest_commit "$msg" &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\techo "$msg" >expect &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgit show -s --format=%s > actual &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:161) (Token id:Id.Lit_Chars val:'\n' span_id:162) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM) op: assign_op.Equal rhs: {(dumb)} spids: [166] ) ] ) (C {(export)} {(TERM)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'dumb should error out when falling back on vi' span_id:176))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) (Token id:Id.Lit_Chars val:'\n' span_id:181) (Token id:Id.Lit_Chars val:'\tif git commit --amend\n' span_id:182) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:183) (Token id:Id.Lit_Chars val:'\t\techo "Oops?"\n' span_id:184) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:185) (Token id:Id.Lit_Chars val:'\telse\n' span_id:186) (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:187) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:188) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'dumb should prefer EDITOR to VISUAL' span_id:195))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) (Token id:Id.Lit_Chars val:'\n' span_id:200) (Token id:Id.Lit_Chars val:'\tEDITOR=./e-EDITOR.sh &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\tVISUAL=./e-VISUAL.sh &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\texport EDITOR VISUAL &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\tgit commit --amend &&\n' span_id:204) (Token id: Id.Lit_Chars val: '\ttest "$(git show -s --format=%s)" = "Edited by EDITOR"\n' span_id: 205 ) (Token id:Id.Lit_Chars val:'\n' span_id:206) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TERM) op: assign_op.Equal rhs: {(vt100)} spids: [210] ) ] ) (C {(export)} {(TERM)}) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$vi')} {(EDITOR)} {(VISUAL)} {(core_editor)} {(GIT_EDITOR)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{(echo)} {(DQ ('Edited by ') ($ Id.VSub_DollarName '$i'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:243) fd: -1 arg_word: {(expect)} ) ] ) (C {(unset)} {(EDITOR)} {(VISUAL)} {(GIT_EDITOR)}) (C {(git)} {(config)} {(--unset-all)} {(core.editor)}) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$i'))} arms: [ (case_arm pat_list: [{(core_editor)}] action: [(C {(git)} {(config)} {(core.editor)} {(./e-core_editor.sh)})] spids: [274 275 287 -1] ) (case_arm pat_list: [{(Id.Lit_LBracket '[') (A-Z) (Id.Lit_RBracket ']') (Id.Lit_Star '*')}] action: [ (C {(eval)} {(DQ ($ Id.VSub_DollarName '$i') ('=./e-') ($ Id.VSub_DollarName '$i') (.sh))} ) (C {(export)} {($ Id.VSub_DollarName '$i')}) ] spids: [290 294 312 -1] ) ] ) (C {(test_expect_success)} {(DQ ('Using ') ($ Id.VSub_DollarName '$i'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:326) (Token id: Id.Lit_Chars val: '\t\tgit --exec-path=. commit --amend &&\n' span_id: 327 ) (Token id:Id.Lit_Chars val:'\t\tgit show -s --pretty=oneline |\n' span_id:328) (Token id: Id.Lit_Chars val: '\t\tsed -e "s/^[0-9a-f]* //" >actual &&\n' span_id: 329 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp actual expect\n' span_id:330) (Token id:Id.Lit_Chars val:'\t' span_id:331) ) } ) ] ) ) (C {(unset)} {(EDITOR)} {(VISUAL)} {(GIT_EDITOR)}) (C {(git)} {(config)} {(--unset-all)} {(core.editor)}) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$vi')} {(EDITOR)} {(VISUAL)} {(core_editor)} {(GIT_EDITOR)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{(echo)} {(DQ ('Edited by ') ($ Id.VSub_DollarName '$i'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:379) fd: -1 arg_word: {(expect)} ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$i'))} arms: [ (case_arm pat_list: [{(core_editor)}] action: [(C {(git)} {(config)} {(core.editor)} {(./e-core_editor.sh)})] spids: [392 393 405 -1] ) (case_arm pat_list: [{(Id.Lit_LBracket '[') (A-Z) (Id.Lit_RBracket ']') (Id.Lit_Star '*')}] action: [ (C {(eval)} {(DQ ($ Id.VSub_DollarName '$i') ('=./e-') ($ Id.VSub_DollarName '$i') (.sh))} ) (C {(export)} {($ Id.VSub_DollarName '$i')}) ] spids: [408 412 430 -1] ) ] ) (C {(test_expect_success)} {(DQ ('Using ') ($ Id.VSub_DollarName '$i') (' (override)'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:445) (Token id: Id.Lit_Chars val: '\t\tgit --exec-path=. commit --amend &&\n' span_id: 446 ) (Token id:Id.Lit_Chars val:'\t\tgit show -s --pretty=oneline |\n' span_id:447) (Token id: Id.Lit_Chars val: '\t\tsed -e "s/^[0-9a-f]* //" >actual &&\n' span_id: 448 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp actual expect\n' span_id:449) (Token id:Id.Lit_Chars val:'\t' span_id:450) ) } ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Simple words: [{(echo)} {(SQ (Token id:Id.Lit_Chars val:'echo space > "$1"' span_id:461))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:464) fd: -1 arg_word: {(DQ ('e space.sh'))} ) ] ) ] action: [(C {(test_set_prereq)} {(SPACES_IN_FILENAMES)})] spids: [456 470] ) ] ) (C {(test_expect_success)} {(SPACES_IN_FILENAMES)} {(SQ (Token id:Id.Lit_Chars val:'editor with a space' span_id:489))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:493) (Token id:Id.Lit_Chars val:'\n' span_id:494) (Token id:Id.Lit_Chars val:'\tchmod a+x "e space.sh" &&\n' span_id:495) (Token id:Id.Lit_Chars val:'\tGIT_EDITOR="./e\\ space.sh" git commit --amend &&\n' span_id:496) (Token id: Id.Lit_Chars val: '\ttest space = "$(git show -s --pretty=format:%s)"\n' span_id: 497 ) (Token id:Id.Lit_Chars val:'\n' span_id:498) ) } ) (C {(unset)} {(GIT_EDITOR)}) (C {(test_expect_success)} {(SPACES_IN_FILENAMES)} {(SQ (Token id:Id.Lit_Chars val:'core.editor with a space' span_id:511))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:515) (Token id:Id.Lit_Chars val:'\n' span_id:516) (Token id: Id.Lit_Chars val: '\tgit config core.editor \\"./e\\ space.sh\\" &&\n' span_id: 517 ) (Token id:Id.Lit_Chars val:'\tgit commit --amend &&\n' span_id:518) (Token id: Id.Lit_Chars val: '\ttest space = "$(git show -s --pretty=format:%s)"\n' span_id: 519 ) (Token id:Id.Lit_Chars val:'\n' span_id:520) ) } ) (C {(test_done)}) ] )