(CommandList children: [ (C {(Lit_Other ':')} { (BracedVarSub token: <VSub_Name MERGE_TOOLS_DIR> suffix_op: (StringUnary op_id: VTest_Equals arg_word: { (CommandSubPart command_list: (CommandList children:[(C {(git)} {(--exec-path)})]) left_token: <Left_CommandSub '$('> spids: [9 13] ) (Lit_Slash /) (mergetools) } ) spids: [6 16] ) } ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{(SQ <'\n'>)} spids:[19])] spids: [19] ) (FuncDef name: mode_ok body: (BraceGroup children: [ (If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [(C {(can_diff)})] spids: [16777215 38] ) (if_arm cond: [(C {(merge_mode)})] action: [(C {(can_merge)})] spids: [44 49] ) ] else_action: [(C {(false)})] spids: [55 61] ) ] spids: [30] ) spids: [25 29] ) (FuncDef name: is_available body: (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool_path) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(translate_merge_tool_path)} {(DQ ($ VSub_Number '$1'))})] ) left_token: <Left_CommandSub '$('> spids: [75 81] ) } spids: [74] ) ] spids: [74] ) (SimpleCommand words: [{(type)} {(DQ ($ VSub_Name '$merge_tool_path'))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [92] ) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[95]) ] ) ] ) ] spids: [71] ) spids: [66 70] ) (FuncDef name: list_config_tools body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:section) op: Equal rhs: {($ VSub_Number '$1')} spids: [109] ) ] spids: [109] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:line_prefix) op: Equal rhs: { (BracedVarSub token: <VSub_Number 2> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{}) spids: [114 117] ) } spids: [113] ) ] spids: [113] ) (Pipeline children: [ (C {(git)} {(config)} {(--get-regexp)} {($ VSub_Name '$section') (SQ <'\\..*\\.cmd'>)}) (While cond: [(C {(read)} {(-r)} {(key)} {(value)})] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:toolname) op: Equal rhs: { (BracedVarSub token: <VSub_Name key> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {($ VSub_Name '$section') (.)} ) spids: [150 155] ) } spids: [149] ) ] spids: [149] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:toolname) op: Equal rhs: { (BracedVarSub token: <VSub_Name toolname> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.cmd)}) spids: [159 163] ) } spids: [158] ) ] spids: [158] ) (C {(printf)} {(DQ ('%s%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$line_prefix'))} {(DQ ($ VSub_Name '$toolname'))} ) ] spids: [146 184] ) ) ] negated: F ) ] spids: [106] ) spids: [101 105] ) (FuncDef name: show_tool_names body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:condition) op: Equal rhs: { (BracedVarSub token: <VSub_Number 1> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(true)}) spids: [198 202] ) } spids: [197] ) (assign_pair lhs: (LhsName name:per_line_prefix) op: Equal rhs: { (BracedVarSub token: <VSub_Number 2> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{}) spids: [205 208] ) } spids: [204] ) (assign_pair lhs: (LhsName name:preamble) op: Equal rhs: { (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{}) spids: [211 214] ) } spids: [210] ) ] spids: [197] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:not_found_msg) op: Equal rhs: { (BracedVarSub token: <VSub_Number 4> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{}) spids: [218 221] ) } spids: [217] ) ] spids: [217] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:extra_content) op: Equal rhs: { (BracedVarSub token: <VSub_Number 5> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{}) spids: [225 228] ) } spids: [224] ) ] spids: [224] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:shown_any) op: Equal rhs: {(EmptyPart)} spids: [232] ) ] spids: [232] ) (Pipeline children: [ (Subshell child: (AndOr ops: [Op_DAmp] children: [(C {(cd)} {(DQ ($ VSub_Name '$MERGE_TOOLS_DIR'))}) (C {(ls)})] ) spids: [235 247] ) (BraceGroup children: [ (While cond: [(C {(read)} {(toolname)})] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (SimpleCommand words: [{(setup_tool)} {(DQ ($ VSub_Name '$toolname'))}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [272] ) ] ) (Subshell child: (C {(eval)} {(DQ ($ VSub_Name '$condition'))} {(DQ ($ VSub_Name '$toolname'))} ) spids: [278 288] ) ] ) ] action: [ (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$preamble'))})] action: [ (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$preamble'))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:preamble) op: Equal rhs: {(EmptyPart)} spids: [321] ) ] spids: [321] ) ] spids: [16777215 305] ) ] spids: [16777215 324] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:shown_any) op: Equal rhs: {(yes)} spids: [327] ) ] spids: [327] ) (C {(printf)} {(DQ ('%s%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$per_line_prefix'))} {(DQ ($ VSub_Name '$toolname'))} ) ] spids: [16777215 291] ) ] spids: [16777215 348] ) ] spids: [261 351] ) ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$extra_content'))})] action: [ (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$preamble'))})] action: [ (C {(printf)} {(DQ ('%s'))} {(DQ ($ VSub_Name '$preamble'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:preamble) op: Equal rhs: {(EmptyPart)} spids: [402] ) ] spids: [402] ) ] spids: [16777215 380] ) ] spids: [16777215 405] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:shown_any) op: Equal rhs: {(yes)} spids: [408] ) ] spids: [408] ) (C {(printf)} {(DQ (Lit_Other '\\') ('n%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$extra_content'))} ) ] spids: [16777215 366] ) ] spids: [16777215 426] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name '$preamble'))}) (C {(test)} {(-n)} {(DQ ($ VSub_Name '$not_found_msg'))}) ] ) ] action: [ (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$not_found_msg'))} ) ] spids: [16777215 451] ) ] spids: [16777215 467] ) (C {(test)} {(-n)} {(DQ ($ VSub_Name '$shown_any'))}) ] spids: [251] ) ] negated: F ) ] spids: [194] ) spids: [189 193] ) (FuncDef name: diff_mode body: (BraceGroup children: [(C {(test)} {(DQ ($ VSub_Name '$TOOL_MODE'))} {(Lit_Other '=')} {(diff)})] spids: [489] ) spids: [485 488] ) (FuncDef name: merge_mode body: (BraceGroup children: [(C {(test)} {(DQ ($ VSub_Name '$TOOL_MODE'))} {(Lit_Other '=')} {(merge)})] spids: [509] ) spids: [505 508] ) (FuncDef name: translate_merge_tool_path body: (BraceGroup children:[(C {(echo)} {(DQ ($ VSub_Number '$1'))})] spids:[530]) spids: [525 529] ) (FuncDef name: check_unchanged body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Name '$MERGED'))} {(-nt)} {(DQ ($ VSub_Name '$BACKUP'))}) ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [16777215 565] ) ] else_action: [ (While cond: [(C {(true)})] body: (DoGroup children: [ (C {(echo)} {(DQ ($ VSub_Name '$MERGED') (' seems unchanged.'))}) (C {(printf)} {(DQ ('Was the merge successful [y/n]? '))}) (AndOr ops: [Op_DPipe] children: [ (C {(read)} {(answer)}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] ) (Case to_match: {(DQ ($ VSub_Name '$answer'))} arms: [ (case_arm pat_list: [{(y) (Lit_Other '*')} {(Y) (Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [619 624 630 16777215] ) (case_arm pat_list: [{(n) (Lit_Other '*')} {(N) (Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [633 638 644 16777215] ) ] spids: [610 616 647] ) ] spids: [581 650] ) ) ] spids: [573 653] ) ] spids: [547] ) spids: [542 546] ) (FuncDef name: valid_tool body: (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (C {(setup_tool)} {(DQ ($ VSub_Number '$1'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:cmd) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_merge_tool_cmd)} {(DQ ($ VSub_Number '$1'))})] ) left_token: <Left_CommandSub '$('> spids: [680 686] ) } spids: [679] ) ] spids: [679] ) (C {(test)} {(-n)} {(DQ ($ VSub_Name '$cmd'))}) ] spids: [663] ) spids: [658 662] ) (FuncDef name: setup_user_tool body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool_cmd) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_merge_tool_cmd)} {(DQ ($ VSub_Name '$tool'))})] ) left_token: <Left_CommandSub '$('> spids: [709 715] ) } spids: [708] ) ] spids: [708] ) (AndOr ops: [Op_DPipe] children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name '$merge_tool_cmd'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) (FuncDef name: diff_cmd body: (BraceGroup children: [ (Subshell child: (C {(eval)} {($ VSub_Name '$merge_tool_cmd')}) spids: [742 748] ) ] spids: [739] ) spids: [734 738] ) (FuncDef name: merge_cmd body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:trust_exit_code) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (AndOr ops: [Op_DPipe] children: [ (C {(git)} {(config)} {(--bool)} {(DQ (mergetool.) ($ VSub_Number '$1') (.trustExitCode))} ) (C {(echo)} {(false)}) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [764 784] ) } spids: [763] ) ] spids: [763] ) (If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Name '$trust_exit_code'))} {(Lit_Other '=')} {(DQ (false))} ) ] action: [ (C {(touch)} {(DQ ($ VSub_Name '$BACKUP'))}) (Subshell child: (C {(eval)} {($ VSub_Name '$merge_tool_cmd')}) spids: [812 818] ) (C {(check_unchanged)}) ] spids: [16777215 802] ) ] else_action: [ (Subshell child: (C {(eval)} {($ VSub_Name '$merge_tool_cmd')}) spids: [827 833] ) ] spids: [824 836] ) ] spids: [760] ) spids: [755 759] ) ] spids: [705] ) spids: [700 704] ) (FuncDef name: setup_tool body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tool) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [852] ) ] spids: [852] ) (FuncDef name: can_merge body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [868] ) spids: [863 867] ) (FuncDef name: can_diff body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [885] ) spids: [880 884] ) (FuncDef name: diff_cmd body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [902] ) spids: [897 901] ) (FuncDef name: merge_cmd body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [919] ) spids: [914 918] ) (FuncDef name: translate_merge_tool_path body: (BraceGroup children:[(C {(echo)} {(DQ ($ VSub_Number '$1'))})] spids:[936]) spids: [931 935] ) (If arms: [ (if_arm cond: [ (Pipeline children: [ (C {(test)} {(-f)} {(DQ ($ VSub_Name '$MERGE_TOOLS_DIR') (/) ($ VSub_Name '$tool'))} ) ] negated: T ) ] action: [ (C {(setup_user_tool)}) (ControlFlow token: <ControlFlow_Return return> arg_word: {($ VSub_QMark '$?')} ) ] spids: [16777215 965] ) ] spids: [16777215 976] ) (C {(.)} {(DQ ($ VSub_Name '$MERGE_TOOLS_DIR') (/) ($ VSub_Name '$tool'))}) (C {(setup_user_tool)}) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [(C {(merge_mode)}) (Pipeline children:[(C {(can_merge)})] negated:T)] ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("error: '") ($ VSub_Name '$tool') ("' can not be used to resolve merges") ) } ] redirects: [ (Redir op_id: Redir_GreatAnd fd: 16777215 arg_word: {(2)} spids: [1027] ) ] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 1016] ) (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [(C {(diff_mode)}) (Pipeline children:[(C {(can_diff)})] negated:T)] ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("error: '") ($ VSub_Name '$tool') ("' can only be used to resolve merges") ) } ] redirects: [ (Redir op_id: Redir_GreatAnd fd: 16777215 arg_word: {(2)} spids: [1058] ) ] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [1036 1047] ) ] spids: [16777215 1067] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [849] ) spids: [844 848] ) (FuncDef name: get_merge_tool_cmd body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [1085] ) ] spids: [1085] ) (If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [ (AndOr ops: [Op_DPipe] children: [ (C {(git)} {(config)} {(DQ (difftool.) ($ VSub_Name '$merge_tool') (.cmd))}) (C {(git)} {(config)} {(DQ (mergetool.) ($ VSub_Name '$merge_tool') (.cmd))}) ] ) ] spids: [16777215 1096] ) ] else_action: [ (C {(git)} {(config)} {(DQ (mergetool.) ($ VSub_Name '$merge_tool') (.cmd))}) ] spids: [1123 1137] ) ] spids: [1082] ) spids: [1077 1081] ) (FuncDef name: run_merge_tool body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GIT_PREFIX) op: Equal rhs: { (BracedVarSub token: <VSub_Name GIT_PREFIX> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(.)}) spids: [1162 1166] ) } spids: [1161] ) ] spids: [1161] ) (C {(export)} {(GIT_PREFIX)}) (AndOr ops: [Op_DPipe] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool_path) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_merge_tool_path)} {(DQ ($ VSub_Number '$1'))})] ) left_token: <Left_CommandSub '$('> spids: [1176 1182] ) } spids: [1175] ) ] spids: [1175] ) (ControlFlow token:<ControlFlow_Exit exit>) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:base_present) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [1189] ) ] spids: [1189] ) (AndOr ops: [Op_DPipe] children: [ (C {(setup_tool)} {(DQ ($ VSub_Number '$1'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) (If arms: [ (if_arm cond: [(C {(merge_mode)})] action: [(C {(run_merge_cmd)} {(DQ ($ VSub_Number '$1'))})] spids: [16777215 1219] ) ] else_action: [(C {(run_diff_cmd)} {(DQ ($ VSub_Number '$1'))})] spids: [1229 1239] ) ] spids: [1150] ) spids: [1145 1149] ) (FuncDef name: run_diff_cmd body: (BraceGroup children:[(C {(diff_cmd)} {(DQ ($ VSub_Number '$1'))})] spids:[1252]) spids: [1247 1251] ) (FuncDef name: run_merge_cmd body: (BraceGroup children:[(C {(merge_cmd)} {(DQ ($ VSub_Number '$1'))})] spids:[1272]) spids: [1267 1271] ) (FuncDef name: list_merge_tool_candidates body: (BraceGroup children: [ (If arms: [ (if_arm cond: [(C {(merge_mode)})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ (tortoisemerge))} spids: [1300] ) ] spids: [1300] ) ] spids: [16777215 1297] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ (kompare))} spids: [1309] ) ] spids: [1309] ) ] spids: [1306 1315] ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$DISPLAY'))})] action: [ (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$GNOME_DESKTOP_SESSION_ID'))})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: { (DQ ('meld opendiff kdiff3 tkdiff xxdiff ') ($ VSub_Name '$tools') ) } spids: [1346] ) ] spids: [1346] ) ] spids: [16777215 1343] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ ('opendiff kdiff3 tkdiff xxdiff meld ') ($ VSub_Name '$tools'))} spids: [1356] ) ] spids: [1356] ) ] spids: [1353 1363] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ ($ VSub_Name '$tools') (' gvimdiff diffuse diffmerge ecmerge'))} spids: [1366] ) ] spids: [1366] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ ($ VSub_Name '$tools') (' p4merge araxis bc codecompare'))} spids: [1373] ) ] spids: [1373] ) ] spids: [16777215 1329] ) ] spids: [16777215 1380] ) (Case to_match: { (DQ (BracedVarSub token: <VSub_Name VISUAL> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {($ VSub_Name '$EDITOR')} ) spids: [1386 1390] ) ) } arms: [ (case_arm pat_list: [{(Lit_Other '*') (vim) (Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ ($ VSub_Name '$tools') (' vimdiff emerge'))} spids: [1402] ) ] spids: [1402] ) ] spids: [1396 1399 1409 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ ($ VSub_Name '$tools') (' emerge vimdiff'))} spids: [1416] ) ] spids: [1416] ) ] spids: [1412 1413 1423 16777215] ) ] spids: [1383 1393 1426] ) ] spids: [1289] ) spids: [1284 1288] ) (FuncDef name: show_tool_help body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tool_opt) op: Equal rhs: {(DQ ("'git ") (${ VSub_Name TOOL_MODE) ("tool --tool=<tool>'"))} spids: [1439] ) ] spids: [1439] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:tab) op:Equal rhs:{(SQ <'\t'>)} spids:[1450])] spids: [1450] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:LF) op:Equal rhs:{(SQ <'\n'>)} spids:[1456])] spids: [1456] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:any_shown) op:Equal rhs:{(no)} spids:[1462])] spids: [1462] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:cmd_name) op: Equal rhs: {(${ VSub_Name TOOL_MODE) (tool)} spids: [1467] ) ] spids: [1467] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:config_tools) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (C {(diff_mode)}) (C {(list_config_tools)} {(difftool)} {(DQ ($ VSub_Name '$tab') ($ VSub_Name '$tab'))} ) ] ) (C {(list_config_tools)} {(mergetool)} {(DQ ($ VSub_Name '$tab') ($ VSub_Name '$tab'))} ) ] spids: [1476] ) (C {(sort)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [1475 1508] ) } spids: [1474] ) ] spids: [1474] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:extra_content) op: Equal rhs: {(EmptyPart)} spids: [1511] ) ] spids: [1511] ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$config_tools'))})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:extra_content) op: Equal rhs: { (DQ (${ VSub_Name tab) ('user-defined:') (${ VSub_Name LF) ($ VSub_Name '$config_tools') ) } spids: [1528] ) ] spids: [1528] ) ] spids: [16777215 1525] ) ] spids: [16777215 1541] ) (AndOr ops: [Op_DAmp] children: [ (C {(show_tool_names)} {(SQ <'mode_ok && is_available'>)} {(DQ ($ VSub_Name '$tab') ($ VSub_Name '$tab'))} {(DQ ($ VSub_Name '$tool_opt') (' may be set to one of the following:'))} { (DQ ("No suitable tool for 'git ") ($ VSub_Name '$cmd_name') (" --tool=<tool>' found.") ) } {(DQ ($ VSub_Name '$extra_content'))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:any_shown) op: Equal rhs: {(yes)} spids: [1580] ) ] spids: [1580] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(show_tool_names)} {(SQ <'mode_ok && ! is_available'>)} {(DQ ($ VSub_Name '$tab') ($ VSub_Name '$tab'))} {(DQ (${ VSub_Name LF) ('The following tools are valid, but not currently available:'))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:any_shown) op: Equal rhs: {(yes)} spids: [1608] ) ] spids: [1608] ) ] ) (If arms: [ (if_arm cond: [(C {(test)} {(DQ ($ VSub_Name '$any_shown'))} {(Lit_Other '=')} {(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: [16777215 1626] ) ] spids: [16777215 1646] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)}) ] spids: [1436] ) spids: [1431 1435] ) (FuncDef name: guess_merge_tool body: (BraceGroup children: [ (C {(list_merge_tool_candidates)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[1669]) (HereDoc op_id: Redir_DLessDash fd: 16777215 body: { (DQ ('\n') ("This message is displayed because '") ($ VSub_Name '$TOOL_MODE') (".tool' is not configured.\n") ("See 'git ") (${ VSub_Name TOOL_MODE) ("tool --tool-help' or 'git help config' for more details.\n") ("'git ") (${ VSub_Name TOOL_MODE) ("tool' will now attempt to use one of the following tools:\n") ($ VSub_Name '$tools') ('\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [1672] ) ] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{(SQ <' '>)} spids:[1698])] spids: [1698] ) (ForEach iter_name: tool iter_words: [{($ VSub_Name '$tools')}] do_arg_iter: F body: (DoGroup children: [ (AndOr ops: [Op_DAmp Op_DAmp] children: [ (C {(is_available)} {(DQ ($ VSub_Name '$tool'))}) (C {(echo)} {(DQ ($ VSub_Name '$tool'))}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] ) ] spids: [1713 1737] ) spids: [1709 16777215] ) (SimpleCommand words: [{(echo)} {(DQ ('No known ') (${ VSub_Name TOOL_MODE) (' tool is available.'))}] redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[1743])] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [1661] ) spids: [1656 1660] ) (FuncDef name: get_configured_merge_tool body: (BraceGroup children: [ (If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (AndOr ops: [Op_DPipe] children: [ (C {(git)} {(config)} {(diff.tool)}) (C {(git)} {(config)} {(merge.tool)}) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [1787 1801] ) } spids: [1786] ) ] spids: [1786] ) ] spids: [16777215 1783] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(git)} {(config)} {(merge.tool)})] ) left_token: <Left_CommandSub '$('> spids: [1808 1814] ) } spids: [1807] ) ] spids: [1807] ) ] spids: [1804 1817] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name '$merge_tool'))}) (Pipeline children: [(C {(valid_tool)} {(DQ ($ VSub_Name '$merge_tool'))})] negated: T ) ] ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ('git config option ') ($ VSub_Name '$TOOL_MODE') ('.tool set to unknown tool: ') ($ VSub_Name '$merge_tool') ) } ] redirects: [ (Redir op_id: Redir_GreatAnd fd: 16777215 arg_word: {(2)} spids: [1846] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('Resetting to default...'))}] redirects: [ (Redir op_id: Redir_GreatAnd fd: 16777215 arg_word: {(2)} spids: [1859] ) ] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 1841] ) ] spids: [16777215 1872] ) (C {(echo)} {(DQ ($ VSub_Name '$merge_tool'))}) ] spids: [1767] ) spids: [1762 1766] ) (FuncDef name: get_merge_tool_path body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [1896] ) ] spids: [1896] ) (If arms: [ (if_arm cond: [ (Pipeline children: [(C {(valid_tool)} {(DQ ($ VSub_Name '$merge_tool'))})] negated: T ) ] action: [ (SimpleCommand words: [{(echo)} {(DQ ('Unknown merge tool ') ($ VSub_Name '$merge_tool'))}] redirects: [ (Redir op_id: Redir_GreatAnd fd: 16777215 arg_word: {(2)} spids: [1918] ) ] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 1913] ) ] spids: [16777215 1932] ) (If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool_path) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (AndOr ops: [Op_DPipe] children: [ (C {(git)} {(config)} {(difftool.) (DQ ($ VSub_Name '$merge_tool')) (.path)} ) (C {(git)} {(config)} {(mergetool.) (DQ ($ VSub_Name '$merge_tool')) (.path)} ) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [1944 1967] ) } spids: [1943] ) ] spids: [1943] ) ] spids: [16777215 1940] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool_path) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(config)} {(mergetool.) (DQ ($ VSub_Name '$merge_tool')) (.path)} ) ] ) left_token: <Left_CommandSub '$('> spids: [1974 1984] ) } spids: [1973] ) ] spids: [1973] ) ] spids: [1970 1987] ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$merge_tool_path'))})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool_path) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(translate_merge_tool_path)} {(DQ ($ VSub_Name '$merge_tool'))} ) ] ) left_token: <Left_CommandSub '$('> spids: [2005 2011] ) } spids: [2004] ) ] spids: [2004] ) ] spids: [16777215 2001] ) ] spids: [16777215 2014] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-z)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(get_merge_tool_cmd)} {(DQ ($ VSub_Name '$merge_tool'))}) ] ) left_token: <Left_CommandSub '$('> spids: [2024 2030] ) ) } ) (Pipeline children: [ (SimpleCommand words: [{(type)} {(DQ ($ VSub_Name '$merge_tool_path'))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [2044] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [2047] ) ] ) ] negated: T ) ] ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ('The ') ($ VSub_Name '$TOOL_MODE') (' tool ') ($ VSub_Name '$merge_tool') (' is not available as') ) } {(DQ ("'") ($ VSub_Name '$merge_tool_path') ("'"))} ] redirects: [ (Redir op_id: Redir_GreatAnd fd: 16777215 arg_word: {(2)} spids: [2056] ) ] ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 2051] ) ] spids: [16777215 2080] ) (C {(echo)} {(DQ ($ VSub_Name '$merge_tool_path'))}) ] spids: [1889] ) spids: [1884 1888] ) (FuncDef name: get_merge_tool body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(get_configured_merge_tool)})]) left_token: <Left_CommandSub '$('> spids: [2105 2107] ) } spids: [2104] ) ] spids: [2104] ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$merge_tool'))})] action: [ (AndOr ops: [Op_DPipe] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:merge_tool) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(guess_merge_tool)})]) left_token: <Left_CommandSub '$('> spids: [2129 2131] ) } spids: [2128] ) ] spids: [2128] ) (ControlFlow token:<ControlFlow_Exit exit>) ] ) ] spids: [16777215 2125] ) ] spids: [16777215 2138] ) (C {(echo)} {(DQ ($ VSub_Name '$merge_tool'))}) ] spids: [2097] ) spids: [2092 2096] ) (FuncDef name: mergetool_find_win32_cmd body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:executable) op: Equal rhs: {($ VSub_Number '$1')} spids: [2158] ) ] spids: [2158] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sub_directory) op: Equal rhs: {($ VSub_Number '$2')} spids: [2162] ) ] spids: [2162] ) (If arms: [ (if_arm cond: [ (SimpleCommand words: [{(type)} {(-p)} {(DQ ($ VSub_Name '$executable'))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [2181] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [2184] ) ] ) ] action: [ (C {(printf)} {(SQ <'%s'>)} {(DQ ($ VSub_Name '$executable'))}) (ControlFlow token:<ControlFlow_Return return>) ] spids: [16777215 2188] ) ] spids: [16777215 2205] ) (ForEach iter_name: directory iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(env)}) (C {(grep)} {(-Ei)} {(SQ <'^PROGRAM(FILES(\\(X86\\))?|W6432)='>)}) (C {(cut)} {(-d)} {(SQ <'='>)} {(-f)} {(2-)}) (C {(sort)} {(-u)}) ] negated: F ) ] ) left_token: <Left_CommandSub '$('> spids: [2219 2252] ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name '$directory'))}) (C {(test)} {(-x)} { (DQ ($ VSub_Name '$directory') (/) ($ VSub_Name '$sub_directory') (/) ($ VSub_Name '$executable') ) } ) ] ) ] action: [ (C {(printf)} {(SQ <'%s'>)} { (DQ ($ VSub_Name '$directory') (/) ($ VSub_Name '$sub_directory') (/) ($ VSub_Name '$executable') ) } ) (ControlFlow token: <ControlFlow_Return return> ) ] spids: [16777215 2283] ) ] spids: [16777215 2304] ) ] spids: [2255 2307] ) spids: [2218 16777215] ) (C {(printf)} {(SQ <'%s'>)} {(DQ ($ VSub_Name '$executable'))}) ] spids: [2155] ) spids: [2150 2154] ) ] )