(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: [-1 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 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: -1 arg_word: {(/dev/null)} spids: [92] ) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[95]) ] ) ] op_id: Op_DAmp ) ] 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") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} {(DQ ($ VSub_Name "$line_prefix"))} {(DQ ($ VSub_Name "$toolname"))} ) ] spids: [146 183] ) ) ] negated: False ) ] 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: [197 201] ) } spids: [196] ) (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: [204 207] ) } spids: [203] ) (assign_pair lhs: (LhsName name:preamble) op: Equal rhs: { (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{}) spids: [210 213] ) } spids: [209] ) ] spids: [196] ) (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: [217 220] ) } spids: [216] ) ] spids: [216] ) (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: [224 227] ) } spids: [223] ) ] spids: [223] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:shown_any) op:Equal rhs:{(SQ )} spids:[231])] spids: [231] ) (Pipeline children: [ (Subshell child: (AndOr children: [(C {(cd)} {(DQ ($ VSub_Name "$MERGE_TOOLS_DIR"))}) (C {(ls)})] op_id: Op_DAmp ) spids: [234 246] ) (BraceGroup children: [ (While cond: [(C {(read)} {(toolname)})] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (AndOr children: [ (SimpleCommand words: [{(setup_tool)} {(DQ ($ VSub_Name "$toolname"))}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [271] ) ] ) (Subshell child: (C {(eval)} {(DQ ($ VSub_Name "$condition"))} {(DQ ($ VSub_Name "$toolname"))} ) spids: [277 287] ) ] op_id: Op_DAmp ) ] action: [ (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$preamble"))})] action: [ (C {(printf)} { (DQ ("%s") (EscapedLiteralPart token: <Lit_EscapedChar "\\n"> ) ) } {(DQ ($ VSub_Name "$preamble"))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:preamble) op: Equal rhs: {(SQ )} spids: [319] ) ] spids: [319] ) ] spids: [-1 304] ) ] spids: [-1 322] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:shown_any) op: Equal rhs: {(yes)} spids: [325] ) ] spids: [325] ) (C {(printf)} { (DQ ("%s%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">)) } {(DQ ($ VSub_Name "$per_line_prefix"))} {(DQ ($ VSub_Name "$toolname"))} ) ] spids: [-1 290] ) ] spids: [-1 345] ) ] spids: [260 348] ) ) (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: {(SQ )} spids: [399] ) ] spids: [399] ) ] spids: [-1 377] ) ] spids: [-1 402] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:shown_any) op: Equal rhs: {(yes)} spids: [405] ) ] spids: [405] ) (C {(printf)} { (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ("%s") (EscapedLiteralPart token: <Lit_EscapedChar "\\n"> ) ) } {(DQ ($ VSub_Name "$extra_content"))} ) ] spids: [-1 363] ) ] spids: [-1 422] ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$preamble"))}) (C {(test)} {(-n)} {(DQ ($ VSub_Name "$not_found_msg"))}) ] op_id: Op_DAmp ) ] action: [ (C {(printf)} {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} {(DQ ($ VSub_Name "$not_found_msg"))} ) ] spids: [-1 447] ) ] spids: [-1 462] ) (C {(test)} {(-n)} {(DQ ($ VSub_Name "$shown_any"))}) ] spids: [250] ) ] negated: False ) ] spids: [193] ) spids: [188 192] ) (FuncDef name: diff_mode body: (BraceGroup children: [(C {(test)} {(DQ ($ VSub_Name "$TOOL_MODE"))} {(Lit_Other "=")} {(diff)})] spids: [484] ) spids: [480 483] ) (FuncDef name: merge_mode body: (BraceGroup children: [(C {(test)} {(DQ ($ VSub_Name "$TOOL_MODE"))} {(Lit_Other "=")} {(merge)})] spids: [504] ) spids: [500 503] ) (FuncDef name: translate_merge_tool_path body: (BraceGroup children:[(C {(echo)} {(DQ ($ VSub_Number "$1"))})] spids:[525]) spids: [520 524] ) (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: [-1 560] ) ] 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 children: [ (C {(read)} {(answer)}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] op_id: Op_DPipe ) (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: [614 619 625 -1] ) (case_arm pat_list: [{(n) (Lit_Other "*")} {(N) (Lit_Other "*")}] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [628 633 639 -1] ) ] spids: [605 611 642] ) ] spids: [576 645] ) ) ] spids: [568 648] ) ] spids: [542] ) spids: [537 541] ) (FuncDef name: valid_tool body: (BraceGroup children: [ (AndOr children: [ (C {(setup_tool)} {(DQ ($ VSub_Number "$1"))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] op_id: Op_DAmp ) (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: [675 681] ) } spids: [674] ) ] spids: [674] ) (C {(test)} {(-n)} {(DQ ($ VSub_Name "$cmd"))}) ] spids: [658] ) spids: [653 657] ) (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: [704 710] ) } spids: [703] ) ] spids: [703] ) (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$merge_tool_cmd"))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] op_id: Op_DPipe ) (FuncDef name: diff_cmd body: (BraceGroup children: [ (Subshell child: (C {(eval)} {($ VSub_Name "$merge_tool_cmd")}) spids: [737 743] ) ] spids: [734] ) spids: [729 733] ) (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 children: [ (C {(git)} {(config)} {(--bool)} {(DQ (mergetool.) ($ VSub_Number "$1") (.trustExitCode))} ) (C {(echo)} {(false)}) ] op_id: Op_DPipe ) ] ) left_token: <Left_CommandSub "$("> spids: [759 779] ) } spids: [758] ) ] spids: [758] ) (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: [807 813] ) (C {(check_unchanged)}) ] spids: [-1 797] ) ] else_action: [ (Subshell child: (C {(eval)} {($ VSub_Name "$merge_tool_cmd")}) spids: [822 828] ) ] spids: [819 831] ) ] spids: [755] ) spids: [750 754] ) ] spids: [700] ) spids: [695 699] ) (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: [847] ) ] spids: [847] ) (FuncDef name: can_merge body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [863] ) spids: [858 862] ) (FuncDef name: can_diff body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [880] ) spids: [875 879] ) (FuncDef name: diff_cmd body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [897] ) spids: [892 896] ) (FuncDef name: merge_cmd body: (BraceGroup children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [914] ) spids: [909 913] ) (FuncDef name: translate_merge_tool_path body: (BraceGroup children:[(C {(echo)} {(DQ ($ VSub_Number "$1"))})] spids:[931]) spids: [926 930] ) (If arms: [ (if_arm cond: [ (Pipeline children: [ (C {(test)} {(-f)} {(DQ ($ VSub_Name "$MERGE_TOOLS_DIR") (/) ($ VSub_Name "$tool"))} ) ] negated: True ) ] action: [ (C {(setup_user_tool)}) (ControlFlow token: <ControlFlow_Return return> arg_word: {($ VSub_QMark "$?")} ) ] spids: [-1 960] ) ] spids: [-1 971] ) (C {(.)} {(DQ ($ VSub_Name "$MERGE_TOOLS_DIR") (/) ($ VSub_Name "$tool"))}) (C {(setup_user_tool)}) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(merge_mode)}) (Pipeline children:[(C {(can_merge)})] negated:True) ] op_id: Op_DAmp ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("error: '") ($ VSub_Name "$tool") ("' can not be used to resolve merges") ) } ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1022])] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [-1 1011] ) (if_arm cond: [ (AndOr children: [(C {(diff_mode)}) (Pipeline children:[(C {(can_diff)})] negated:True)] op_id: Op_DAmp ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("error: '") ($ VSub_Name "$tool") ("' can only be used to resolve merges") ) } ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1053])] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [1031 1042] ) ] spids: [-1 1062] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [844] ) spids: [839 843] ) (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: [1080] ) ] spids: [1080] ) (If arms: [ (if_arm cond: [(C {(diff_mode)})] action: [ (AndOr children: [ (C {(git)} {(config)} {(DQ (difftool.) ($ VSub_Name "$merge_tool") (.cmd))}) (C {(git)} {(config)} {(DQ (mergetool.) ($ VSub_Name "$merge_tool") (.cmd))}) ] op_id: Op_DPipe ) ] spids: [-1 1091] ) ] else_action: [ (C {(git)} {(config)} {(DQ (mergetool.) ($ VSub_Name "$merge_tool") (.cmd))}) ] spids: [1118 1132] ) ] spids: [1077] ) spids: [1072 1076] ) (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: [1157 1161] ) } spids: [1156] ) ] spids: [1156] ) (C {(export)} {(GIT_PREFIX)}) (AndOr 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: [1171 1177] ) } spids: [1170] ) ] spids: [1170] ) (C {(exit)}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:base_present) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [1184] ) ] spids: [1184] ) (AndOr children: [ (C {(setup_tool)} {(DQ ($ VSub_Number "$1"))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] op_id: Op_DPipe ) (If arms: [ (if_arm cond: [(C {(merge_mode)})] action: [(C {(run_merge_cmd)} {(DQ ($ VSub_Number "$1"))})] spids: [-1 1214] ) ] else_action: [(C {(run_diff_cmd)} {(DQ ($ VSub_Number "$1"))})] spids: [1224 1234] ) ] spids: [1145] ) spids: [1140 1144] ) (FuncDef name: run_diff_cmd body: (BraceGroup children:[(C {(diff_cmd)} {(DQ ($ VSub_Number "$1"))})] spids:[1247]) spids: [1242 1246] ) (FuncDef name: run_merge_cmd body: (BraceGroup children:[(C {(merge_cmd)} {(DQ ($ VSub_Number "$1"))})] spids:[1267]) spids: [1262 1266] ) (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: [1295] ) ] spids: [1295] ) ] spids: [-1 1292] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ (kompare))} spids: [1304] ) ] spids: [1304] ) ] spids: [1301 1310] ) (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: [1341] ) ] spids: [1341] ) ] spids: [-1 1338] ) ] 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: [1351] ) ] spids: [1351] ) ] spids: [1348 1358] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ ($ VSub_Name "$tools") (" gvimdiff diffuse diffmerge ecmerge"))} spids: [1361] ) ] spids: [1361] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tools) op: Equal rhs: {(DQ ($ VSub_Name "$tools") (" p4merge araxis bc codecompare"))} spids: [1368] ) ] spids: [1368] ) ] spids: [-1 1324] ) ] spids: [-1 1375] ) (Case to_match: { (DQ (BracedVarSub token: <VSub_Name VISUAL> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {($ VSub_Name "$EDITOR")} ) spids: [1381 1385] ) ) } 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: [1397] ) ] spids: [1397] ) ] spids: [1391 1394 1404 -1] ) (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: [1411] ) ] spids: [1411] ) ] spids: [1407 1408 1418 -1] ) ] spids: [1378 1388 1421] ) ] spids: [1284] ) spids: [1279 1283] ) (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: [1434] ) ] spids: [1434] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:tab) op:Equal rhs:{(SQ <"\t">)} spids:[1445])] spids: [1445] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:LF) op:Equal rhs:{(SQ <"\n">)} spids:[1451])] spids: [1451] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:any_shown) op:Equal rhs:{(no)} spids:[1457])] spids: [1457] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:cmd_name) op: Equal rhs: {(${ VSub_Name TOOL_MODE) (tool)} spids: [1462] ) ] spids: [1462] ) (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 children: [ (C {(diff_mode)}) (C {(list_config_tools)} {(difftool)} {(DQ ($ VSub_Name "$tab") ($ VSub_Name "$tab"))} ) ] op_id: Op_DAmp ) (C {(list_config_tools)} {(mergetool)} {(DQ ($ VSub_Name "$tab") ($ VSub_Name "$tab"))} ) ] spids: [1471] ) (C {(sort)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [1470 1503] ) } spids: [1469] ) ] spids: [1469] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:extra_content) op: Equal rhs: {(SQ )} spids: [1506] ) ] spids: [1506] ) (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: [1523] ) ] spids: [1523] ) ] spids: [-1 1520] ) ] spids: [-1 1536] ) (AndOr 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: [1575] ) ] spids: [1575] ) ] op_id: Op_DAmp ) (AndOr 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: [1603] ) ] spids: [1603] ) ] op_id: Op_DAmp ) (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: [-1 1621] ) ] spids: [-1 1641] ) (C {(exit)} {(0)}) ] spids: [1431] ) spids: [1426 1430] ) (FuncDef name: guess_merge_tool body: (BraceGroup children: [ (C {(list_merge_tool_candidates)}) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1664]) (HereDoc op_id: Redir_DLessDash fd: -1 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: True spids: [1667] ) ] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{(SQ <" ">)} spids:[1692])] spids: [1692] ) (ForEach iter_name: tool iter_words: [{($ VSub_Name "$tools")}] do_arg_iter: False body: (DoGroup children: [ (AndOr children: [ (C {(is_available)} {(DQ ($ VSub_Name "$tool"))}) (AndOr children: [ (C {(echo)} {(DQ ($ VSub_Name "$tool"))}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [1707 1731] ) spids: [1703 -1] ) (SimpleCommand words: [{(echo)} {(DQ ("No known ") (${ VSub_Name TOOL_MODE) (" tool is available."))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1737])] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [1656] ) spids: [1651 1655] ) (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 children: [ (C {(git)} {(config)} {(diff.tool)}) (C {(git)} {(config)} {(merge.tool)}) ] op_id: Op_DPipe ) ] ) left_token: <Left_CommandSub "$("> spids: [1781 1795] ) } spids: [1780] ) ] spids: [1780] ) ] spids: [-1 1777] ) ] 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: [1802 1808] ) } spids: [1801] ) ] spids: [1801] ) ] spids: [1798 1811] ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$merge_tool"))}) (Pipeline children: [(C {(valid_tool)} {(DQ ($ VSub_Name "$merge_tool"))})] negated: True ) ] op_id: Op_DAmp ) ] 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:-1 arg_word:{(2)} spids:[1840])] ) (SimpleCommand words: [{(echo)} {(DQ ("Resetting to default..."))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1853])] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [-1 1835] ) ] spids: [-1 1866] ) (C {(echo)} {(DQ ($ VSub_Name "$merge_tool"))}) ] spids: [1761] ) spids: [1756 1760] ) (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: [1890] ) ] spids: [1890] ) (If arms: [ (if_arm cond: [ (Pipeline children: [(C {(valid_tool)} {(DQ ($ VSub_Name "$merge_tool"))})] negated: True ) ] action: [ (SimpleCommand words: [{(echo)} {(DQ ("Unknown merge tool ") ($ VSub_Name "$merge_tool"))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1912])] ) (C {(exit)} {(1)}) ] spids: [-1 1907] ) ] spids: [-1 1926] ) (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 children: [ (C {(git)} {(config)} {(difftool.) (DQ ($ VSub_Name "$merge_tool")) (.path)} ) (C {(git)} {(config)} {(mergetool.) (DQ ($ VSub_Name "$merge_tool")) (.path)} ) ] op_id: Op_DPipe ) ] ) left_token: <Left_CommandSub "$("> spids: [1938 1961] ) } spids: [1937] ) ] spids: [1937] ) ] spids: [-1 1934] ) ] 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: [1968 1978] ) } spids: [1967] ) ] spids: [1967] ) ] spids: [1964 1981] ) (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: [1999 2005] ) } spids: [1998] ) ] spids: [1998] ) ] spids: [-1 1995] ) ] spids: [-1 2008] ) (If arms: [ (if_arm cond: [ (AndOr 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: [2018 2024] ) ) } ) (Pipeline children: [ (SimpleCommand words: [{(type)} {(DQ ($ VSub_Name "$merge_tool_path"))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/dev/null)} spids: [2038] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [2041] ) ] ) ] negated: True ) ] op_id: Op_DAmp ) ] 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:-1 arg_word:{(2)} spids:[2050])] ) (C {(exit)} {(1)}) ] spids: [-1 2045] ) ] spids: [-1 2074] ) (C {(echo)} {(DQ ($ VSub_Name "$merge_tool_path"))}) ] spids: [1883] ) spids: [1878 1882] ) (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: [2099 2101] ) } spids: [2098] ) ] spids: [2098] ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$merge_tool"))})] action: [ (AndOr 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: [2123 2125] ) } spids: [2122] ) ] spids: [2122] ) (C {(exit)}) ] op_id: Op_DPipe ) ] spids: [-1 2119] ) ] spids: [-1 2132] ) (C {(echo)} {(DQ ($ VSub_Name "$merge_tool"))}) ] spids: [2091] ) spids: [2086 2090] ) (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: [2152] ) ] spids: [2152] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sub_directory) op: Equal rhs: {($ VSub_Number "$2")} spids: [2156] ) ] spids: [2156] ) (If arms: [ (if_arm cond: [ (SimpleCommand words: [{(type)} {(-p)} {(DQ ($ VSub_Name "$executable"))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/dev/null)} spids: [2175] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [2178] ) ] ) ] action: [ (C {(printf)} {(SQ <"%s">)} {(DQ ($ VSub_Name "$executable"))}) (ControlFlow token:<ControlFlow_Return return>) ] spids: [-1 2182] ) ] spids: [-1 2199] ) (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: False ) ] ) left_token: <Left_CommandSub "$("> spids: [2213 2246] ) } ] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$directory"))}) (C {(test)} {(-x)} { (DQ ($ VSub_Name "$directory") (/) ($ VSub_Name "$sub_directory") (/) ($ VSub_Name "$executable") ) } ) ] op_id: Op_DAmp ) ] action: [ (C {(printf)} {(SQ <"%s">)} { (DQ ($ VSub_Name "$directory") (/) ($ VSub_Name "$sub_directory") (/) ($ VSub_Name "$executable") ) } ) (ControlFlow token: <ControlFlow_Return return> ) ] spids: [-1 2277] ) ] spids: [-1 2298] ) ] spids: [2249 2301] ) spids: [2212 -1] ) (C {(printf)} {(SQ <"%s">)} {(DQ ($ VSub_Name "$executable"))}) ] spids: [2149] ) spids: [2144 2148] ) ] )