(command.CommandList children: [ (C {(Id.Lit_Other ':')} { (braced_var_sub token: (Token id:Id.VSub_Name val:MERGE_TOOLS_DIR span_id:7) suffix_op: (suffix_op.Unary op_id: Id.VTest_Equals arg_word: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:9) command_list: (command.CommandList children:[(C {(git)} {(--exec-path)})]) ) (Id.Lit_Slash /) (mergetools) } ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'\n' span_id:21))} spids: [19] ) ] ) (command.ShFunction name: mode_ok body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [(C {(can_diff)})] spids: [33 38] ) (if_arm cond: [(C {(merge_mode)})] action: [(C {(can_merge)})] spids: [44 49] ) ] else_action: [(C {(false)})] ) ] ) ) (command.ShFunction name: is_available body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool_path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:75) command_list: (command.CommandList children: [ (C {(translate_merge_tool_path)} {(DQ ($ Id.VSub_Number '$1'))}) ] ) ) } spids: [74] ) ] ) (command.Simple words: [{(type)} {(DQ ($ Id.VSub_DollarName '$merge_tool_path'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:92) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:95) fd: 2 arg_word: {(1)} ) ] ) ] ) ] ) ) (command.ShFunction name: list_config_tools body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:section) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [109] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:line_prefix) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:2 span_id:115) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{}) ) } spids: [113] ) ] ) (command.Pipeline children: [ (C {(git)} {(config)} {(--get-regexp)} {($ Id.VSub_DollarName '$section') (SQ (Token id:Id.Lit_Chars val:'\\..*\\.cmd' span_id:129)) } ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:135) cond: [(C {(read)} {(-r)} {(key)} {(value)})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:toolname) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:key span_id:151) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {($ Id.VSub_DollarName '$section') (.)} ) ) } spids: [149] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:toolname) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:toolname span_id:160) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {(.cmd)} ) ) } spids: [158] ) ] ) (C {(printf)} {(DQ ('%s%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_DollarName '$line_prefix'))} {(DQ ($ Id.VSub_DollarName '$toolname'))} ) ] ) ) ] negated: F ) ] ) ) (command.ShFunction name: show_tool_names body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:condition) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:199) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(true)}) ) } spids: [197] ) (assign_pair lhs: (sh_lhs_expr.Name name:per_line_prefix) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:2 span_id:206) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{}) ) } spids: [204] ) (assign_pair lhs: (sh_lhs_expr.Name name:preamble) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:3 span_id:212) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{}) ) } spids: [210] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:not_found_msg) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:4 span_id:219) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{}) ) } spids: [217] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:extra_content) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:5 span_id:226) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{}) ) } spids: [224] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:shown_any) op: assign_op.Equal rhs: (word.Empty) spids: [232] ) ] ) (command.Pipeline children: [ (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$MERGE_TOOLS_DIR'))}) (C {(ls)}) ] ) ] ) ) (command.BraceGroup children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:254) cond: [(C {(read)} {(toolname)})] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(setup_tool)} {(DQ ($ Id.VSub_DollarName '$toolname'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:272) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.Subshell command_list: (command.CommandList children: [ (C {(eval)} {(DQ ($ Id.VSub_DollarName '$condition'))} {(DQ ($ Id.VSub_DollarName '$toolname'))} ) ] ) ) ] ) ] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$preamble'))}) ] action: [ (C {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_DollarName '$preamble'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:preamble) op: assign_op.Equal rhs: (word.Empty) spids: [321] ) ] ) ] spids: [294 305] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:shown_any) op: assign_op.Equal rhs: {(yes)} spids: [327] ) ] ) (C {(printf)} {(DQ ('%s%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_DollarName '$per_line_prefix'))} {(DQ ($ Id.VSub_DollarName '$toolname'))} ) ] spids: [264 291] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$extra_content'))})] action: [ (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$preamble'))})] action: [ (C {(printf)} {(DQ ('%s'))} {(DQ ($ Id.VSub_DollarName '$preamble'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:preamble) op: assign_op.Equal rhs: (word.Empty) spids: [402] ) ] ) ] spids: [369 380] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:shown_any) op: assign_op.Equal rhs: {(yes)} spids: [408] ) ] ) (C {(printf)} {(DQ (Id.Lit_Other '\\') ('n%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_DollarName '$extra_content'))} ) ] spids: [355 366] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$preamble'))}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$not_found_msg'))}) ] ) ] action: [ (C {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_DollarName '$not_found_msg'))} ) ] spids: [430 451] ) ] ) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$shown_any'))}) ] ) ] negated: F ) ] ) ) (command.ShFunction name: diff_mode body: (command.BraceGroup children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$TOOL_MODE'))} {(Id.Lit_Equals '=')} {(diff)}) ] ) ) (command.ShFunction name: merge_mode body: (command.BraceGroup children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$TOOL_MODE'))} {(Id.Lit_Equals '=')} {(merge)}) ] ) ) (command.ShFunction name: translate_merge_tool_path body: (command.BraceGroup children:[(C {(echo)} {(DQ ($ Id.VSub_Number '$1'))})]) ) (command.ShFunction name: check_unchanged body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$MERGED'))} {(-nt)} {(DQ ($ Id.VSub_DollarName '$BACKUP'))} ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:568) arg_word: {(0)} ) ] spids: [550 565] ) ] else_action: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:576) cond: [(C {(true)})] body: (command.DoGroup children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$MERGED') (' seems unchanged.'))}) (C {(printf)} {(DQ ('Was the merge successful [y/n]? '))}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(read)} {(answer)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:605) arg_word: {(1)} ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$answer'))} arms: [ (case_arm pat_list: [{(y) (Id.Lit_Star '*')} {(Y) (Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:626) arg_word: {(0)} ) ] spids: [619 624 630 -1] ) (case_arm pat_list: [{(n) (Id.Lit_Star '*')} {(N) (Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:640) arg_word: {(1)} ) ] spids: [633 638 644 -1] ) ] ) ] ) ) ] ) ] ) ) (command.ShFunction name: valid_tool body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(setup_tool)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:674) arg_word: {(0)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmd) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:680) command_list: (command.CommandList children: [(C {(get_merge_tool_cmd)} {(DQ ($ Id.VSub_Number '$1'))})] ) ) } spids: [679] ) ] ) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$cmd'))}) ] ) ) (command.ShFunction name: setup_user_tool body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool_cmd) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:709) command_list: (command.CommandList children: [(C {(get_merge_tool_cmd)} {(DQ ($ Id.VSub_DollarName '$tool'))})] ) ) } spids: [708] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$merge_tool_cmd'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:728) arg_word: {(1)} ) ] ) (command.ShFunction name: diff_cmd body: (command.BraceGroup children: [ (command.Subshell command_list: (command.CommandList children: [(C {(eval)} {($ Id.VSub_DollarName '$merge_tool_cmd')})] ) ) ] ) ) (command.ShFunction name: merge_cmd body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:trust_exit_code) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:764) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(git)} {(config)} {(--bool)} { (DQ (mergetool.) ($ Id.VSub_Number '$1') (.trustExitCode)) } ) (C {(echo)} {(false)}) ] ) ] ) ) } spids: [763] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$trust_exit_code'))} {(Id.Lit_Equals '=')} {(DQ (false))} ) ] action: [ (C {(touch)} {(DQ ($ Id.VSub_DollarName '$BACKUP'))}) (command.Subshell command_list: (command.CommandList children: [(C {(eval)} {($ Id.VSub_DollarName '$merge_tool_cmd')})] ) ) (C {(check_unchanged)}) ] spids: [787 802] ) ] else_action: [ (command.Subshell command_list: (command.CommandList children: [(C {(eval)} {($ Id.VSub_DollarName '$merge_tool_cmd')})] ) ) ] ) ] ) ) ] ) ) (command.ShFunction name: setup_tool body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tool) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [852] ) ] ) (command.ShFunction name: can_merge body: (command.BraceGroup children: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:871) arg_word: {(0)} ) ] ) ) (command.ShFunction name: can_diff body: (command.BraceGroup children: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:888) arg_word: {(0)} ) ] ) ) (command.ShFunction name: diff_cmd body: (command.BraceGroup children: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:905) arg_word: {(1)} ) ] ) ) (command.ShFunction name: merge_cmd body: (command.BraceGroup children: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:922) arg_word: {(1)} ) ] ) ) (command.ShFunction name: translate_merge_tool_path body: (command.BraceGroup children:[(C {(echo)} {(DQ ($ Id.VSub_Number '$1'))})]) ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {(test)} {(-f)} { (DQ ($ Id.VSub_DollarName '$MERGE_TOOLS_DIR') (/) ($ Id.VSub_DollarName '$tool') ) } ) ] negated: T ) ] action: [ (C {(setup_user_tool)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:971) arg_word: {($ Id.VSub_QMark '$?')} ) ] spids: [950 965] ) ] ) (C {(.)} {(DQ ($ Id.VSub_DollarName '$MERGE_TOOLS_DIR') (/) ($ Id.VSub_DollarName '$tool'))}) (C {(setup_user_tool)}) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(merge_mode)}) (command.Pipeline children: [(C {(can_merge)})] negated: T ) ] ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ("error: '") ($ Id.VSub_DollarName '$tool') ("' can not be used to resolve merges") ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1027) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1031) arg_word: {(1)} ) ] spids: [1005 1016] ) (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(diff_mode)}) (command.Pipeline children: [(C {(can_diff)})] negated: T ) ] ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ("error: '") ($ Id.VSub_DollarName '$tool') ("' can only be used to resolve merges") ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1058) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1062) arg_word: {(1)} ) ] spids: [1036 1047] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1070) arg_word: {(0)} ) ] ) ) (command.ShFunction name: get_merge_tool_cmd body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1085] ) ] ) (command.If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(git)} {(config)} {(DQ (difftool.) ($ Id.VSub_DollarName '$merge_tool') (.cmd))} ) (C {(git)} {(config)} {(DQ (mergetool.) ($ Id.VSub_DollarName '$merge_tool') (.cmd))} ) ] ) ] spids: [1091 1096] ) ] else_action: [ (C {(git)} {(config)} {(DQ (mergetool.) ($ Id.VSub_DollarName '$merge_tool') (.cmd))}) ] ) ] ) ) (command.ShFunction name: run_merge_tool body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_PREFIX) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:GIT_PREFIX span_id:1163) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(.)}) ) } spids: [1161] ) ] ) (C {(export)} {(GIT_PREFIX)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool_path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1176) command_list: (command.CommandList children: [(C {(get_merge_tool_path)} {(DQ ($ Id.VSub_Number '$1'))})] ) ) } spids: [1175] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1186) ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:base_present) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [1189] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(setup_tool)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1208) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [(C {(merge_mode)})] action: [(C {(run_merge_cmd)} {(DQ ($ Id.VSub_Number '$1'))})] spids: [1214 1219] ) ] else_action: [(C {(run_diff_cmd)} {(DQ ($ Id.VSub_Number '$1'))})] ) ] ) ) (command.ShFunction name: run_diff_cmd body: (command.BraceGroup children:[(C {(diff_cmd)} {(DQ ($ Id.VSub_Number '$1'))})]) ) (command.ShFunction name: run_merge_cmd body: (command.BraceGroup children:[(C {(merge_cmd)} {(DQ ($ Id.VSub_Number '$1'))})]) ) (command.ShFunction name: list_merge_tool_candidates body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(merge_mode)})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: {(DQ (tortoisemerge))} spids: [1300] ) ] ) ] spids: [1292 1297] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: {(DQ (kompare))} spids: [1309] ) ] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$DISPLAY'))})] action: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$GNOME_DESKTOP_SESSION_ID'))}) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: { (DQ ('meld opendiff kdiff3 tkdiff xxdiff ') ($ Id.VSub_DollarName '$tools') ) } spids: [1346] ) ] ) ] spids: [1332 1343] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: { (DQ ('opendiff kdiff3 tkdiff xxdiff meld ') ($ Id.VSub_DollarName '$tools') ) } spids: [1356] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$tools') (' gvimdiff diffuse diffmerge ecmerge') ) } spids: [1366] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$tools') (' p4merge araxis bc codecompare'))} spids: [1373] ) ] ) ] spids: [1318 1329] ) ] ) (command.Case to_match: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:VISUAL span_id:1387) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {($ Id.VSub_DollarName '$EDITOR')} ) ) ) } arms: [ (case_arm pat_list: [{(Id.Lit_Star '*') (vim) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$tools') (' vimdiff emerge'))} spids: [1402] ) ] ) ] spids: [1396 1399 1409 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tools) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$tools') (' emerge vimdiff'))} spids: [1416] ) ] ) ] spids: [1412 1413 1423 -1] ) ] ) ] ) ) (command.ShFunction name: show_tool_help body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tool_opt) op: assign_op.Equal rhs: {(DQ ("'git ") (${ Id.VSub_Name TOOL_MODE) ("tool --tool=<tool>'"))} spids: [1439] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tab) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'\t' span_id:1452))} spids: [1450] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LF) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'\n' span_id:1458))} spids: [1456] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:any_shown) op: assign_op.Equal rhs: {(no)} spids: [1462] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmd_name) op: assign_op.Equal rhs: {(${ Id.VSub_Name TOOL_MODE) (tool)} spids: [1467] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:config_tools) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1475) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(diff_mode)}) (C {(list_config_tools)} {(difftool)} { (DQ ($ Id.VSub_DollarName '$tab') ($ Id.VSub_DollarName '$tab') ) } ) ] ) (C {(list_config_tools)} {(mergetool)} { (DQ ($ Id.VSub_DollarName '$tab') ($ Id.VSub_DollarName '$tab') ) } ) ] ) (C {(sort)}) ] negated: F ) ] ) ) } spids: [1474] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:extra_content) op: assign_op.Equal rhs: (word.Empty) spids: [1511] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$config_tools'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:extra_content) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name tab) ('user-defined:') (${ Id.VSub_Name LF) ($ Id.VSub_DollarName '$config_tools') ) } spids: [1528] ) ] ) ] spids: [1514 1525] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(show_tool_names)} {(SQ (Token id:Id.Lit_Chars val:'mode_ok && is_available' span_id:1548))} {(DQ ($ Id.VSub_DollarName '$tab') ($ Id.VSub_DollarName '$tab'))} {(DQ ($ Id.VSub_DollarName '$tool_opt') (' may be set to one of the following:'))} {(DQ ("No suitable tool for 'git ") ($ Id.VSub_DollarName '$cmd_name') (" --tool=<tool>' found."))} {(DQ ($ Id.VSub_DollarName '$extra_content'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:any_shown) op: assign_op.Equal rhs: {(yes)} spids: [1580] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(show_tool_names)} {(SQ (Token id:Id.Lit_Chars val:'mode_ok && ! is_available' span_id:1588))} {(DQ ($ Id.VSub_DollarName '$tab') ($ Id.VSub_DollarName '$tab'))} { (DQ (${ Id.VSub_Name LF) ('The following tools are valid, but not currently available:') ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:any_shown) op: assign_op.Equal rhs: {(yes)} spids: [1608] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$any_shown'))} {(Id.Lit_Equals '=')} {(yes)}) ] action: [ (C {(echo)}) (C {(echo)} {(DQ ('Some of the tools listed above only work in a windowed'))}) (C {(echo)} {(DQ ('environment. If run in a terminal-only session, they will fail.'))} ) ] spids: [1613 1626] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1649) arg_word: {(0)} ) ] ) ) (command.ShFunction name: guess_merge_tool body: (command.BraceGroup children: [ (C {(list_merge_tool_candidates)}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1669) fd: -1 arg_word: {(2)} ) (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:1672) fd: -1 here_begin: {(EOF)} here_end_span_id: 1692 stdin_parts: [ ('\n') ("This message is displayed because '") ($ Id.VSub_DollarName '$TOOL_MODE') (".tool' is not configured.\n") ("See 'git ") (${ Id.VSub_Name TOOL_MODE) ("tool --tool-help' or 'git help config' for more details.\n") ("'git ") (${ Id.VSub_Name TOOL_MODE) ("tool' will now attempt to use one of the following tools:\n") ($ Id.VSub_DollarName '$tools') ('\n') ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:1701))} spids: [1699] ) ] ) (command.ForEach iter_name: tool iter_words: [{($ Id.VSub_DollarName '$tools')}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(is_available)} {(DQ ($ Id.VSub_DollarName '$tool'))}) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$tool'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1733) arg_word: {(0)} ) ] ) ] ) ) (command.Simple words: [{(echo)} {(DQ ('No known ') (${ Id.VSub_Name TOOL_MODE) (' tool is available.'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1744) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1756) arg_word: {(1)} ) ] ) ) (command.ShFunction name: get_configured_merge_tool body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1788) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(git)} {(config)} {(diff.tool)}) (C {(git)} {(config)} {(merge.tool)}) ] ) ] ) ) } spids: [1787] ) ] ) ] spids: [1779 1784] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1809) command_list: (command.CommandList children: [(C {(git)} {(config)} {(merge.tool)})] ) ) } spids: [1808] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))}) (command.Pipeline children: [(C {(valid_tool)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))})] negated: T ) ] ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('git config option ') ($ Id.VSub_DollarName '$TOOL_MODE') ('.tool set to unknown tool: ') ($ Id.VSub_DollarName '$merge_tool') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1847) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('Resetting to default...'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1860) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1868) arg_word: {(1)} ) ] spids: [1821 1842] ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))}) ] ) ) (command.ShFunction name: get_merge_tool_path body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [1897] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [(C {(valid_tool)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))})] negated: T ) ] action: [ (command.Simple words: [ {(echo)} {(DQ ('Unknown merge tool ') ($ Id.VSub_DollarName '$merge_tool'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:1919) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1928) arg_word: {(1)} ) ] spids: [1903 1914] ) ] ) (command.If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool_path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1945) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(git)} {(config)} {(difftool.) (DQ ($ Id.VSub_DollarName '$merge_tool')) (.path) } ) (C {(git)} {(config)} {(mergetool.) (DQ ($ Id.VSub_DollarName '$merge_tool')) (.path) } ) ] ) ] ) ) } spids: [1944] ) ] ) ] spids: [1936 1941] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool_path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1975) command_list: (command.CommandList children: [ (C {(git)} {(config)} {(mergetool.) (DQ ($ Id.VSub_DollarName '$merge_tool')) (.path)} ) ] ) ) } spids: [1974] ) ] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$merge_tool_path'))})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool_path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2006) command_list: (command.CommandList children: [ (C {(translate_merge_tool_path)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))} ) ] ) ) } spids: [2005] ) ] ) ] spids: [1991 2002] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2025) command_list: (command.CommandList children: [ (C {(get_merge_tool_cmd)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))} ) ] ) ) ) } ) (command.Pipeline children: [ (command.Simple words: [{(type)} {(DQ ($ Id.VSub_DollarName '$merge_tool_path'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2045) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:2048) fd: 2 arg_word: {(1)} ) ] ) ] negated: T ) ] ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('The ') ($ Id.VSub_DollarName '$TOOL_MODE') (' tool ') ($ Id.VSub_DollarName '$merge_tool') (' is not available as') ) } {(DQ ("'") ($ Id.VSub_DollarName '$merge_tool_path') ("'"))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:2057) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2076) arg_word: {(1)} ) ] spids: [2018 2052] ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$merge_tool_path'))}) ] ) ) (command.ShFunction name: get_merge_tool body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2106) command_list: (command.CommandList children: [(C {(get_configured_merge_tool)})] ) ) } spids: [2105] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))})] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_tool) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2130) command_list: (command.CommandList children: [(C {(guess_merge_tool)})] ) ) } spids: [2129] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2136) ) ] ) ] spids: [2115 2126] ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$merge_tool'))}) ] ) ) (command.ShFunction name: mergetool_find_win32_cmd body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:executable) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [2159] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sub_directory) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [2163] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Simple words: [{(type)} {(-p)} {(DQ ($ Id.VSub_DollarName '$executable'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2182) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:2185) fd: 2 arg_word: {(1)} ) ] ) ] action: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s' span_id:2195))} {(DQ ($ Id.VSub_DollarName '$executable'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2203) ) ] spids: [2172 2189] ) ] ) (command.ForEach iter_name: directory iter_words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:2220) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(env)}) (C {(grep)} {(-Ei)} { (SQ (Token id: Id.Lit_Chars val: '^PROGRAM(FILES(\\(X86\\))?|W6432)=' span_id: 2230 ) ) } ) (C {(cut)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'=' span_id:2241))} {(-f)} {(2-)} ) (C {(sort)} {(-u)}) ] negated: F ) ] ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$directory'))}) (C {(test)} {(-x)} { (DQ ($ Id.VSub_DollarName '$directory') (/) ($ Id.VSub_DollarName '$sub_directory') (/) ($ Id.VSub_DollarName '$executable') ) } ) ] ) ] action: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s' span_id:2290))} { (DQ ($ Id.VSub_DollarName '$directory') (/) ($ Id.VSub_DollarName '$sub_directory') (/) ($ Id.VSub_DollarName '$executable') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2302) ) ] spids: [2259 2284] ) ] ) ] ) ) (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s' span_id:2315))} {(DQ ($ Id.VSub_DollarName '$executable'))} ) ] ) ) ] )