(List (= scope= flags=0 words=[] bindings=[('USAGE', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('SUBDIRECTORY_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]} ) (Com {[LIT_CHARS require_work_tree]} ) (FunctionDef is_symlink [] (Com {[LIT_CHARS test]} {[DQ [VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS 120000]} ) ) (FunctionDef is_submodule [] (Com {[LIT_CHARS test]} {[DQ [VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[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 cleanup_temp_files [] (If (Com {[LIT_CHARS test]} {[DQ [VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[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]]} ) ) ) (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_DBRACKET_LIKE "["] [LIT_CHARS lL] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}], [{[LIT_DBRACKET_LIKE "["] [LIT_CHARS rR] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}], [{[LIT_DBRACKET_LIKE "["] [LIT_CHARS aA] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS git]} {[LIT_CHARS checkout-index]} {[LIT_CHARS -f]} {[LIT_CHARS --stage] [LIT_DBRACKET_LIKE "="] [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_DBRACKET_LIKE "="] [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_DBRACKET_LIKE "["] [LIT_CHARS mMcC] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}], [{[LIT_DBRACKET_LIKE "["] [LIT_CHARS dD] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}], [{[LIT_DBRACKET_LIKE "["] [LIT_CHARS aA] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}]] (List (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 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]} ) ) (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_DBRACKET_LIKE "["] [LIT_CHARS lL] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}], [{[LIT_DBRACKET_LIKE "["] [LIT_CHARS rR] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}], [{[LIT_DBRACKET_LIKE "["] [LIT_CHARS aA] [LIT_DBRACKET_LIKE "]"] [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_DBRACKET_LIKE "="] [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_DBRACKET_LIKE "="] [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_DBRACKET_LIKE "="] [DQ [VarSub 1]]} {[DQ [VarSub 2]]})]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (If (Com {[LIT_CHARS test]} {[VarSub ?]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_CHARS -a]} {[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]} ) ) ) (= scope= flags=0 words=[] bindings=[('ext', {[DQ [VarSub $][ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub MERGED]]} {[LIT_OTHER ":"]} {[SQ ]})]]})]) (= scope= flags=0 words=[] bindings=[('BACKUP', {[DQ [LIT_CHARS ./][VarSub MERGED][LIT_CHARS .BACKUP.][VarSub ext]]})]) (= scope= flags=0 words=[] bindings=[('LOCAL', {[DQ [LIT_CHARS ./][VarSub MERGED][LIT_CHARS .LOCAL.][VarSub ext]]})]) (= scope= flags=0 words=[] bindings=[('REMOTE', {[DQ [LIT_CHARS ./][VarSub MERGED][LIT_CHARS .REMOTE.][VarSub ext]]})]) (= scope= flags=0 words=[] bindings=[('BASE', {[DQ [LIT_CHARS ./][VarSub MERGED][LIT_CHARS .BASE.][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]} ) ) ) (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 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 (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub local_mode]]} {[LIT_CHARS -o]} {[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]} ) (Com {[LIT_CHARS return]} ) ) ) (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 (Com {[DQ [VarSub prompt]]} {[LIT_DBRACKET_LIKE "="]} {[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_DBRACKET_LIKE "="]} {[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_DBRACKET_LIKE "="]} {[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 show_tool_help [] (List (= scope= flags=0 words=[] bindings=[('TOOL_MODE', {[LIT_CHARS merge]})]) (Com {[LIT_CHARS list_merge_tool_candidates]} ) (= scope= flags=0 words=[] bindings=[('unavailable', {[SQ ]}), ('available', {[SQ ]}), ('LF', {[SQ ]})]) (For i [{[VarSub tools]}]) (List (= scope= flags=0 words=[] bindings=[('merge_tool_path', {[ComSub (Com {[LIT_CHARS translate_merge_tool_path]} {[DQ [VarSub i]]})]})]) (If (Com {[LIT_CHARS type]} {[DQ [VarSub merge_tool_path]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (= scope= flags=0 words=[] bindings=[('available', {[DQ [VarSub available][VarSub i][VarSub LF]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('unavailable', {[DQ [VarSub unavailable][VarSub i][VarSub LF]]})]) ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub available]]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "'git mergetool --tool=' may be set to one of the following:"]]} ) (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub available]]} ) (Com {[LIT_CHARS sort]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]} ) ) ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No suitable tool for 'git mergetool --tool=' found."]]} ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub unavailable]]} ) (List (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[SQ ]} ) (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub unavailable]]} ) (Com {[LIT_CHARS sort]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]} ) ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub unavailable][VarSub available]]} ) (List (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Some of the tools listed above only work in a windowed"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "environment. If run in a terminal-only session, they will fail."]]} ) ) ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) ) (= scope= flags=0 words=[] bindings=[('prompt', {[ComSub (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS mergetool.prompt]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS true]}) )]})]) (While (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_NEQUAL "!="]} {[LIT_CHARS 0]} ) (List (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS --tool-help]}], [{[LIT_CHARS -t]}, {[LIT_CHARS --tool] [LIT_OTHER "*"]}], [{[LIT_CHARS -y]}, {[LIT_CHARS --no-prompt]}], [{[LIT_CHARS --prompt]}], [{[LIT_CHARS --]}], [{[LIT_CHARS -] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (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_DBRACKET_LIKE "="] [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]})]) (List (Com {[LIT_CHARS shift]} ) (Com {[LIT_CHARS break]} ) ) (Com {[LIT_CHARS usage]} ) (Com {[LIT_CHARS break]} ) ) (Com {[LIT_CHARS shift]} ) ) ) (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_DBRACKET_LIKE "["] [LIT_CHARS yY] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}], [{[LIT_DBRACKET_LIKE "["] [LIT_CHARS nN] [LIT_DBRACKET_LIKE "]"] [LIT_OTHER "*"]}]] (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub merge_tool]]} ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('merge_tool', {[ComSub (Com {[LIT_CHARS get_merge_tool]} {[DQ [VarSub merge_tool]]})]})]) (Com {[LIT_CHARS exit]} ) ) ) (= 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]}) )]]})]) (= scope= flags=0 words=[] bindings=[('last_status', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('rollup_status', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('files', {[SQ ]})]) (If (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} ) (List (Com {[LIT_CHARS cd_to_toplevel]} ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_RR]]} ) (= scope= flags=0 words=[] bindings=[('files', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rerere]} {[LIT_CHARS remaining]})]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('files', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) (Com {[LIT_CHARS sort]} {[LIT_CHARS -u]}) )]})]) ) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('files', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]} {[LIT_CHARS --]} {[DQ [VarSub @]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) (Com {[LIT_CHARS sort]} {[LIT_CHARS -u]}) )]})]) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub files]]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No files need merging"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) ) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Merging:"][\ LIT_ESCAPED_CHAR "\\n"]]} ) (Com {[LIT_CHARS printf]} {[DQ [VarSub files][\ LIT_ESCAPED_CHAR "\\n"]]} ) (= scope= flags=0 words=[] bindings=[('IFS', {[SQ ]})]) (For i [{[VarSub files]}]) (List (If (Com {[LIT_CHARS test]} {[VarSub last_status]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS prompt_after_failed_merge]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS printf]} {[DQ [\ LIT_ESCAPED_CHAR "\\n"]]} ) (Com {[LIT_CHARS merge_file]} {[DQ [VarSub i]]} ) (= scope= flags=0 words=[] bindings=[('last_status', {[VarSub ?]})]) (If (Com {[LIT_CHARS test]} {[VarSub last_status]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} ) (= scope= flags=0 words=[] bindings=[('rollup_status', {[LIT_CHARS 1]})]) ) ) ) (Com {[LIT_CHARS exit]} {[VarSub rollup_status]} ) )