(List (= scope= flags=0 words=[] bindings=[('USAGE', {[SQ ] [file to merge] ...">]})]) (= scope= flags=0 words=[] bindings=[('SUBDIRECTORY_OK', {[LIT_CHARS Yes]})]) (= scope= flags=0 words=[] bindings=[('NONGIT_OK', {[LIT_CHARS Yes]})]) (= scope= flags=0 words=[] bindings=[('OPTIONS_SPEC', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('TOOL_MODE', {[LIT_CHARS merge]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS git-sh-setup]}) (Com {[LIT_CHARS .]} {[LIT_CHARS git-mergetool--lib]}) (FunctionDef is_symlink [] (Com {[LIT_CHARS test]} {[DQ [VarSub 1]]} {[LIT_OTHER "="]} {[LIT_CHARS 120000]}) ) (FunctionDef is_submodule [] (Com {[LIT_CHARS test]} {[DQ [VarSub 1]]} {[LIT_OTHER "="]} {[LIT_CHARS 160000]}) ) (FunctionDef local_present [] (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub local_mode]]}) ) (FunctionDef remote_present [] (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub remote_mode]]}) ) (FunctionDef base_present [] (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub base_mode]]}) ) (FunctionDef mergetool_tmpdir_init [] (List (If (Com {[LIT_CHARS test]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS mergetool.writeToTemp]})]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS true]}) (List (= scope= flags=0 words=[] bindings=[('MERGETOOL_TMPDIR', {[LIT_CHARS .]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) ) (If (= scope= flags=0 words=[] bindings=[('MERGETOOL_TMPDIR', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS mktemp]} {[LIT_CHARS -d]} {[LIT_CHARS -t]} {[DQ [LIT_CHARS git-mergetool-XXXXXX]]})]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "error: mktemp is needed when 'mergetool.writeToTemp' is true"]]}) ) ) (FunctionDef cleanup_temp_files [] (List (If (Com {[LIT_CHARS test]} {[DQ [VarSub 1]]} {[LIT_OTHER "="]} {[LIT_CHARS --save-backup]}) (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS --]} {[DQ [VarSub MERGED][LIT_CHARS .orig]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub BACKUP]]}) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub BACKUP]]} {[DQ [VarSub MERGED][LIT_CHARS .orig]]}) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS --]} {[DQ [VarSub LOCAL]]} {[DQ [VarSub REMOTE]]} {[DQ [VarSub BASE]]}) ) (ElseTrue) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS --]} {[DQ [VarSub LOCAL]]} {[DQ [VarSub REMOTE]]} {[DQ [VarSub BASE]]} {[DQ [VarSub BACKUP]]}) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub MERGETOOL_TMPDIR]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS .]]}) (Com {[LIT_CHARS rmdir]} {[DQ [VarSub MERGETOOL_TMPDIR]]}) ) ) ) (FunctionDef describe_file [] (List (= scope= flags=0 words=[] bindings=[('mode', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('branch', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('file', {[DQ [VarSub 3]]})]) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS " {%s}: "]]} {[DQ [VarSub branch]]}) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub mode]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS deleted]]}) (Com {[LIT_CHARS is_symlink]} {[DQ [VarSub mode]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "a symbolic link -> '"][ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub file]]})][LIT_CHARS "'"]]}) (Com {[LIT_CHARS is_submodule]} {[DQ [VarSub mode]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "submodule commit "][VarSub file]]}) (Com {[LIT_CHARS base_present]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "modified file"]]}) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "created file"]]}) ) ) ) (FunctionDef resolve_symlink_merge [] (While (Com {[LIT_CHARS true]}) (List (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Use (l)ocal or (r)emote, or (a)bort? "]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS read]} {[LIT_CHARS ans]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Case to_match={[DQ [VarSub ans]]}, pat_word_list=[[{[LIT_OTHER "["] [LIT_CHARS lL] [LIT_OTHER "]"] [LIT_OTHER "*"]}], [{[LIT_OTHER "["] [LIT_CHARS rR] [LIT_OTHER "]"] [LIT_OTHER "*"]}], [{[LIT_OTHER "["] [LIT_CHARS aA] [LIT_OTHER "]"] [LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS git]} {[LIT_CHARS checkout-index]} {[LIT_CHARS -f]} {[LIT_CHARS --stage] [LIT_OTHER "="] [LIT_CHARS 2]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS cleanup_temp_files]} {[LIT_CHARS --save-backup]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (List (Com {[LIT_CHARS git]} {[LIT_CHARS checkout-index]} {[LIT_CHARS -f]} {[LIT_CHARS --stage] [LIT_OTHER "="] [LIT_CHARS 3]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS cleanup_temp_files]} {[LIT_CHARS --save-backup]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) ) ) (FunctionDef resolve_deleted_merge [] (While (Com {[LIT_CHARS true]}) (List (If (Com {[LIT_CHARS base_present]}) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Use (m)odified or (d)eleted file, or (a)bort? "]]}) (ElseTrue) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Use (c)reated or (d)eleted file, or (a)bort? "]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS read]} {[LIT_CHARS ans]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Case to_match={[DQ [VarSub ans]]}, pat_word_list=[[{[LIT_OTHER "["] [LIT_CHARS mMcC] [LIT_OTHER "]"] [LIT_OTHER "*"]}], [{[LIT_OTHER "["] [LIT_CHARS dD] [LIT_OTHER "]"] [LIT_OTHER "*"]}], [{[LIT_OTHER "["] [LIT_CHARS aA] [LIT_OTHER "]"] [LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub merge_keep_backup]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS true]]}) (Com {[LIT_CHARS cleanup_temp_files]} {[LIT_CHARS --save-backup]}) (ElseTrue) (Com {[LIT_CHARS cleanup_temp_files]}) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (List (Com {[LIT_CHARS git]} {[LIT_CHARS rm]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS cleanup_temp_files]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (List (If (Com {[LIT_CHARS test]} {[DQ [VarSub merge_keep_temporaries]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS false]]}) (Com {[LIT_CHARS cleanup_temp_files]}) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) ) ) ) (FunctionDef resolve_submodule_merge [] (While (Com {[LIT_CHARS true]}) (List (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Use (l)ocal or (r)emote, or (a)bort? "]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS read]} {[LIT_CHARS ans]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Case to_match={[DQ [VarSub ans]]}, pat_word_list=[[{[LIT_OTHER "["] [LIT_CHARS lL] [LIT_OTHER "]"] [LIT_OTHER "*"]}], [{[LIT_OTHER "["] [LIT_CHARS rR] [LIT_OTHER "]"] [LIT_OTHER "*"]}], [{[LIT_OTHER "["] [LIT_CHARS aA] [LIT_OTHER "]"] [LIT_OTHER "*"]}]] (List (If (Pipeline! (Com {[LIT_CHARS local_present]}) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS ls-tree]} {[LIT_CHARS HEAD]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]})]]}) (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-tree]} {[LIT_CHARS --full-name]} {[LIT_CHARS -r]} {[LIT_CHARS HEAD]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --index-info]}) ) (Com {[LIT_CHARS exit]} {[VarSub ?]}) ) (ElseTrue) (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]} {[DQ [VarSub BACKUP]]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --force-remove]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS cleanup_temp_files]} {[LIT_CHARS --save-backup]}) ) ) (Com {[LIT_CHARS is_submodule]} {[DQ [VarSub local_mode]]}) (Com {[LIT_CHARS stage_submodule]} {[DQ [VarSub MERGED]]} {[DQ [VarSub local_sha1]]}) (ElseTrue) (List (Com {[LIT_CHARS git]} {[LIT_CHARS checkout-index]} {[LIT_CHARS -f]} {[LIT_CHARS --stage] [LIT_OTHER "="] [LIT_CHARS 2]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) ) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (List (If (Pipeline! (Com {[LIT_CHARS remote_present]}) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS ls-tree]} {[LIT_CHARS MERGE_HEAD]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]})]]}) (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-tree]} {[LIT_CHARS --full-name]} {[LIT_CHARS -r]} {[LIT_CHARS MERGE_HEAD]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --index-info]}) ) (Com {[LIT_CHARS exit]} {[VarSub ?]}) ) (ElseTrue) (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]} {[DQ [VarSub BACKUP]]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --force-remove]} {[DQ [VarSub MERGED]]}) ) ) (Com {[LIT_CHARS is_submodule]} {[DQ [VarSub remote_mode]]}) (List (AndOr OP_AND_IF (Pipeline! (Com {[LIT_CHARS is_submodule]} {[DQ [VarSub local_mode]]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]} {[DQ [VarSub BACKUP]]}) ) ) (Com {[LIT_CHARS stage_submodule]} {[DQ [VarSub MERGED]]} {[DQ [VarSub remote_sha1]]}) ) (ElseTrue) (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]} {[DQ [VarSub BACKUP]]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS checkout-index]} {[LIT_CHARS -f]} {[LIT_CHARS --stage] [LIT_OTHER "="] [LIT_CHARS 3]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) ) ) (Com {[LIT_CHARS cleanup_temp_files]} {[LIT_CHARS --save-backup]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) ) ) (FunctionDef stage_submodule [] (List (= scope= flags=0 words=[] bindings=[('path', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('submodule_sha1', {[DQ [VarSub 2]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub path]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "fatal: unable to create directory for module at "][VarSub path]]}) ) (= scope= flags=0 words=[] bindings=[('work_tree_root', {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd_to_toplevel]}) (Com {[LIT_CHARS pwd]}) )]})]) (= scope= flags=0 words=[] bindings=[('work_rel_path', {[ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [VarSub path]]}) (Com more_env=[('GIT_WORK_TREE', {[DQ [VarSub work_tree_root]]})] {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --show-prefix]}) )]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub work_rel_path]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "fatal: unable to get path of module "][VarSub path][LIT_CHARS " relative to work tree"]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --add]} {[LIT_CHARS --replace]} {[LIT_CHARS --cacheinfo]} {[LIT_CHARS 160000]} {[DQ [VarSub submodule_sha1]]} {[DQ [VarSub work_rel_path transform_ops=[VS_UNARY_PERCENT {[LIT_SLASH /]}]]]}) (Com {[LIT_CHARS die]}) ) ) ) (FunctionDef checkout_staged_file [] (List (= scope= flags=0 words=[] bindings=[('tmpfile', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS checkout-index]} {[LIT_CHARS --temp]} {[LIT_CHARS --stage] [LIT_OTHER "="] [DQ [VarSub 1]]} {[DQ [VarSub 2]]})]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[VarSub ?]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub tmpfile]]}) ) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --show-cdup]})][VarSub tmpfile]]} {[DQ [VarSub 3]]}) (ElseTrue) (Com < (FilenameRedirectNode filename={[DQ [VarSub 3]]} "> 1), > ) ) ) ) (FunctionDef merge_file [] (List (= scope= flags=0 words=[] bindings=[('MERGED', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('f', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]})]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub f]]}) (List (If (Com {[LIT_CHARS test]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS echo]} {[DQ [VarSub MERGED][LIT_CHARS ": file not found"]]}) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [VarSub MERGED][LIT_CHARS ": file does not need merging"]]}) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) (If (= scope= flags=0 words=[] bindings=[('BASE', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub MERGED]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (= scope= flags=0 words=[] bindings=[('ext', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub MERGED]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('BASE', {[VarSub MERGED]})]) (= scope= flags=0 words=[] bindings=[('ext', {[SQ ]})]) ) ) (Com {[LIT_CHARS mergetool_tmpdir_init]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub MERGETOOL_TMPDIR]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS .]]}) (= scope= flags=0 words=[] bindings=[('BASE', {[VarSub BASE transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "*"] [LIT_SLASH /]}]]})]) ) (= scope= flags=0 words=[] bindings=[('BACKUP', {[DQ [VarSub MERGETOOL_TMPDIR][LIT_CHARS /][VarSub BASE][LIT_CHARS _BACKUP_][VarSub $][VarSub ext]]})]) (= scope= flags=0 words=[] bindings=[('LOCAL', {[DQ [VarSub MERGETOOL_TMPDIR][LIT_CHARS /][VarSub BASE][LIT_CHARS _LOCAL_][VarSub $][VarSub ext]]})]) (= scope= flags=0 words=[] bindings=[('REMOTE', {[DQ [VarSub MERGETOOL_TMPDIR][LIT_CHARS /][VarSub BASE][LIT_CHARS _REMOTE_][VarSub $][VarSub ext]]})]) (= scope= flags=0 words=[] bindings=[('BASE', {[DQ [VarSub MERGETOOL_TMPDIR][LIT_CHARS /][VarSub BASE][LIT_CHARS _BASE_][VarSub $][VarSub ext]]})]) (= scope= flags=0 words=[] bindings=[('base_mode', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('local_mode', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('remote_mode', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (If (AndOr OP_OR_IF (Com {[LIT_CHARS is_submodule]} {[DQ [VarSub local_mode]]}) (Com {[LIT_CHARS is_submodule]} {[DQ [VarSub remote_mode]]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Submodule merge conflict for '"][VarSub MERGED][LIT_CHARS "':"]]}) (= scope= flags=0 words=[] bindings=[('local_sha1', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('remote_sha1', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub local_mode]]} {[DQ [LIT_CHARS local]]} {[DQ [VarSub local_sha1]]}) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub remote_mode]]} {[DQ [LIT_CHARS remote]]} {[DQ [VarSub remote_sha1]]}) (Com {[LIT_CHARS resolve_submodule_merge]}) (Com {[LIT_CHARS return]}) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub MERGED]]}) (List (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]} {[DQ [VarSub BACKUP]]}) (Com {[LIT_CHARS cp]} {[LIT_CHARS --]} {[DQ [VarSub BACKUP]]} {[DQ [VarSub MERGED]]}) ) ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub MERGED]]})]]}) (Com {[LIT_CHARS checkout_staged_file]} {[LIT_CHARS 1]} {[DQ [VarSub MERGED]]} {[DQ [VarSub BASE]]}) (Com {[LIT_CHARS checkout_staged_file]} {[LIT_CHARS 2]} {[DQ [VarSub MERGED]]} {[DQ [VarSub LOCAL]]}) (Com {[LIT_CHARS checkout_staged_file]} {[LIT_CHARS 3]} {[DQ [VarSub MERGED]]} {[DQ [VarSub REMOTE]]}) (If (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub local_mode]]}) (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub remote_mode]]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Deleted merge conflict for '"][VarSub MERGED][LIT_CHARS "':"]]}) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub local_mode]]} {[DQ [LIT_CHARS local]]} {[DQ [VarSub LOCAL]]}) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub remote_mode]]} {[DQ [LIT_CHARS remote]]} {[DQ [VarSub REMOTE]]}) (Com {[LIT_CHARS resolve_deleted_merge]}) (= scope= flags=0 words=[] bindings=[('status', {[VarSub ?]})]) (Com {[LIT_CHARS rmdir]} {[LIT_CHARS -p]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub MERGED]]})]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS return]} {[VarSub status]}) ) ) (If (AndOr OP_OR_IF (Com {[LIT_CHARS is_symlink]} {[DQ [VarSub local_mode]]}) (Com {[LIT_CHARS is_symlink]} {[DQ [VarSub remote_mode]]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Symbolic link merge conflict for '"][VarSub MERGED][LIT_CHARS "':"]]}) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub local_mode]]} {[DQ [LIT_CHARS local]]} {[DQ [VarSub LOCAL]]}) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub remote_mode]]} {[DQ [LIT_CHARS remote]]} {[DQ [VarSub REMOTE]]}) (Com {[LIT_CHARS resolve_symlink_merge]}) (Com {[LIT_CHARS return]}) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Normal merge conflict for '"][VarSub MERGED][LIT_CHARS "':"]]}) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub local_mode]]} {[DQ [LIT_CHARS local]]} {[DQ [VarSub LOCAL]]}) (Com {[LIT_CHARS describe_file]} {[DQ [VarSub remote_mode]]} {[DQ [LIT_CHARS remote]]} {[DQ [VarSub REMOTE]]}) (If (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub guessed_merge_tool]]} {[LIT_OTHER "="]} {[LIT_CHARS true]}) (Com {[LIT_CHARS test]} {[DQ [VarSub prompt]]} {[LIT_OTHER "="]} {[LIT_CHARS true]}) ) (List (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Hit return to start merge resolution tool (%s): "]]} {[DQ [VarSub merge_tool]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS read]} {[LIT_CHARS ans]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) ) (If (Com {[LIT_CHARS base_present]}) (= scope= flags=0 words=[] bindings=[('present', {[LIT_CHARS true]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('present', {[LIT_CHARS false]})]) ) (If (Pipeline! (Com {[LIT_CHARS run_merge_tool]} {[DQ [VarSub merge_tool]]} {[DQ [VarSub present]]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "merge of "][VarSub MERGED][LIT_CHARS " failed"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub BACKUP]]} {[DQ [VarSub MERGED]]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub merge_keep_temporaries]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS false]]}) (Com {[LIT_CHARS cleanup_temp_files]}) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub merge_keep_backup]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS true]]}) (Com {[LIT_CHARS mv]} {[LIT_CHARS --]} {[DQ [VarSub BACKUP]]} {[DQ [VarSub MERGED][LIT_CHARS .orig]]}) (ElseTrue) (Com {[LIT_CHARS rm]} {[LIT_CHARS --]} {[DQ [VarSub BACKUP]]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS add]} {[LIT_CHARS --]} {[DQ [VarSub MERGED]]}) (Com {[LIT_CHARS cleanup_temp_files]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) ) (FunctionDef prompt_after_failed_merge [] (While (Com {[LIT_CHARS true]}) (List (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Continue merging other unresolved paths [y/n]? "]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS read]} {[LIT_CHARS ans]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Case to_match={[DQ [VarSub ans]]}, pat_word_list=[[{[LIT_OTHER "["] [LIT_CHARS yY] [LIT_OTHER "]"] [LIT_OTHER "*"]}], [{[LIT_OTHER "["] [LIT_CHARS nN] [LIT_OTHER "]"] [LIT_OTHER "*"]}]] (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) ) ) ) (FunctionDef print_noop_and_exit [] (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No files need merging"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (FunctionDef main [] (List (= scope= flags=0 words=[] bindings=[('prompt', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS mergetool.prompt]})]})]) (= scope= flags=0 words=[] bindings=[('guessed_merge_tool', {[LIT_CHARS false]})]) (= scope= flags=0 words=[] bindings=[('orderfile', {[SQ ]})]) (While (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (List (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS --tool-help] [LIT_OTHER "="] [LIT_OTHER "*"]}], [{[LIT_CHARS --tool-help]}], [{[LIT_CHARS -t]}, {[LIT_CHARS --tool] [LIT_OTHER "*"]}], [{[LIT_CHARS -y]}, {[LIT_CHARS --no-prompt]}], [{[LIT_CHARS --prompt]}], [{[LIT_CHARS -O] [LIT_OTHER "*"]}], [{[LIT_CHARS --]}], [{[LIT_CHARS -] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('TOOL_MODE', {[VarSub 1 transform_ops=[VS_UNARY_POUND {[LIT_CHARS "--tool-help="]}]]})]) (Com {[LIT_CHARS show_tool_help]}) ) (Com {[LIT_CHARS show_tool_help]}) (Case to_match={[DQ [VarSub #][LIT_CHARS ","][VarSub 1]]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_COMMA ","] [LIT_OTHER "*"] [LIT_OTHER "="] [LIT_OTHER "*"]}], [{[LIT_CHARS 1] [LIT_COMMA ","] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('merge_tool', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [LIT_CHARS z][VarSub 1]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (Com {[LIT_CHARS usage]}) (List (= scope= flags=0 words=[] bindings=[('merge_tool', {[DQ [VarSub 2]]})]) (Com {[LIT_CHARS shift]}) ) ) (= scope= flags=0 words=[] bindings=[('prompt', {[LIT_CHARS false]})]) (= scope= flags=0 words=[] bindings=[('prompt', {[LIT_CHARS true]})]) (= scope= flags=0 words=[] bindings=[('orderfile', {[DQ [VarSub 1]]})]) (List (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS break]}) ) (Com {[LIT_CHARS usage]}) (Com {[LIT_CHARS break]}) ) (Com {[LIT_CHARS shift]}) ) ) (Com {[LIT_CHARS git_dir_init]}) (Com {[LIT_CHARS require_work_tree]}) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub merge_tool]]}) (List (= scope= flags=0 words=[] bindings=[('merge_tool', {[ComSub (Com {[LIT_CHARS get_configured_merge_tool]})]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub merge_tool]]}) (List (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('merge_tool', {[ComSub (Com {[LIT_CHARS guess_merge_tool]})]})]) (Com {[LIT_CHARS exit]}) ) (= scope= flags=0 words=[] bindings=[('guessed_merge_tool', {[LIT_CHARS true]})]) ) ) ) ) (= scope= flags=0 words=[] bindings=[('merge_keep_backup', {[DQ [ComSub (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS mergetool.keepBackup]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS true]}) )]]})]) (= scope= flags=0 words=[] bindings=[('merge_keep_temporaries', {[DQ [ComSub (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS mergetool.keepTemporaries]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS false]}) )]]})]) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_RR]]}) ) (List (Com {[LIT_CHARS set]} {[LIT_CHARS --]} {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rerere]} {[LIT_CHARS remaining]})]}) (If (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS print_noop_and_exit]}) ) ) ) (= scope= flags=0 words=[] bindings=[('files', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS -c]} {[LIT_CHARS core.quotePath] [LIT_OTHER "="] [LIT_CHARS false]} {[LIT_CHARS diff]} {[LIT_CHARS --name-only]} {[LIT_CHARS --diff-filter] [LIT_OTHER "="] [LIT_CHARS U]} {[VarSub orderfile test_op=VS_TEST_COLON_PLUS {[DQ [VarSub orderfile]]}]} {[LIT_CHARS --]} {[DQ [VarSub @]]})]})]) (Com {[LIT_CHARS cd_to_toplevel]}) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub files]]}) (Com {[LIT_CHARS print_noop_and_exit]}) ) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Merging:"][\ LIT_ESCAPED_CHAR "\\n"]]}) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub files]]}) (= scope= flags=0 words=[] bindings=[('rc', {[LIT_CHARS 0]})]) (For i [{[VarSub files]}]) (List (Com {[LIT_CHARS printf]} {[DQ [\ LIT_ESCAPED_CHAR "\\n"]]}) (If (Pipeline! (Com {[LIT_CHARS merge_file]} {[DQ [VarSub i]]}) ) (List (= scope= flags=0 words=[] bindings=[('rc', {[LIT_CHARS 1]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS prompt_after_failed_merge]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) ) ) (Com {[LIT_CHARS exit]} {[VarSub rc]}) ) ) (Com {[LIT_CHARS main]} {[DQ [VarSub @]]}) )