(List (= scope= flags=0 words=[] bindings=[('OPTIONS_KEEPDASHDASH', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('OPTIONS_SPEC', {[DQ [LIT_CHARS "git merge [options] ...\n"][LIT_CHARS "git merge [options] HEAD \n"][LIT_CHARS "--\n"][LIT_CHARS "stat show a diffstat at the end of the merge\n"][LIT_CHARS "n don't show a diffstat at the end of the merge\n"][LIT_CHARS "summary (synonym to --stat)\n"][LIT_CHARS "log add list of one-line log to merge commit message\n"][LIT_CHARS "squash create a single commit instead of doing a merge\n"][LIT_CHARS "commit perform a commit if the merge succeeds (default)\n"][LIT_CHARS "ff allow fast-forward (default)\n"][LIT_CHARS "ff-only abort if fast-forward is not possible\n"][LIT_CHARS "rerere-autoupdate update index with any reused conflict resolution\n"][LIT_CHARS "s,strategy= merge strategy to use\n"][LIT_CHARS "X= option for selected merge strategy\n"][LIT_CHARS "m,message= message to be used for the merge commit (if any)\n"]]})]) (= scope= flags=0 words=[] bindings=[('SUBDIRECTORY_OK', {[LIT_CHARS Yes]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS git-sh-setup]}) (Com {[LIT_CHARS require_work_tree]}) (Com {[LIT_CHARS cd_to_toplevel]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS -u]})]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Merge is not possible because you have unmerged files."]]}) ) (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_HEAD]]}) ) (Com {[LIT_CHARS die]} {[SQ ]}) ) (= scope= flags=0 words=[] bindings=[('LF', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('all_strategies', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('all_strategies', {[DQ [VarSub all_strategies][LIT_CHARS " recursive-ours recursive-theirs"]]})]) (= scope= flags=0 words=[] bindings=[('not_strategies', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('default_twohead_strategies', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('default_octopus_strategies', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('no_fast_forward_strategies', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('no_trivial_strategies', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('use_strategies', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('xopt', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('allow_fast_forward', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('fast_forward_only', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('allow_trivial_merge', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('squash', {[SQ ]}), ('no_commit', {[SQ ]}), ('log_arg', {[SQ ]}), ('rr_arg', {[SQ ]})]) (FunctionDef dropsave [] (AndOr OP_OR_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS --]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_HEAD]]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_MSG]]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_STASH]]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_MODE]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (FunctionDef savestate [] (Com {[LIT_CHARS git]} {[LIT_CHARS stash]} {[LIT_CHARS create]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_STASH]]} "> 1), > ) ) (FunctionDef restorestate [] (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_STASH]]}) (List (Com {[LIT_CHARS git]} {[LIT_CHARS reset]} {[LIT_CHARS --hard]} {[VarSub head]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS git]} {[LIT_CHARS stash]} {[LIT_CHARS apply]} {[ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_STASH]]})]}) (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --refresh]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) ) ) ) (FunctionDef finish_up_to_date [] (List (Case to_match={[DQ [VarSub squash]]}, pat_word_list=[[{[LIT_CHARS t]}], [{[SQ ]}]] (Com {[LIT_CHARS echo]} {[DQ [VarSub 1][LIT_CHARS " (nothing to squash)"]]}) (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]]}) ) (Com {[LIT_CHARS dropsave]}) ) ) (FunctionDef squash_message [] (List (Com {[LIT_CHARS echo]} {[LIT_CHARS Squashed]} {[LIT_CHARS commit]} {[LIT_CHARS of]} {[LIT_CHARS the]} {[LIT_CHARS following] [LIT_OTHER ":"]}) (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS git]} {[LIT_CHARS log]} {[LIT_CHARS --no-merges]} {[LIT_CHARS --pretty] [LIT_OTHER "="] [LIT_CHARS medium]} {[LIT_OTHER "^"] [DQ [VarSub head]]} {[VarSub remoteheads]}) ) ) (FunctionDef finish [] (List (If (Com {[LIT_CHARS test]} {[SQ ]} {[LIT_OTHER "="]} {[DQ [VarSub 2]]}) (= scope= flags=0 words=[] bindings=[('rlogm', {[DQ [VarSub GIT_REFLOG_ACTION]]})]) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub 2]]}) (= scope= flags=0 words=[] bindings=[('rlogm', {[DQ [VarSub GIT_REFLOG_ACTION][LIT_CHARS ": "][VarSub 2]]})]) ) ) (Case to_match={[DQ [VarSub squash]]}, pat_word_list=[[{[LIT_CHARS t]}], [{[SQ ]}]] (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Squash commit -- not updating HEAD"]]}) (Com {[LIT_CHARS squash_message]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR][LIT_CHARS /SQUASH_MSG]]} "> 1), > ) ) (Case to_match={[DQ [VarSub merge_msg]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No merge message -- not updating HEAD"]]}) (List (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS update-ref]} {[LIT_CHARS -m]} {[DQ [VarSub rlogm]]} {[LIT_CHARS HEAD]} {[DQ [VarSub 1]]} {[DQ [VarSub head]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS gc]} {[LIT_CHARS --auto]}) ) ) ) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "?"] [LIT_OTHER "*"]}]] (ElseTrue) (If (Com {[LIT_CHARS test]} {[DQ [VarSub show_diffstat]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS git]} {[LIT_CHARS diff]} {[LIT_CHARS --stat]} {[LIT_CHARS --summary]} {[LIT_CHARS -M]} {[DQ [VarSub head]]} {[DQ [VarSub 1]]} more_env=[('GIT_PAGER', {[SQ ]})] ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /hooks/post-merge]}) (Case to_match={[DQ [VarSub squash]]}, pat_word_list=[[{[LIT_CHARS t]}], [{[SQ ]}]] (Com {[DQ [VarSub GIT_DIR]] [LIT_CHARS /hooks/post-merge]} {[LIT_CHARS 1]}) (Com {[DQ [VarSub GIT_DIR]] [LIT_CHARS /hooks/post-merge]} {[LIT_CHARS 0]}) ) ) ) ) (FunctionDef merge_name [] (List (= scope= flags=0 words=[] bindings=[('remote', {[DQ [VarSub 1]]})]) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('rh', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub remote][LIT_CHARS "^0"]]})]})]) (Com {[LIT_CHARS return]}) ) (If (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('truname', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub remote]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (Com {[LIT_CHARS git]} {[LIT_CHARS show-ref]} {[LIT_CHARS -q]} {[LIT_CHARS --verify]} {[DQ [LIT_CHARS refs/heads/][VarSub truname]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) ) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub rh][LIT_CHARS "\t\tbranch '"][VarSub truname][LIT_CHARS "' (early part) of ."]]}) (Com {[LIT_CHARS return]}) ) ) (If (= scope= flags=0 words=[] bindings=[('found_ref', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --symbolic-full-name]} {[LIT_CHARS --verify]} {[DQ [VarSub remote]]})]})]) (List (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('expanded', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS check-ref-format]} {[LIT_CHARS --branch]} {[DQ [VarSub remote]]})]})]) (Com {[LIT_CHARS exit]}) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub found_ref transform_ops=[VS_UNARY_POUND {[LIT_CHARS refs] [LIT_SLASH /] [LIT_CHARS heads] [LIT_SLASH /]}]]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [VarSub found_ref]]}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub rh][LIT_CHARS "\t\tbranch '"][VarSub expanded][LIT_CHARS "' of ."]]}) (Com {[LIT_CHARS return]}) ) (Com {[LIT_CHARS test]} {[DQ [VarSub found_ref transform_ops=[VS_UNARY_POUND {[LIT_CHARS refs] [LIT_SLASH /] [LIT_CHARS remotes] [LIT_SLASH /]}]]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [VarSub found_ref]]}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub rh][LIT_CHARS "\t\tremote branch '"][VarSub expanded][LIT_CHARS "' of ."]]}) (Com {[LIT_CHARS return]}) ) ) ) ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [VarSub remote]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS FETCH_HEAD]]}) (Com {[LIT_CHARS test]} {[LIT_CHARS -r]} {[DQ [VarSub GIT_DIR][LIT_CHARS /FETCH_HEAD]]}) ) (List (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]} {[LIT_CHARS -e]} {[LIT_CHARS 1q]} {[DQ [VarSub GIT_DIR][LIT_CHARS /FETCH_HEAD]]}) (Com {[LIT_CHARS return]}) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub rh][LIT_CHARS "\t\tcommit '"][VarSub remote][LIT_CHARS "'"]]}) ) ) (FunctionDef parse_config [] (List (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 -n]}, {[LIT_CHARS --no-stat]}, {[LIT_CHARS --no-summary]}], [{[LIT_CHARS --stat]}, {[LIT_CHARS --summary]}], [{[LIT_CHARS --log]}, {[LIT_CHARS --no-log]}], [{[LIT_CHARS --squash]}], [{[LIT_CHARS --no-squash]}], [{[LIT_CHARS --commit]}], [{[LIT_CHARS --no-commit]}], [{[LIT_CHARS --ff]}], [{[LIT_CHARS --no-ff]}], [{[LIT_CHARS --ff-only]}], [{[LIT_CHARS --rerere-autoupdate]}, {[LIT_CHARS --no-rerere-autoupdate]}], [{[LIT_CHARS -s]}, {[LIT_CHARS --strategy]}], [{[LIT_CHARS -X]}], [{[LIT_CHARS -m]}, {[LIT_CHARS --message]}], [{[LIT_CHARS --]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('show_diffstat', {[LIT_CHARS false]})]) (= scope= flags=0 words=[] bindings=[('show_diffstat', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('log_arg', {[VarSub 1]})]) (List (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub allow_fast_forward]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "You cannot combine --squash with --no-ff."]]}) ) (= scope= flags=0 words=[] bindings=[('squash', {[LIT_CHARS t]}), ('no_commit', {[LIT_CHARS t]})]) ) (= scope= flags=0 words=[] bindings=[('squash', {[SQ ]}), ('no_commit', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('no_commit', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('no_commit', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('allow_fast_forward', {[LIT_CHARS t]})]) (List (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub squash]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "You cannot combine --squash with --no-ff."]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub fast_forward_only]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "You cannot combine --ff-only with --no-ff."]]}) ) (= scope= flags=0 words=[] bindings=[('allow_fast_forward', {[LIT_CHARS f]})]) ) (List (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub allow_fast_forward]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS f]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "You cannot combine --ff-only with --no-ff."]]}) ) (= scope= flags=0 words=[] bindings=[('fast_forward_only', {[LIT_CHARS t]})]) ) (= scope= flags=0 words=[] bindings=[('rr_arg', {[VarSub 1]})]) (List (Com {[LIT_CHARS shift]}) (Case to_match={[DQ [LIT_CHARS " "][VarSub all_strategies][LIT_CHARS " "]]}, pat_word_list=[[{[LIT_OTHER "*"] [DQ [LIT_CHARS " "][VarSub 1][LIT_CHARS " "]] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('use_strategies', {[DQ [VarSub use_strategies][VarSub 1][LIT_CHARS " "]]})]) (List (AndOr OP_AND_IF (Case to_match={[DQ [LIT_CHARS " "][VarSub not_strategies][LIT_CHARS " "]]}, pat_word_list=[[{[LIT_OTHER "*"] [DQ [LIT_CHARS " "][VarSub 1][LIT_CHARS " "]] [LIT_OTHER "*"]}]] (Com {[LIT_CHARS false]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS type]} {[DQ [LIT_CHARS git-merge-][VarSub 1]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "available strategies are: "][VarSub all_strategies]]}) ) ) (= scope= flags=0 words=[] bindings=[('use_strategies', {[DQ [VarSub use_strategies][VarSub 1][LIT_CHARS " "]]})]) ) ) ) (List (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('xopt', {[DQ [VarSub xopt test_op=VS_TEST_COLON_PLUS {[VarSub xopt] [LIT_CHARS " "]}][ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --sq-quote]} {[DQ [LIT_CHARS --][VarSub 1]]})]]})]) ) (List (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('merge_msg', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('have_message', {[LIT_CHARS t]})]) ) (List (Com {[LIT_CHARS shift]}) (Com {[LIT_CHARS break]}) ) (Com {[LIT_CHARS usage]}) ) (Com {[LIT_CHARS shift]}) ) ) (= scope= flags=0 words=[] bindings=[('args_left', {[VarSub #]})]) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS usage]}) ) (= scope= flags=0 words=[] bindings=[('have_message', {[SQ ]})]) (If (= scope= flags=0 words=[] bindings=[('branch', {[ComSub (Com {[LIT_CHARS git-symbolic-ref]} {[LIT_CHARS -q]} {[LIT_CHARS HEAD]})]})]) (List (= scope= flags=0 words=[] bindings=[('mergeopts', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[DQ [LIT_CHARS branch.][VarSub branch transform_ops=[VS_UNARY_POUND {[LIT_CHARS refs] [LIT_SLASH /] [LIT_CHARS heads] [LIT_SLASH /]}]][LIT_CHARS .mergeoptions]]})]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub mergeopts]]}) (Com {[LIT_CHARS parse_config]} {[VarSub mergeopts]} {[LIT_CHARS --]}) ) ) ) (Com {[LIT_CHARS parse_config]} {[DQ [VarSub @]]}) (While (Com {[LIT_CHARS test]} {[VarSub args_left]} {[LIT_CHARS -lt]} {[VarSub #]}) (Com {[LIT_CHARS shift]}) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub show_diffstat]]}) (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS merge.diffstat]})]]} {[LIT_OTHER "="]} {[LIT_CHARS false]}) (= scope= flags=0 words=[] bindings=[('show_diffstat', {[LIT_CHARS false]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --bool]} {[LIT_CHARS merge.stat]})]]} {[LIT_OTHER "="]} {[LIT_CHARS false]}) (= scope= flags=0 words=[] bindings=[('show_diffstat', {[LIT_CHARS false]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub show_diffstat]]}) (= scope= flags=0 words=[] bindings=[('show_diffstat', {[LIT_CHARS t]})]) ) ) ) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub have_message]]}) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('second_token', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub 2][LIT_CHARS "^0"]]})]})]) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('head_commit', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [LIT_CHARS HEAD]]})]})]) (Com {[LIT_CHARS test]} {[DQ [VarSub second_token]]} {[LIT_OTHER "="]} {[DQ [VarSub head_commit]]}) ) ) ) (List (= scope= flags=0 words=[] bindings=[('merge_msg', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('head_arg', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) ) (Pipeline! (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS 1]} {[LIT_CHARS -ne]} {[VarSub #]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Can merge only exactly one commit into empty head"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub squash]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Squash commit into empty head not supported yet"]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub allow_fast_forward]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Non-fast-forward into an empty head does not make sense"]]}) ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('rh', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub 1][LIT_CHARS "^0"]]})]})]) (Com {[LIT_CHARS die]} {[DQ [VarSub 1][LIT_CHARS " - not something we can merge"]]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS update-ref]} {[LIT_CHARS -m]} {[DQ [LIT_CHARS "initial pull"]]} {[LIT_CHARS HEAD]} {[DQ [VarSub rh]]} {[DQ ]}) (Com {[LIT_CHARS git]} {[LIT_CHARS read-tree]} {[LIT_CHARS --reset]} {[LIT_CHARS -u]} {[LIT_CHARS HEAD]}) ) (Com {[LIT_CHARS exit]}) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('head_arg', {[LIT_CHARS HEAD]})]) (= scope= flags=0 words=[] bindings=[('merge_msg', {[DQ [ComSub (Pipeline (For remote do_arg_iter) (Com {[LIT_CHARS merge_name]} {[DQ [VarSub remote]]}) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub have_message]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS git]} {[LIT_CHARS fmt-merge-msg]} {[LIT_CHARS -m]} {[DQ [VarSub merge_msg]]} {[VarSub log_arg]}) (ElseTrue) (Com {[LIT_CHARS git]} {[LIT_CHARS fmt-merge-msg]} {[VarSub log_arg]}) ) )]]})]) ) ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('head', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub head_arg]] [LIT_OTHER "^"] [LIT_CHARS 0]})]})]) (Com {[LIT_CHARS usage]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [VarSub #]]} {[LIT_OTHER "="]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS usage]}) ) (Com {[LIT_CHARS set_reflog_action]} {[DQ [LIT_CHARS "merge "][VarSub *]]}) (= scope= flags=0 words=[] bindings=[('remoteheads', {[SQ ]})]) (For remote do_arg_iter) (List (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('remotehead', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub remote]] [LIT_OTHER "^"] [LIT_CHARS 0]})]})]) (Com {[LIT_CHARS die]} {[DQ [VarSub remote][LIT_CHARS " - not something we can merge"]]}) ) (= scope= flags=0 words=[] bindings=[('remoteheads', {[DQ [VarSub remoteheads][VarSub remotehead][LIT_CHARS " "]]})]) (Com {[LIT_CHARS eval]} {[LIT_CHARS GITHEAD_] [VarSub remotehead] [LIT_OTHER "="] [SQ ]}) (= scope= flags=1 words=[{[LIT_CHARS GITHEAD_] [VarSub remotehead]}] bindings=[]) ) ) (Com {[LIT_CHARS set]} {[LIT_CHARS x]} {[VarSub remoteheads]}) (Com {[LIT_CHARS shift]}) (Case to_match={[DQ [VarSub use_strategies]]}, pat_word_list=[[{[SQ ]}]] (Case to_match={[DQ [VarSub #]]}, pat_word_list=[[{[LIT_CHARS 1]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('var', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --get]} {[LIT_CHARS pull.twohead]})]]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub var]]}) (= scope= flags=0 words=[] bindings=[('use_strategies', {[DQ [VarSub var]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('use_strategies', {[DQ [VarSub default_twohead_strategies]]})]) ) ) (List (= scope= flags=0 words=[] bindings=[('var', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS --get]} {[LIT_CHARS pull.octopus]})]]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub var]]}) (= scope= flags=0 words=[] bindings=[('use_strategies', {[DQ [VarSub var]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('use_strategies', {[DQ [VarSub default_octopus_strategies]]})]) ) ) ) ) (For s [{[VarSub use_strategies]}]) (List (For ss [{[VarSub no_fast_forward_strategies]}]) (Case to_match={[DQ [LIT_CHARS " "][VarSub s][LIT_CHARS " "]]}, pat_word_list=[[{[LIT_OTHER "*"] [DQ [LIT_CHARS " "][VarSub ss][LIT_CHARS " "]] [LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('allow_fast_forward', {[LIT_CHARS f]})]) (Com {[LIT_CHARS break]}) ) ) ) (For ss [{[VarSub no_trivial_strategies]}]) (Case to_match={[DQ [LIT_CHARS " "][VarSub s][LIT_CHARS " "]]}, pat_word_list=[[{[LIT_OTHER "*"] [DQ [LIT_CHARS " "][VarSub ss][LIT_CHARS " "]] [LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('allow_trivial_merge', {[LIT_CHARS f]})]) (Com {[LIT_CHARS break]}) ) ) ) ) ) (Case to_match={[DQ [VarSub #]]}, pat_word_list=[[{[LIT_CHARS 1]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('common', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS merge-base]} {[LIT_CHARS --all]} {[VarSub head]} {[DQ [VarSub @]]})]})]) (= scope= flags=0 words=[] bindings=[('common', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS merge-base]} {[LIT_CHARS --all]} {[LIT_CHARS --octopus]} {[VarSub head]} {[DQ [VarSub @]]})]})]) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub head]]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR][LIT_CHARS /ORIG_HEAD]]} "> 1), > ) (Case to_match={[DQ [VarSub allow_fast_forward][LIT_CHARS ","][VarSub #][LIT_CHARS ","][VarSub common][LIT_CHARS ","][VarSub no_commit]]}, pat_word_list=[[{[LIT_OTHER "?"] [LIT_COMMA ","] [LIT_OTHER "*"] [LIT_COMMA ","] [SQ ] [LIT_COMMA ","] [LIT_OTHER "*"]}], [{[LIT_OTHER "?"] [LIT_COMMA ","] [LIT_CHARS 1] [LIT_COMMA ","] [DQ [VarSub 1]] [LIT_COMMA ","] [LIT_OTHER "*"]}], [{[LIT_CHARS t] [LIT_COMMA ","] [LIT_CHARS 1] [LIT_COMMA ","] [DQ [VarSub head]] [LIT_COMMA ","] [LIT_OTHER "*"]}], [{[LIT_OTHER "?"] [LIT_COMMA ","] [LIT_CHARS 1] [LIT_COMMA ","] [LIT_OTHER "?"] [LIT_OTHER "*"] [DQ [VarSub LF]] [LIT_OTHER "?"] [LIT_OTHER "*"] [LIT_COMMA ","] [LIT_OTHER "*"]}], [{[LIT_OTHER "?"] [LIT_COMMA ","] [LIT_CHARS 1] [LIT_COMMA ","] [LIT_OTHER "*"] [LIT_COMMA ","]}], [{[LIT_OTHER "*"]}]] (ElseTrue) (List (Com {[LIT_CHARS finish_up_to_date]} {[DQ [LIT_CHARS "Already up-to-date."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Updating "][ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --short]} {[VarSub head]})][LIT_CHARS ..][ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --short]} {[VarSub 1]})]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --refresh]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (= scope= flags=0 words=[] bindings=[('msg', {[DQ [LIT_CHARS Fast-forward]]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub have_message]]}) (= scope= flags=0 words=[] bindings=[('msg', {[DQ [VarSub msg][LIT_CHARS " (no commit created; -m option ignored)"]]})]) ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('new_head', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [VarSub 1][LIT_CHARS "^0"]]})]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS read-tree]} {[LIT_CHARS -v]} {[LIT_CHARS -m]} {[LIT_CHARS -u]} {[LIT_CHARS --exclude-per-directory] [LIT_OTHER "="] [LIT_CHARS .gitignore]} {[VarSub head]} {[DQ [VarSub new_head]]}) (AndOr OP_OR_IF (Com {[LIT_CHARS finish]} {[DQ [VarSub new_head]]} {[DQ [VarSub msg]]}) (Com {[LIT_CHARS exit]}) ) ) ) (Com {[LIT_CHARS dropsave]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) (ElseTrue) (List (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --refresh]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Case to_match={[DQ [VarSub allow_trivial_merge][LIT_CHARS ","][VarSub fast_forward_only]]}, pat_word_list=[[{[LIT_CHARS t] [LIT_COMMA ","]}]] (List (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS var]} {[LIT_CHARS GIT_COMMITTER_IDENT]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS exit]}) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Trying really trivial in-index merge..."]]}) (If (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS read-tree]} {[LIT_CHARS --trivial]} {[LIT_CHARS -m]} {[LIT_CHARS -u]} {[LIT_CHARS -v]} {[VarSub common]} {[VarSub head]} {[DQ [VarSub 1]]}) (= scope= flags=0 words=[] bindings=[('result_tree', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS write-tree]})]})]) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS Wonderful.]]}) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('result_commit', {[ComSub (Pipeline (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub merge_msg]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS commit-tree]} {[VarSub result_tree]} {[LIT_CHARS -p]} {[LIT_CHARS HEAD]} {[LIT_CHARS -p]} {[DQ [VarSub 1]]}) )]})]) (Com {[LIT_CHARS exit]}) ) (Com {[LIT_CHARS finish]} {[DQ [VarSub result_commit]]} {[DQ [LIT_CHARS "In-index merge"]]}) (Com {[LIT_CHARS dropsave]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS Nope.]]}) ) ) ) (List (= scope= flags=0 words=[] bindings=[('up_to_date', {[LIT_CHARS t]})]) (For remote do_arg_iter) (List (= scope= flags=0 words=[] bindings=[('common_one', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS merge-base]} {[LIT_CHARS --all]} {[VarSub head]} {[VarSub remote]})]})]) (If (Com {[LIT_CHARS test]} {[DQ [VarSub common_one]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [VarSub remote]]}) (List (= scope= flags=0 words=[] bindings=[('up_to_date', {[LIT_CHARS f]})]) (Com {[LIT_CHARS break]}) ) ) ) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub up_to_date]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (List (Com {[LIT_CHARS finish_up_to_date]} {[DQ [LIT_CHARS "Already up-to-date. Yeeah!"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) ) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub fast_forward_only]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Not possible to fast-forward, aborting."]]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS var]} {[LIT_CHARS GIT_COMMITTER_IDENT]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS exit]}) ) (Case to_match={[DQ [VarSub use_strategies]]}, pat_word_list=[[{[LIT_OTHER "?"] [LIT_OTHER "*"] [SQ ] [LIT_OTHER "?"] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS savestate]}) (= scope= flags=0 words=[] bindings=[('single_strategy', {[LIT_CHARS no]})]) ) (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_STASH]]}) (= scope= flags=0 words=[] bindings=[('single_strategy', {[LIT_CHARS yes]})]) ) ) (= scope= flags=0 words=[] bindings=[('result_tree', {[SQ ]}), ('best_cnt', {[LIT_CHARS -1]}), ('best_strategy', {[SQ ]}), ('wt_strategy', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('merge_was_ok', {[SQ ]})]) (For strategy [{[VarSub use_strategies]}]) (List (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub wt_strategy]]} {[LIT_OTHER "="]} {[SQ ]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Rewinding the tree to pristine..."]]}) (Com {[LIT_CHARS restorestate]}) ) ) (Case to_match={[DQ [VarSub single_strategy]]}, pat_word_list=[[{[LIT_CHARS no]}]] (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Trying merge strategy "][VarSub strategy][LIT_CHARS ...]]}) ) (= scope= flags=0 words=[] bindings=[('wt_strategy', {[VarSub strategy]})]) (Com {[LIT_CHARS eval]} {[SQ ] [DQ [VarSub xopt]] [SQ ]}) (= scope= flags=0 words=[] bindings=[('exit', {[VarSub ?]})]) (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [VarSub no_commit]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS test]} {[DQ [VarSub exit]]} {[LIT_OTHER "="]} {[LIT_CHARS 0]}) ) (List (= scope= flags=0 words=[] bindings=[('merge_was_ok', {[LIT_CHARS t]})]) (= scope= flags=0 words=[] bindings=[('exit', {[LIT_CHARS 1]})]) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub exit]]} {[LIT_OTHER "="]} {[LIT_CHARS 0]}) (List (If (Com {[LIT_CHARS test]} {[DQ [VarSub exit]]} {[LIT_CHARS -eq]} {[LIT_CHARS 1]}) (List (= scope= flags=0 words=[] bindings=[('cnt', {[ComSub (Pipeline (List (Com {[LIT_CHARS git]} {[LIT_CHARS diff-files]} {[LIT_CHARS --name-only]}) (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS --unmerged]}) ) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )]})]) (If (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[VarSub best_cnt]} {[LIT_CHARS -le]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS test]} {[VarSub cnt]} {[LIT_CHARS -le]} {[VarSub best_cnt]}) ) (List (= scope= flags=0 words=[] bindings=[('best_strategy', {[VarSub strategy]})]) (= scope= flags=0 words=[] bindings=[('best_cnt', {[VarSub cnt]})]) ) ) ) ) (Com {[LIT_CHARS continue]}) ) ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('result_tree', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS write-tree]})]})]) (Com {[LIT_CHARS break]}) ) ) ) (If (Com {[LIT_CHARS test]} {[SQ ]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [VarSub result_tree]]}) (List (If (Com {[LIT_CHARS test]} {[DQ [VarSub allow_fast_forward]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS t]]}) (= scope= flags=0 words=[] bindings=[('parents', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS merge-base]} {[LIT_CHARS --independent]} {[DQ [VarSub head]]} {[DQ [VarSub @]]})]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('parents', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[DQ [VarSub head]]} {[DQ [VarSub @]]})]})]) ) (= scope= flags=0 words=[] bindings=[('parents', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub parents]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) )]})]) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('result_commit', {[ComSub (Pipeline (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub merge_msg]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS commit-tree]} {[VarSub result_tree]} {[VarSub parents]}) )]})]) (Com {[LIT_CHARS exit]}) ) (Com {[LIT_CHARS finish]} {[DQ [VarSub result_commit]]} {[DQ [LIT_CHARS "Merge made by "][VarSub wt_strategy][LIT_CHARS .]]}) (Com {[LIT_CHARS dropsave]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (Case to_match={[DQ [VarSub best_strategy]]}, pat_word_list=[[{[SQ ]}], [{[DQ [VarSub wt_strategy]]}], [{[LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS restorestate]}) (Case to_match={[DQ [VarSub use_strategies]]}, pat_word_list=[[{[LIT_OTHER "?"] [LIT_OTHER "*"] [SQ ] [LIT_OTHER "?"] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No merge strategy handled the merge."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Merge with strategy "][VarSub use_strategies][LIT_CHARS " failed."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 2]}) ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Rewinding the tree to pristine..."]]}) (Com {[LIT_CHARS restorestate]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Using the "][VarSub best_strategy][LIT_CHARS " to prepare resolving by hand."]]}) (Com {[LIT_CHARS git-merge-] [VarSub best_strategy]} {[VarSub common]} {[LIT_CHARS --]} {[DQ [VarSub head_arg]]} {[DQ [VarSub @]]}) ) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub squash]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS finish]}) (ElseTrue) (List (For remote do_arg_iter) (Com {[LIT_CHARS echo]} {[VarSub remote]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub merge_msg]]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_MSG]]} "> 1), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not write to "][VarSub GIT_DIR][LIT_CHARS /MERGE_MSG]]}) ) (AndOr OP_OR_IF (If (Com {[LIT_CHARS test]} {[DQ [VarSub allow_fast_forward]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS t]}) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s"]]} {[LIT_CHARS no-ff]}) (ElseTrue) (Com {[LIT_OTHER ":"]}) ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not write to "][VarSub GIT_DIR][LIT_CHARS /MERGE_MODE]]}) ) ) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub merge_was_ok]]} {[LIT_OTHER "="]} {[LIT_CHARS t]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Automatic merge went well; stopped before committing as requested"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) (ElseTrue) (List (List redirects=[(FilenameRedirectNode filename={[DQ [VarSub GIT_DIR][LIT_CHARS /MERGE_MSG]]} >"> 1)] (Com {[LIT_CHARS echo]} {[SQ ]}) (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS ls-files]} {[LIT_CHARS --unmerged]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) (Com {[LIT_CHARS uniq]}) ) ) (Com {[LIT_CHARS git]} {[LIT_CHARS rerere]} {[VarSub rr_arg]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Automatic merge failed; fix conflicts and then commit the result."]]}) ) ) )