(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:'test bash completion' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./lib-bash.sh)}) (command.ShFunction name: complete body: (command.BraceGroup children: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:36) arg_word: {(0)} ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_TESTING_COMMAND_COMPLETION) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'add checkout check-attr filter-branch ls-files' span_id: 94 ) ) } spids: [92] ) ] ) (C {(.)} {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR') (/contrib/completion/git-completion.bash))}) (command.ShFunction name: _get_comp_words_by_ref body: (command.BraceGroup children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:123) cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:134) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(cur)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:_words span_id:154) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: _cword span_id: 156 ) ) ) ) } spids: [152] ) ] ) ] spids: [148 149 161 -1] ) (case_arm pat_list: [{(prev)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:prev) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:_words span_id:170) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: _cword span_id: 172 ) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) ) } spids: [168] ) ] ) ] spids: [164 165 179 -1] ) (case_arm pat_list: [{(words)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:words) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:187) words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:_words span_id:190) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] ) } spids: [186] ) ] ) ] spids: [182 183 199 -1] ) (case_arm pat_list: [{(cword)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cword) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$_cword')} spids: [206] ) ] ) ] spids: [202 203 210 -1] ) ] ) (C {(shift)}) ] ) ) ] ) ) (command.ShFunction name: print_comp body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'IFS=') (single_quoted left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:235) tokens: [(Token id:Id.Char_OneChar val:'\\n' span_id:236)] ) } ) (command.Simple words: [ {(echo)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:COMPREPLY span_id:244) bracket_op: (bracket_op.WholeArray op_id:Id.Arith_Star) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:251) fd: -1 arg_word: {(out)} ) ] ) ] ) ) (command.ShFunction name: run_completion body: (command.BraceGroup children: [ (C {(local)} {(-a)} {(COMPREPLY)} {(_words)}) (C {(local)} {(_cword)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_words) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:281) words: [{($ Id.VSub_Number '$1')}] ) } spids: [280] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:292) suffix_op: (suffix_op.Slice begin: (arith_expr.Unary op_id: Id.Node_UnaryMinus child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) ) ) } {(Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:303))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: _words index: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id:Id.VSub_Name val:_words span_id:324) prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) op: assign_op.Equal rhs: {(SQ )} spids: [308] ) ] ) ] ) (command.DParen child: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:_cword) right: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id:Id.VSub_Name val:_words span_id:341) prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {(__git_wrap__git_main)}) (C {(print_comp)})] ) ] ) ) (command.ShFunction name: test_completion body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.If arms: [ (if_arm cond: [(C {(test)} {($ Id.VSub_Pound '$#')} {(-gt)} {(1)})] action: [ (command.Simple words: [ {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:401))} {(DQ ($ Id.VSub_Number '$2'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:408) fd: -1 arg_word: {(expected)} ) ] ) ] spids: [384 395] ) ] else_action: [ (command.Simple words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/Z$//' span_id:420))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:423) fd: -1 arg_word: {(expected)} ) ] ) ] ) (C {(run_completion)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(test_cmp)} {(expected)} {(out)}) ] ) ] ) ) (command.ShFunction name: test_gitcomp 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] children: [ (C {(local)} {(-a)} {(COMPREPLY)}) (command.Simple words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/Z$//' span_id:484))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:487) fd: -1 arg_word: {(expected)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [493] ) ] ) (C {(shift)}) (C {(__gitcomp)} {(DQ ($ Id.VSub_At '$@'))}) (C {(print_comp)}) (C {(test_cmp)} {(expected)} {(out)}) ] ) ] ) ) (command.ShFunction name: test_gitcomp_nl 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] children: [ (C {(local)} {(-a)} {(COMPREPLY)}) (command.Simple words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/Z$//' span_id:563))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:566) fd: -1 arg_word: {(expected)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cur) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [572] ) ] ) (C {(shift)}) (C {(__gitcomp_nl)} {(DQ ($ Id.VSub_At '$@'))}) (C {(print_comp)}) (C {(test_cmp)} {(expected)} {(out)}) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:invalid_variable_name) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'${foo.bar}' span_id:610))} spids: [608] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:actual) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/actual))} spids: [614] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for __gitdir tests' span_id:624))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:628) (Token id:Id.Lit_Chars val:'\tmkdir -p subdir/subsubdir &&\n' span_id:629) (Token id:Id.Lit_Chars val:'\tgit init otherrepo\n' span_id:630) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '__gitdir - from command line (through $__git_dir)' span_id: 637 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:641) (Token id: Id.Lit_Chars val: '\techo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&\n' span_id: 642 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:643) (Token id: Id.Lit_Chars val: '\t\t__git_dir="$TRASH_DIRECTORY/otherrepo/.git" &&\n' span_id: 644 ) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:645) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:646) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:647) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - repo as argument' span_id:654))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:658) (Token id:Id.Lit_Chars val:'\techo "otherrepo/.git" >expected &&\n' span_id:659) (Token id:Id.Lit_Chars val:'\t__gitdir "otherrepo" >"$actual" &&\n' span_id:660) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:661) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - remote as argument' span_id:668))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:672) (Token id:Id.Lit_Chars val:'\techo "remote" >expected &&\n' span_id:673) (Token id:Id.Lit_Chars val:'\t__gitdir "remote" >"$actual" &&\n' span_id:674) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:675) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - .git directory in cwd' span_id:682))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:686) (Token id:Id.Lit_Chars val:'\techo ".git" >expected &&\n' span_id:687) (Token id:Id.Lit_Chars val:'\t__gitdir >"$actual" &&\n' span_id:688) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:689) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - .git directory in parent' span_id:696))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:700) (Token id:Id.Lit_Chars val:'\techo "$(pwd -P)/.git" >expected &&\n' span_id:701) (Token id:Id.Lit_Chars val:'\t(\n' span_id:702) (Token id:Id.Lit_Chars val:'\t\tcd subdir/subsubdir &&\n' span_id:703) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:704) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:705) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:706) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - cwd is a .git directory' span_id:713))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:717) (Token id:Id.Lit_Chars val:'\techo "." >expected &&\n' span_id:718) (Token id:Id.Lit_Chars val:'\t(\n' span_id:719) (Token id:Id.Lit_Chars val:'\t\tcd .git &&\n' span_id:720) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:721) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:722) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:723) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - parent is a .git directory' span_id:730))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:734) (Token id:Id.Lit_Chars val:'\techo "$(pwd -P)/.git" >expected &&\n' span_id:735) (Token id:Id.Lit_Chars val:'\t(\n' span_id:736) (Token id:Id.Lit_Chars val:'\t\tcd .git/refs/heads &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:738) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:739) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:740) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '__gitdir - $GIT_DIR set while .git directory in cwd' span_id: 747 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:751) (Token id: Id.Lit_Chars val: '\techo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&\n' span_id: 752 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:753) (Token id: Id.Lit_Chars val: '\t\tGIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&\n' span_id: 754 ) (Token id:Id.Lit_Chars val:'\t\texport GIT_DIR &&\n' span_id:755) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:756) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:757) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:758) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '__gitdir - $GIT_DIR set while .git directory in parent' span_id: 765 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:769) (Token id: Id.Lit_Chars val: '\techo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&\n' span_id: 770 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:771) (Token id: Id.Lit_Chars val: '\t\tGIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&\n' span_id: 772 ) (Token id:Id.Lit_Chars val:'\t\texport GIT_DIR &&\n' span_id:773) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:774) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:775) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:776) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:777) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - non-existing $GIT_DIR' span_id:784))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:788) (Token id:Id.Lit_Chars val:'\t(\n' span_id:789) (Token id:Id.Lit_Chars val:'\t\tGIT_DIR="$TRASH_DIRECTORY/non-existing" &&\n' span_id:790) (Token id:Id.Lit_Chars val:'\t\texport GIT_DIR &&\n' span_id:791) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail __gitdir\n' span_id:792) (Token id:Id.Lit_Chars val:'\t)\n' span_id:793) ) } ) (command.ShFunction name: pwd_P_W body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(test_have_prereq)} {(MINGW)})] action: [(C {(pwd)} {(-W)})] spids: [807 814] ) ] else_action: [(C {(pwd)} {(-P)})] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - gitfile in cwd' span_id:838))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:842) (Token id: Id.Lit_Chars val: '\techo "$(pwd_P_W)/otherrepo/.git" >expected &&\n' span_id: 843 ) (Token id: Id.Lit_Chars val: '\techo "gitdir: $(pwd_P_W)/otherrepo/.git" >subdir/.git &&\n' span_id: 844 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f subdir/.git" &&\n' span_id:845) (Token id:Id.Lit_Chars val:'\t(\n' span_id:846) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:847) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:848) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:849) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:850) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - gitfile in parent' span_id:857))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:861) (Token id: Id.Lit_Chars val: '\techo "$(pwd_P_W)/otherrepo/.git" >expected &&\n' span_id: 862 ) (Token id: Id.Lit_Chars val: '\techo "gitdir: $(pwd_P_W)/otherrepo/.git" >subdir/.git &&\n' span_id: 863 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f subdir/.git" &&\n' span_id:864) (Token id:Id.Lit_Chars val:'\t(\n' span_id:865) (Token id:Id.Lit_Chars val:'\t\tcd subdir/subsubdir &&\n' span_id:866) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:867) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:868) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:869) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - resulting path avoids symlinks' span_id:878))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:882) (Token id: Id.Lit_Chars val: '\techo "$(pwd -P)/otherrepo/.git" >expected &&\n' span_id: 883 ) (Token id:Id.Lit_Chars val:'\tmkdir otherrepo/dir &&\n' span_id:884) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -rf otherrepo/dir" &&\n' span_id: 885 ) (Token id:Id.Lit_Chars val:'\tln -s otherrepo/dir link &&\n' span_id:886) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f link" &&\n' span_id:887) (Token id:Id.Lit_Chars val:'\t(\n' span_id:888) (Token id:Id.Lit_Chars val:'\t\tcd link &&\n' span_id:889) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:890) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:891) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:892) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitdir - not a git repository' span_id:899))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:903) (Token id:Id.Lit_Chars val:'\t(\n' span_id:904) (Token id:Id.Lit_Chars val:'\t\tcd subdir/subsubdir &&\n' span_id:905) (Token id: Id.Lit_Chars val: '\t\tGIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY" &&\n' span_id: 906 ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:907) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail __gitdir\n' span_id:908) (Token id:Id.Lit_Chars val:'\t)\n' span_id:909) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - trailing space - options' span_id:916))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:920) (Token id: Id.Lit_Chars val: '\ttest_gitcomp "--re" "--dry-run --reuse-message= --reedit-message=\n' span_id: 921 ) (Token id:Id.Lit_Chars val:'\t\t--reset-author" <<-EOF\n' span_id:922) (Token id:Id.Lit_Chars val:'\t--reuse-message=Z\n' span_id:923) (Token id:Id.Lit_Chars val:'\t--reedit-message=Z\n' span_id:924) (Token id:Id.Lit_Chars val:'\t--reset-author Z\n' span_id:925) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:926) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - trailing space - config keys' span_id:933))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:937) (Token id: Id.Lit_Chars val: '\ttest_gitcomp "br" "branch. branch.autosetupmerge\n' span_id: 938 ) (Token id:Id.Lit_Chars val:'\t\tbranch.autosetuprebase browser." <<-\\EOF\n' span_id:939) (Token id:Id.Lit_Chars val:'\tbranch.Z\n' span_id:940) (Token id:Id.Lit_Chars val:'\tbranch.autosetupmerge Z\n' span_id:941) (Token id:Id.Lit_Chars val:'\tbranch.autosetuprebase Z\n' span_id:942) (Token id:Id.Lit_Chars val:'\tbrowser.Z\n' span_id:943) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:944) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - option parameter' span_id:951))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:955) (Token id: Id.Lit_Chars val: '\ttest_gitcomp "--strategy=re" "octopus ours recursive resolve subtree" \\\n' span_id: 956 ) (Token id:Id.Lit_Chars val:'\t\t"" "re" <<-\\EOF\n' span_id:957) (Token id:Id.Lit_Chars val:'\trecursive Z\n' span_id:958) (Token id:Id.Lit_Chars val:'\tresolve Z\n' span_id:959) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:960) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - prefix' span_id:967))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:971) (Token id: Id.Lit_Chars val: '\ttest_gitcomp "branch.me" "remote merge mergeoptions rebase" \\\n' span_id: 972 ) (Token id:Id.Lit_Chars val:'\t\t"branch.maint." "me" <<-\\EOF\n' span_id:973) (Token id:Id.Lit_Chars val:'\tbranch.maint.merge Z\n' span_id:974) (Token id:Id.Lit_Chars val:'\tbranch.maint.mergeoptions Z\n' span_id:975) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:976) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - suffix' span_id:983))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:987) (Token id: Id.Lit_Chars val: '\ttest_gitcomp "branch.me" "master maint next pu" "branch." \\\n' span_id: 988 ) (Token id:Id.Lit_Chars val:'\t\t"ma" "." <<-\\EOF\n' span_id:989) (Token id:Id.Lit_Chars val:'\tbranch.master.Z\n' span_id:990) (Token id:Id.Lit_Chars val:'\tbranch.maint.Z\n' span_id:991) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:992) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '__gitcomp - doesnt fail because of invalid variable name' span_id: 999 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1003) (Token id:Id.Lit_Chars val:'\t__gitcomp "$invalid_variable_name"\n' span_id:1004) ) } ) (command.Simple words: [{(read)} {(-r)} {(-d)} {(DQ )} {(refs)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:1019) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1020)) (OF) } here_end_span_id: 1027 stdin_parts: [('maint\n') ('master\n') ('next\n') ('pu\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - trailing space' span_id:1032))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1036) (Token id:Id.Lit_Chars val:'\ttest_gitcomp_nl "m" "$refs" <<-EOF\n' span_id:1037) (Token id:Id.Lit_Chars val:'\tmaint Z\n' span_id:1038) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1039) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1040) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - prefix' span_id:1047))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1051) (Token id: Id.Lit_Chars val: '\ttest_gitcomp_nl "--fixup=m" "$refs" "--fixup=" "m" <<-EOF\n' span_id: 1052 ) (Token id:Id.Lit_Chars val:'\t--fixup=maint Z\n' span_id:1053) (Token id:Id.Lit_Chars val:'\t--fixup=master Z\n' span_id:1054) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1055) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - suffix' span_id:1062))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1066) (Token id: Id.Lit_Chars val: '\ttest_gitcomp_nl "branch.ma" "$refs" "branch." "ma" "." <<-\\EOF\n' span_id: 1067 ) (Token id:Id.Lit_Chars val:'\tbranch.maint.Z\n' span_id:1068) (Token id:Id.Lit_Chars val:'\tbranch.master.Z\n' span_id:1069) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1070) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - no suffix' span_id:1077))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1081) (Token id: Id.Lit_Chars val: '\ttest_gitcomp_nl "ma" "$refs" "" "ma" "" <<-\\EOF\n' span_id: 1082 ) (Token id:Id.Lit_Chars val:'\tmaintZ\n' span_id:1083) (Token id:Id.Lit_Chars val:'\tmasterZ\n' span_id:1084) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1085) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '__gitcomp_nl - doesnt fail because of invalid variable name' span_id: 1092 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1096) (Token id: Id.Lit_Chars val: '\t__gitcomp_nl "$invalid_variable_name"\n' span_id: 1097 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '__git_remotes - list remotes from $GIT_DIR/remotes and from config file' span_id: 1104 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1108) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1109) (Token id:Id.Lit_Chars val:'\tremote_from_file_1\n' span_id:1110) (Token id:Id.Lit_Chars val:'\tremote_from_file_2\n' span_id:1111) (Token id:Id.Lit_Chars val:'\tremote_in_config_1\n' span_id:1112) (Token id:Id.Lit_Chars val:'\tremote_in_config_2\n' span_id:1113) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1114) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -rf .git/remotes" &&\n' span_id: 1115 ) (Token id:Id.Lit_Chars val:'\tmkdir -p .git/remotes &&\n' span_id:1116) (Token id: Id.Lit_Chars val: '\t>.git/remotes/remote_from_file_1 &&\n' span_id: 1117 ) (Token id:Id.Lit_Chars val:'\t>.git/remotes/remote_from_file_2 &&\n' span_id:1118) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git remote remove remote_in_config_1" &&\n' span_id: 1119 ) (Token id:Id.Lit_Chars val:'\tgit remote add remote_in_config_1 git://remote_1 &&\n' span_id:1120) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git remote remove remote_in_config_2" &&\n' span_id: 1121 ) (Token id:Id.Lit_Chars val:'\tgit remote add remote_in_config_2 git://remote_2 &&\n' span_id:1122) (Token id:Id.Lit_Chars val:'\t__git_remotes >actual &&\n' span_id:1123) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1124) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:__git_get_config_variables span_id:1131))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1135) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1136) (Token id:Id.Lit_Chars val:'\tname-1\n' span_id:1137) (Token id:Id.Lit_Chars val:'\tname-2\n' span_id:1138) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1139) (Token id: Id.Lit_Chars val: '\ttest_config interesting.name-1 good &&\n' span_id: 1140 ) (Token id:Id.Lit_Chars val:'\ttest_config interesting.name-2 good &&\n' span_id:1141) (Token id: Id.Lit_Chars val: '\ttest_config subsection.interesting.name-3 bad &&\n' span_id: 1142 ) (Token id:Id.Lit_Chars val:'\t__git_get_config_variables interesting >actual &&\n' span_id:1143) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1144) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:__git_pretty_aliases span_id:1151))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1155) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1156) (Token id:Id.Lit_Chars val:'\tauthor\n' span_id:1157) (Token id:Id.Lit_Chars val:'\thash\n' span_id:1158) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1159) (Token id: Id.Lit_Chars val: '\ttest_config pretty.author "%an %ae" &&\n' span_id: 1160 ) (Token id:Id.Lit_Chars val:'\ttest_config pretty.hash %H &&\n' span_id:1161) (Token id:Id.Lit_Chars val:'\t__git_pretty_aliases >actual &&\n' span_id:1162) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1163) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:__git_aliases span_id:1170))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1174) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1175) (Token id:Id.Lit_Chars val:'\tci\n' span_id:1176) (Token id:Id.Lit_Chars val:'\tco\n' span_id:1177) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1178) (Token id:Id.Lit_Chars val:'\ttest_config alias.ci commit &&\n' span_id:1179) (Token id:Id.Lit_Chars val:'\ttest_config alias.co checkout &&\n' span_id:1180) (Token id:Id.Lit_Chars val:'\t__git_aliases >actual &&\n' span_id:1181) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1182) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:basic span_id:1189))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1193) (Token id:Id.Lit_Chars val:'\trun_completion "git " &&\n' span_id:1194) (Token id:Id.Lit_Chars val:'\t# built-in\n' span_id:1195) (Token id:Id.Lit_Chars val:'\tgrep -q "^add \\$" out &&\n' span_id:1196) (Token id:Id.Lit_Chars val:'\t# script\n' span_id:1197) (Token id: Id.Lit_Chars val: '\tgrep -q "^filter-branch \\$" out &&\n' span_id: 1198 ) (Token id:Id.Lit_Chars val:'\t# plumbing\n' span_id:1199) (Token id:Id.Lit_Chars val:'\t! grep -q "^ls-files \\$" out &&\n' span_id:1200) (Token id:Id.Lit_Chars val:'\n' span_id:1201) (Token id:Id.Lit_Chars val:'\trun_completion "git f" &&\n' span_id:1202) (Token id:Id.Lit_Chars val:'\t! grep -q -v "^f" out\n' span_id:1203) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'double dash "git" itself' span_id:1210))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1214) (Token id:Id.Lit_Chars val:'\ttest_completion "git --" <<-\\EOF\n' span_id:1215) (Token id:Id.Lit_Chars val:'\t--paginate Z\n' span_id:1216) (Token id:Id.Lit_Chars val:'\t--no-pager Z\n' span_id:1217) (Token id:Id.Lit_Chars val:'\t--git-dir=\n' span_id:1218) (Token id:Id.Lit_Chars val:'\t--bare Z\n' span_id:1219) (Token id:Id.Lit_Chars val:'\t--version Z\n' span_id:1220) (Token id:Id.Lit_Chars val:'\t--exec-path Z\n' span_id:1221) (Token id:Id.Lit_Chars val:'\t--exec-path=\n' span_id:1222) (Token id:Id.Lit_Chars val:'\t--html-path Z\n' span_id:1223) (Token id:Id.Lit_Chars val:'\t--man-path Z\n' span_id:1224) (Token id:Id.Lit_Chars val:'\t--info-path Z\n' span_id:1225) (Token id:Id.Lit_Chars val:'\t--work-tree=\n' span_id:1226) (Token id:Id.Lit_Chars val:'\t--namespace=\n' span_id:1227) (Token id:Id.Lit_Chars val:'\t--no-replace-objects Z\n' span_id:1228) (Token id:Id.Lit_Chars val:'\t--help Z\n' span_id:1229) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1230) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'double dash "git checkout"' span_id:1237))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1241) (Token id: Id.Lit_Chars val: '\ttest_completion "git checkout --" <<-\\EOF\n' span_id: 1242 ) (Token id:Id.Lit_Chars val:'\t--quiet Z\n' span_id:1243) (Token id:Id.Lit_Chars val:'\t--ours Z\n' span_id:1244) (Token id:Id.Lit_Chars val:'\t--theirs Z\n' span_id:1245) (Token id:Id.Lit_Chars val:'\t--track Z\n' span_id:1246) (Token id:Id.Lit_Chars val:'\t--no-track Z\n' span_id:1247) (Token id:Id.Lit_Chars val:'\t--merge Z\n' span_id:1248) (Token id:Id.Lit_Chars val:'\t--conflict=\n' span_id:1249) (Token id:Id.Lit_Chars val:'\t--orphan Z\n' span_id:1250) (Token id:Id.Lit_Chars val:'\t--patch Z\n' span_id:1251) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1252) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'general options' span_id:1259))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1263) (Token id: Id.Lit_Chars val: '\ttest_completion "git --ver" "--version " &&\n' span_id: 1264 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --hel" "--help " &&\n' span_id:1265) (Token id: Id.Lit_Chars val: '\ttest_completion "git --exe" <<-\\EOF &&\n' span_id: 1266 ) (Token id:Id.Lit_Chars val:'\t--exec-path Z\n' span_id:1267) (Token id:Id.Lit_Chars val:'\t--exec-path=\n' span_id:1268) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1269) (Token id: Id.Lit_Chars val: '\ttest_completion "git --htm" "--html-path " &&\n' span_id: 1270 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --pag" "--paginate " &&\n' span_id:1271) (Token id: Id.Lit_Chars val: '\ttest_completion "git --no-p" "--no-pager " &&\n' span_id: 1272 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --git" "--git-dir=" &&\n' span_id:1273) (Token id: Id.Lit_Chars val: '\ttest_completion "git --wor" "--work-tree=" &&\n' span_id: 1274 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --nam" "--namespace=" &&\n' span_id:1275) (Token id: Id.Lit_Chars val: '\ttest_completion "git --bar" "--bare " &&\n' span_id: 1276 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --inf" "--info-path " &&\n' span_id:1277) (Token id: Id.Lit_Chars val: '\ttest_completion "git --no-r" "--no-replace-objects "\n' span_id: 1278 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'general options plus command' span_id:1285))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1289) (Token id: Id.Lit_Chars val: '\ttest_completion "git --version check" "checkout " &&\n' span_id: 1290 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --paginate check" "checkout " &&\n' span_id:1291) (Token id: Id.Lit_Chars val: '\ttest_completion "git --git-dir=foo check" "checkout " &&\n' span_id: 1292 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --bare check" "checkout " &&\n' span_id:1293) (Token id: Id.Lit_Chars val: '\ttest_completion "git --exec-path=foo check" "checkout " &&\n' span_id: 1294 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --html-path check" "checkout " &&\n' span_id:1295) (Token id: Id.Lit_Chars val: '\ttest_completion "git --no-pager check" "checkout " &&\n' span_id: 1296 ) (Token id: Id.Lit_Chars val: '\ttest_completion "git --work-tree=foo check" "checkout " &&\n' span_id: 1297 ) (Token id: Id.Lit_Chars val: '\ttest_completion "git --namespace=foo check" "checkout " &&\n' span_id: 1298 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --paginate check" "checkout " &&\n' span_id:1299) (Token id: Id.Lit_Chars val: '\ttest_completion "git --info-path check" "checkout " &&\n' span_id: 1300 ) (Token id: Id.Lit_Chars val: '\ttest_completion "git --no-replace-objects check" "checkout "\n' span_id: 1301 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git --help completion' span_id:1308))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1312) (Token id: Id.Lit_Chars val: '\ttest_completion "git --help ad" "add " &&\n' span_id: 1313 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --help core" "core-tutorial "\n' span_id:1314) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for ref completion' span_id:1321))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1325) (Token id:Id.Lit_Chars val:'\techo content >file1 &&\n' span_id:1326) (Token id:Id.Lit_Chars val:'\techo more >file2 &&\n' span_id:1327) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:1328) (Token id:Id.Lit_Chars val:'\tgit commit -m one &&\n' span_id:1329) (Token id:Id.Lit_Chars val:'\tgit branch mybranch &&\n' span_id:1330) (Token id:Id.Lit_Chars val:'\tgit tag mytag\n' span_id:1331) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout completes ref names' span_id:1338))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1342) (Token id: Id.Lit_Chars val: '\ttest_completion "git checkout m" <<-\\EOF\n' span_id: 1343 ) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1344) (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1345) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1346) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1347) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'show completes all refs' span_id:1354))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1358) (Token id: Id.Lit_Chars val: '\ttest_completion "git show m" <<-\\EOF\n' span_id: 1359 ) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1360) (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1361) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1362) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1363) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'<ref>: completes paths' span_id:1370))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1374) (Token id: Id.Lit_Chars val: '\ttest_completion "git show mytag:f" <<-\\EOF\n' span_id: 1375 ) (Token id:Id.Lit_Chars val:'\tfile1 Z\n' span_id:1376) (Token id:Id.Lit_Chars val:'\tfile2 Z\n' span_id:1377) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1378) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'complete tree filename with spaces' span_id:1385))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1389) (Token id: Id.Lit_Chars val: '\techo content >"name with spaces" &&\n' span_id: 1390 ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:1391) (Token id:Id.Lit_Chars val:'\tgit commit -m spaces &&\n' span_id:1392) (Token id:Id.Lit_Chars val:'\ttest_completion "git show HEAD:nam" <<-\\EOF\n' span_id:1393) (Token id:Id.Lit_Chars val:'\tname with spaces Z\n' span_id:1394) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1395) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'complete tree filename with metacharacters' span_id:1402))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1406) (Token id: Id.Lit_Chars val: '\techo content >"name with \\${meta}" &&\n' span_id: 1407 ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:1408) (Token id:Id.Lit_Chars val:'\tgit commit -m meta &&\n' span_id:1409) (Token id:Id.Lit_Chars val:'\ttest_completion "git show HEAD:nam" <<-\\EOF\n' span_id:1410) (Token id:Id.Lit_Chars val:'\tname with ${meta} Z\n' span_id:1411) (Token id:Id.Lit_Chars val:'\tname with spaces Z\n' span_id:1412) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1413) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:send-email span_id:1420))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1424) (Token id: Id.Lit_Chars val: '\ttest_completion "git send-email --cov" "--cover-letter " &&\n' span_id: 1425 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git send-email ma" "master "\n' span_id:1426) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'complete files' span_id:1433))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1437) (Token id:Id.Lit_Chars val:'\tgit init tmp && cd tmp &&\n' span_id:1438) (Token id:Id.Lit_Chars val:'\ttest_when_finished "cd .. && rm -rf tmp" &&\n' span_id:1439) (Token id:Id.Lit_Chars val:'\n' span_id:1440) (Token id:Id.Lit_Chars val:'\techo "expected" > .gitignore &&\n' span_id:1441) (Token id:Id.Lit_Chars val:'\techo "out" >> .gitignore &&\n' span_id:1442) (Token id:Id.Lit_Chars val:'\n' span_id:1443) (Token id:Id.Lit_Chars val:'\tgit add .gitignore &&\n' span_id:1444) (Token id:Id.Lit_Chars val:'\ttest_completion "git commit " ".gitignore" &&\n' span_id:1445) (Token id:Id.Lit_Chars val:'\n' span_id:1446) (Token id:Id.Lit_Chars val:'\tgit commit -m ignore &&\n' span_id:1447) (Token id:Id.Lit_Chars val:'\n' span_id:1448) (Token id:Id.Lit_Chars val:'\ttouch new &&\n' span_id:1449) (Token id: Id.Lit_Chars val: '\ttest_completion "git add " "new" &&\n' span_id: 1450 ) (Token id:Id.Lit_Chars val:'\n' span_id:1451) (Token id:Id.Lit_Chars val:'\tgit add new &&\n' span_id:1452) (Token id:Id.Lit_Chars val:'\tgit commit -a -m new &&\n' span_id:1453) (Token id:Id.Lit_Chars val:'\ttest_completion "git add " "" &&\n' span_id:1454) (Token id:Id.Lit_Chars val:'\n' span_id:1455) (Token id:Id.Lit_Chars val:'\tgit mv new modified &&\n' span_id:1456) (Token id:Id.Lit_Chars val:'\techo modify > modified &&\n' span_id:1457) (Token id: Id.Lit_Chars val: '\ttest_completion "git add " "modified" &&\n' span_id: 1458 ) (Token id:Id.Lit_Chars val:'\n' span_id:1459) (Token id:Id.Lit_Chars val:'\ttouch untracked &&\n' span_id:1460) (Token id:Id.Lit_Chars val:'\n' span_id:1461) (Token id: Id.Lit_Chars val: '\t: TODO .gitignore should not be here &&\n' span_id: 1462 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git rm " <<-\\EOF &&\n' span_id:1463) (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1464) (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1465) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1466) (Token id:Id.Lit_Chars val:'\n' span_id:1467) (Token id: Id.Lit_Chars val: '\ttest_completion "git clean " "untracked" &&\n' span_id: 1468 ) (Token id:Id.Lit_Chars val:'\n' span_id:1469) (Token id: Id.Lit_Chars val: '\t: TODO .gitignore should not be here &&\n' span_id: 1470 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git mv " <<-\\EOF &&\n' span_id:1471) (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1472) (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1473) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1474) (Token id:Id.Lit_Chars val:'\n' span_id:1475) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:1476) (Token id:Id.Lit_Chars val:'\ttouch dir/file-in-dir &&\n' span_id:1477) (Token id:Id.Lit_Chars val:'\tgit add dir/file-in-dir &&\n' span_id:1478) (Token id:Id.Lit_Chars val:'\tgit commit -m dir &&\n' span_id:1479) (Token id:Id.Lit_Chars val:'\n' span_id:1480) (Token id:Id.Lit_Chars val:'\tmkdir untracked-dir &&\n' span_id:1481) (Token id:Id.Lit_Chars val:'\n' span_id:1482) (Token id:Id.Lit_Chars val:'\t: TODO .gitignore should not be here &&\n' span_id:1483) (Token id: Id.Lit_Chars val: '\ttest_completion "git mv modified " <<-\\EOF &&\n' span_id: 1484 ) (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1485) (Token id:Id.Lit_Chars val:'\tdir\n' span_id:1486) (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1487) (Token id:Id.Lit_Chars val:'\tuntracked\n' span_id:1488) (Token id:Id.Lit_Chars val:'\tuntracked-dir\n' span_id:1489) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1490) (Token id:Id.Lit_Chars val:'\n' span_id:1491) (Token id: Id.Lit_Chars val: '\ttest_completion "git commit " "modified" &&\n' span_id: 1492 ) (Token id:Id.Lit_Chars val:'\n' span_id:1493) (Token id: Id.Lit_Chars val: '\t: TODO .gitignore should not be here &&\n' span_id: 1494 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git ls-files " <<-\\EOF &&\n' span_id:1495) (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1496) (Token id:Id.Lit_Chars val:'\tdir\n' span_id:1497) (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1498) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1499) (Token id:Id.Lit_Chars val:'\n' span_id:1500) (Token id:Id.Lit_Chars val:'\ttouch momified &&\n' span_id:1501) (Token id:Id.Lit_Chars val:'\ttest_completion "git add mom" "momified"\n' span_id:1502) ) } ) (C {(test_expect_success)} {(DQ ("completion uses <cmd> completion for alias: !sh -c 'git <cmd> ...'"))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1513) (Token id:Id.Lit_Chars val:'\ttest_config alias.co "!sh -c ' span_id:1514) ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'git checkout ...' span_id:1520)) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'" &&\n' span_id:1526) (Token id: Id.Lit_Chars val: '\ttest_completion "git co m" <<-\\EOF\n' span_id: 1527 ) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1528) (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1529) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1530) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1531) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'completion uses <cmd> completion for alias: !f () { VAR=val git <cmd> ... }' span_id: 1538 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1542) (Token id: Id.Lit_Chars val: '\ttest_config alias.co "!f () { VAR=val git checkout ... ; } f" &&\n' span_id: 1543 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git co m" <<-\\EOF\n' span_id:1544) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1545) (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1546) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1547) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1548) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'completion used <cmd> completion for alias: !f() { : git <cmd> ; ... }' span_id: 1555 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1559) (Token id: Id.Lit_Chars val: '\ttest_config alias.co "!f() { : git checkout ; if ... } f" &&\n' span_id: 1560 ) (Token id:Id.Lit_Chars val:'\ttest_completion "git co m" <<-\\EOF\n' span_id:1561) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1562) (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1563) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1564) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1565) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'complete with tilde expansion' span_id:1572))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1576) (Token id:Id.Lit_Chars val:'\tgit init tmp && cd tmp &&\n' span_id:1577) (Token id:Id.Lit_Chars val:'\ttest_when_finished "cd .. && rm -rf tmp" &&\n' span_id:1578) (Token id:Id.Lit_Chars val:'\n' span_id:1579) (Token id:Id.Lit_Chars val:'\ttouch ~/tmp/file &&\n' span_id:1580) (Token id:Id.Lit_Chars val:'\n' span_id:1581) (Token id:Id.Lit_Chars val:'\ttest_completion "git add ~/tmp/" "~/tmp/file"\n' span_id:1582) ) } ) (C {(test_done)}) ] )