(List (= scope= flags=0 words=[] bindings=[('todo', {[DQ [VarSub state_dir]] [LIT_CHARS /git-rebase-todo]})]) (= scope= flags=0 words=[] bindings=[('done', {[DQ [VarSub state_dir]] [LIT_CHARS /done]})]) (= scope= flags=0 words=[] bindings=[('msg', {[DQ [VarSub state_dir]] [LIT_CHARS /message]})]) (= scope= flags=0 words=[] bindings=[('squash_msg', {[DQ [VarSub state_dir]] [LIT_CHARS /message-squash]})]) (= scope= flags=0 words=[] bindings=[('fixup_msg', {[DQ [VarSub state_dir]] [LIT_CHARS /message-fixup]})]) (= scope= flags=0 words=[] bindings=[('rewritten', {[DQ [VarSub state_dir]] [LIT_CHARS /rewritten]})]) (= scope= flags=0 words=[] bindings=[('dropped', {[DQ [VarSub state_dir]] [LIT_CHARS /dropped]})]) (= scope= flags=0 words=[] bindings=[('author_script', {[DQ [VarSub state_dir]] [LIT_CHARS /author-script]})]) (= scope= flags=0 words=[] bindings=[('amend', {[DQ [VarSub state_dir]] [LIT_CHARS /amend]})]) (= scope= flags=0 words=[] bindings=[('rewritten_list', {[DQ [VarSub state_dir]] [LIT_CHARS /rewritten-list]})]) (= scope= flags=0 words=[] bindings=[('rewritten_pending', {[DQ [VarSub state_dir]] [LIT_CHARS /rewritten-pending]})]) (= scope= flags=0 words=[] bindings=[('GIT_CHERRY_PICK_HELP', {[DQ [VarSub resolvemsg]]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_CHERRY_PICK_HELP]}] bindings=[]) (FunctionDef warn [] (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub *]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) ) (FunctionDef commit_message [] (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS cat-file]} {[LIT_CHARS commit]} {[DQ [VarSub 1]]} ) (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS "1,/^"][LIT_OTHER "$"][LIT_CHARS /d]]} ) ) ) (= scope= flags=0 words=[] bindings=[('orig_reflog_action', {[DQ [VarSub GIT_REFLOG_ACTION]]})]) (FunctionDef comment_for_reflog [] (Case to_match={[DQ [VarSub orig_reflog_action]]}, pat_word_list=[[{[SQ ]}, {[LIT_CHARS rebase] [LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('GIT_REFLOG_ACTION', {[DQ [LIT_CHARS "rebase -i ("][VarSub 1][LIT_CHARS ")"]]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_REFLOG_ACTION]}] bindings=[]) ) ) ) (= scope= flags=0 words=[] bindings=[('last_count', {[SQ ]})]) (FunctionDef mark_action_done [] (List (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[LIT_CHARS 1q]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} 0), (FilenameRedirectNode filename={[DQ [VarSub done]]} >"> 1), > ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[LIT_CHARS 1d]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} 0), (FilenameRedirectNode filename={[DQ [VarSub todo]] [LIT_CHARS .new]} >"> 1), > ) (Com {[LIT_CHARS mv]} {[LIT_CHARS -f]} {[DQ [VarSub todo]] [LIT_CHARS .new]} {[DQ [VarSub todo]]} ) (= scope= flags=0 words=[] bindings=[('new_count', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[DQ [VarSub done]]} 0)]{[LIT_CHARS sane_grep]} {[LIT_CHARS -c]} {[SQ ]})]})]) (= scope= flags=0 words=[] bindings=[('total', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[VarSub new_count]}} {A Atom NODE_ARITH_WORD {[ComSub (Com redirects=[(FilenameRedirectNode filename={[DQ [VarSub todo]]} 0)]{[LIT_CHARS sane_grep]} {[LIT_CHARS -c]} {[SQ ]})]}}}]})]) (If (Com {[LIT_CHARS test]} {[DQ [VarSub last_count]]} {[LIT_NEQUAL "!="]} {[DQ [VarSub new_count]]} ) (List (= scope= flags=0 words=[] bindings=[('last_count', {[VarSub new_count]})]) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "Rebasing (%d/%d)"][\ LIT_ESCAPED_CHAR "\\r"]]} {[VarSub new_count]} {[VarSub total]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub verbose]]} ) (Com {[LIT_CHARS echo]} ) ) ) ) ) ) (FunctionDef make_patch [] (List (= scope= flags=0 words=[] bindings=[('sha1_and_parents', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[LIT_CHARS --parents]} {[LIT_CHARS -1]} {[DQ [VarSub 1]]})]]})]) (Case to_match={[DQ [VarSub sha1_and_parents]]}, pat_word_list=[[{[LIT_OTHER "?"] [LIT_OTHER "*"] [SQ ] [LIT_OTHER "?"] [LIT_OTHER "*"] [SQ ] [LIT_OTHER "?"] [LIT_OTHER "*"]}], [{[LIT_OTHER "?"] [LIT_OTHER "*"] [SQ ] [LIT_OTHER "?"] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS git]} {[LIT_CHARS diff]} {[LIT_CHARS --cc]} {[VarSub sha1_and_parents]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS diff-tree]} {[LIT_CHARS -p]} {[DQ [VarSub 1][LIT_CHARS "^!"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Root commit"]]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub msg]]} ) (Com {[LIT_CHARS commit_message]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[DQ [VarSub msg]]} "> 1), > ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub author_script]]} ) (Com {[LIT_CHARS get_author_ident_from_commit]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[DQ [VarSub author_script]]} "> 1), > ) ) ) ) (FunctionDef die_with_patch [] (List (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[DQ [VarSub state_dir]] [LIT_CHARS /stopped-sha]} "> 1), > ) (Com {[LIT_CHARS make_patch]} {[DQ [VarSub 1]]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS rerere]} ) (Com {[LIT_CHARS die]} {[DQ [VarSub 2]]} ) ) ) (FunctionDef exit_with_patch [] (List (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[DQ [VarSub state_dir]] [LIT_CHARS /stopped-sha]} "> 1), > ) (Com {[LIT_CHARS make_patch]} {[VarSub 1]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[DQ [VarSub amend]]} "> 1), > ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "You can amend the commit now, with"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "\tgit commit --amend"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Once you are satisfied with your changes, run"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "\tgit rebase --continue"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS exit]} {[VarSub 2]} ) ) ) (FunctionDef die_abort [] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub state_dir]]} ) (Com {[LIT_CHARS die]} {[DQ [VarSub 1]]} ) ) ) (FunctionDef has_action [] (Com {[LIT_CHARS sane_grep]} {[SQ ]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) ) (FunctionDef is_empty_commit [] (List (= scope= flags=0 words=[] bindings=[('tree', {[ComSub (AndOr OP_OR_IF (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS -q]} {[LIT_CHARS --verify]} {[DQ [VarSub 1]] [LIT_OTHER "^"] [LIT_LBRACE "{"] [LIT_CHARS tree] [LIT_RBRACE "}"]}) (Com {[LIT_CHARS die]} {[DQ [VarSub 1][LIT_CHARS ": not a commit that can be picked"]]}) )]})]) (= scope= flags=0 words=[] bindings=[('ptree', {[ComSub (AndOr OP_OR_IF (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS -q]} {[LIT_CHARS --verify]} {[DQ [VarSub 1]] [LIT_OTHER "^"] [LIT_OTHER "^"] [LIT_LBRACE "{"] [LIT_CHARS tree] [LIT_RBRACE "}"]}) (= scope= flags=0 words=[] bindings=[('ptree', {[LIT_CHARS 4b825dc642cb6eb9a060e54bf8d69288fbee4904]})]) )]})]) (Com {[LIT_CHARS test]} {[DQ [VarSub tree]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [VarSub ptree]]} ) ) ) (FunctionDef do_with_author [] (Subshell (List (= scope= flags=1 words=[{[LIT_CHARS GIT_AUTHOR_NAME]}, {[LIT_CHARS GIT_AUTHOR_EMAIL]}, {[LIT_CHARS GIT_AUTHOR_DATE]}] bindings=[]) (Com {[DQ [VarSub @]]} ) ) ) ) (FunctionDef git_sequence_editor [] (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub GIT_SEQUENCE_EDITOR]]} ) (List (= scope= flags=0 words=[] bindings=[('GIT_SEQUENCE_EDITOR', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS sequence.editor]})]]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -z]} {[DQ [VarSub GIT_SEQUENCE_EDITOR]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('GIT_SEQUENCE_EDITOR', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS var]} {[LIT_CHARS GIT_EDITOR]})]]})]) (Com {[LIT_CHARS return]} {[VarSub ?]} ) ) ) ) ) (Com {[LIT_CHARS eval]} {[DQ [VarSub GIT_SEQUENCE_EDITOR]]} {[SQ ]} ) ) ) (FunctionDef pick_one [] (List (= scope= flags=0 words=[] bindings=[('ff', {[LIT_CHARS --ff]})]) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS -n]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('sha1', {[VarSub 2]})]) (= scope= flags=0 words=[] bindings=[('ff', {[SQ ]})]) ) (= scope= flags=0 words=[] bindings=[('sha1', {[VarSub 1]})]) ) (Case to_match={[DQ [VarSub force_rebase]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "?"] [LIT_OTHER "*"]}]] (ElseTrue) (= scope= flags=0 words=[] bindings=[('ff', {[SQ ]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[VarSub sha1]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Invalid commit name: "][VarSub sha1]]} ) ) (If (Com {[LIT_CHARS is_empty_commit]} {[DQ [VarSub sha1]]} ) (= scope= flags=0 words=[] bindings=[('empty_args', {[DQ [LIT_CHARS --allow-empty]]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub rewritten]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS pick_one_preserving_merges]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS return]} ) ) ) (Com {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS cherry-pick]} {[VarSub empty_args]} {[VarSub ff]} {[DQ [VarSub @]]} ) ) ) (FunctionDef pick_one_preserving_merges [] (List (= scope= flags=0 words=[] bindings=[('fast_forward', {[LIT_CHARS t]})]) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS -n]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('fast_forward', {[LIT_CHARS f]})]) (= scope= flags=0 words=[] bindings=[('sha1', {[VarSub 2]})]) ) (= scope= flags=0 words=[] bindings=[('sha1', {[VarSub 1]})]) ) (= scope= flags=0 words=[] bindings=[('sha1', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[VarSub sha1]})]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub state_dir]] [LIT_CHARS /current-commit]} ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub fast_forward]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS t]} ) (List (While (Com {[LIT_CHARS read]} {[LIT_CHARS current_commit]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub current_commit]} "> 1), > ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS rm]} {[DQ [VarSub state_dir]] [LIT_CHARS /current-commit]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Cannot write current commit's replacement sha1"]]} ) ) ) ) ) (Com {[LIT_CHARS echo]} {[VarSub sha1]} < (FilenameRedirectNode filename={[DQ [VarSub state_dir]] [LIT_CHARS /current-commit]} >"> 1), > ) (= scope= flags=0 words=[] bindings=[('new_parents', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('pend', {[DQ [LIT_CHARS " "][ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[LIT_CHARS --parents]} {[LIT_CHARS -1]} {[VarSub sha1]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -s]} {[LIT_CHARS -f2-]}) )]]})]) (If (Com {[LIT_CHARS test]} {[DQ [VarSub pend]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS " "]]} ) (= scope= flags=0 words=[] bindings=[('pend', {[DQ [LIT_CHARS " root"]]})]) ) (While (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub pend]]} {[LIT_NEQUAL "!="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('p', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub pend]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (= scope= flags=0 words=[] bindings=[('pend', {[DQ [VarSub pend transform_ops=[VS_UNARY_POUND {[LIT_CHARS " "] [VarSub p]}]]]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub p]} ) (List (= scope= flags=0 words=[] bindings=[('new_p', {[ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub p]})]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub new_p]]} ) (= scope= flags=0 words=[] bindings=[('new_p', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD]})]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[VarSub p]} {[LIT_NEQUAL "!="]} {[VarSub new_p]} ) (= scope= flags=0 words=[] bindings=[('fast_forward', {[LIT_CHARS f]})]) ) (Case to_match={[DQ [VarSub new_parents]]}, pat_word_list=[[{[LIT_OTHER "*"] [VarSub new_p] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (ElseTrue) (= scope= flags=0 words=[] bindings=[('new_parents', {[DQ [VarSub new_parents][LIT_CHARS " "][VarSub new_p]]})]) ) ) (ElseTrue) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub dropped]] [LIT_CHARS /] [VarSub p]} ) (List (= scope= flags=0 words=[] bindings=[('fast_forward', {[LIT_CHARS f]})]) (= scope= flags=0 words=[] bindings=[('replacement', {[DQ [ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub dropped]] [LIT_CHARS /] [VarSub p]})]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub replacement]]} ) (= scope= flags=0 words=[] bindings=[('replacement', {[LIT_CHARS root]})]) ) (= scope= flags=0 words=[] bindings=[('pend', {[DQ [LIT_CHARS " "][VarSub replacement][VarSub pend]]})]) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('new_parents', {[DQ [VarSub new_parents][LIT_CHARS " "][VarSub p]]})]) ) ) ) ) (Case to_match={[VarSub fast_forward]}, pat_word_list=[[{[LIT_CHARS t]}], [{[LIT_CHARS f]}]] (List (Com {[LIT_CHARS output]} {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Fast-forward to "][VarSub sha1]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS reset]} {[LIT_CHARS --hard]} {[VarSub sha1]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Cannot fast-forward to "][VarSub sha1]]} ) ) ) (List (= scope= flags=0 words=[] bindings=[('first_parent', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub new_parents]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 1]]} {[LIT_NEQUAL "!="]} {[DQ [LIT_CHARS -n]]} {[LIT_DBRACKET_LIKE "]"]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[VarSub first_parent]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Cannot move HEAD to "][VarSub first_parent]]} ) ) ) (Case to_match={[DQ [VarSub new_parents]]}, pat_word_list=[[{[SQ ] [LIT_OTHER "*"] [SQ ] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[DQ [LIT_CHARS a][VarSub 1]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS a-n]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Refusing to squash a merge: "][VarSub sha1]]} ) ) (= scope= flags=0 words=[] bindings=[('author_script_content', {[ComSub (Com {[LIT_CHARS get_author_ident_from_commit]} {[VarSub sha1]})]})]) (Com {[LIT_CHARS eval]} {[DQ [VarSub author_script_content]]} ) (= scope= flags=0 words=[] bindings=[('msg_content', {[DQ [ComSub (Com {[LIT_CHARS commit_message]} {[VarSub sha1]})]]})]) (= scope= flags=0 words=[] bindings=[('new_parents', {[VarSub new_parents transform_ops=[VS_UNARY_POUND {[LIT_CHARS " "] [VarSub first_parent]}]]})]) (If (Pipeline! (Com {[LIT_CHARS do_with_author]} {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS merge]} {[LIT_CHARS --no-ff]} {[VarSub strategy test_op=VS_TEST_COLON_PLUS {[LIT_CHARS "-s "] [VarSub strategy]}]} {[LIT_CHARS -m]} {[DQ [VarSub msg_content]]} {[VarSub new_parents]} ) ) (List (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub msg_content]]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR]] [LIT_CHARS /MERGE_MSG]} "> 1), > ) (Com {[LIT_CHARS die_with_patch]} {[VarSub sha1]} {[DQ [LIT_CHARS "Error redoing merge "][VarSub sha1]]} ) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub sha1][LIT_CHARS " "][ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD] [LIT_OTHER "^"] [LIT_CHARS 0]})]]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten_list]]} >"> 1), > ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS cherry-pick]} {[DQ [VarSub @]]} ) (Com {[LIT_CHARS die_with_patch]} {[VarSub sha1]} {[DQ [LIT_CHARS "Could not pick "][VarSub sha1]]} ) ) ) ) ) ) ) (FunctionDef nth_string [] (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_OTHER "*"] [LIT_CHARS 1] [LIT_DBRACKET_LIKE "["] [LIT_CHARS 0-9] [LIT_DBRACKET_LIKE "]"]}, {[LIT_OTHER "*"] [LIT_DBRACKET_LIKE "["] [LIT_CHARS 04-9] [LIT_DBRACKET_LIKE "]"]}], [{[LIT_OTHER "*"] [LIT_CHARS 1]}], [{[LIT_OTHER "*"] [LIT_CHARS 2]}], [{[LIT_OTHER "*"] [LIT_CHARS 3]}]] (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]] [LIT_CHARS th]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]] [LIT_CHARS st]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]] [LIT_CHARS nd]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]] [LIT_CHARS rd]} ) ) ) (FunctionDef update_squash_messages [] (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub squash_msg]]} ) (List (AndOr OP_OR_IF (Com {[LIT_CHARS mv]} {[DQ [VarSub squash_msg]]} {[DQ [VarSub squash_msg]] [LIT_CHARS .bak]} ) (Com {[LIT_CHARS exit]} ) ) (= scope= flags=0 words=[] bindings=[('count', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[ComSub (Com redirects=[(FilenameRedirectNode filename={[DQ [VarSub squash_msg]] [LIT_CHARS .bak]} 0)]{[LIT_CHARS sed]} {[LIT_CHARS -n]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "1s/^# This is a combination of "][\ LIT_ESCAPED_CHAR "\\("][LIT_CHARS ".*"][\ LIT_ESCAPED_CHAR "\\)"][LIT_CHARS " commits"][\ LIT_ESCAPED_CHAR "\\."][LIT_CHARS /][\ LIT_ESCAPED_CHAR "\\1"][LIT_CHARS /p]]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS q]]})]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) (List redirects=[(FilenameRedirectNode filename={[DQ [VarSub squash_msg]]} "> 1)] (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# This is a combination of "][VarSub count][LIT_CHARS " commits."]]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[LIT_CHARS 1d]} {[LIT_CHARS -e]} {[SQ ]} < (FilenameRedirectNode filename={[DQ [VarSub squash_msg]] [LIT_CHARS .bak]} 0), > ) ) ) (ElseTrue) (List (AndOr OP_OR_IF (Com {[LIT_CHARS commit_message]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[DQ [VarSub fixup_msg]]} "> 1), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Cannot write "][VarSub fixup_msg]]} ) ) (= scope= flags=0 words=[] bindings=[('count', {[LIT_CHARS 2]})]) (List redirects=[(FilenameRedirectNode filename={[DQ [VarSub squash_msg]]} "> 1)] (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# This is a combination of 2 commits."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# The first commit's message is:"]]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS cat]} {[DQ [VarSub fixup_msg]]} ) ) ) ) (Case to_match={[VarSub 1]}, pat_word_list=[[{[LIT_CHARS squash]}], [{[LIT_CHARS fixup]}]] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub fixup_msg]]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# This is the "][ComSub (Com {[LIT_CHARS nth_string]} {[VarSub count]})][LIT_CHARS " commit message:"]]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS commit_message]} {[VarSub 2]} ) ) (List (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# The "][ComSub (Com {[LIT_CHARS nth_string]} {[VarSub count]})][LIT_CHARS " commit message will be skipped:"]]} ) (Com {[LIT_CHARS echo]} ) (Pipeline (Com {[LIT_CHARS commit_message]} {[VarSub 2]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]} ) ) ) ) ) ) (FunctionDef peek_next_command [] (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "/^#/d"]]} {[LIT_CHARS -e]} {[SQ ]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/ .*//p"]]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS q]]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} 0), > ) ) (FunctionDef die_failed_squash [] (List (AndOr OP_OR_IF (Com {[LIT_CHARS mv]} {[DQ [VarSub squash_msg]]} {[DQ [VarSub msg]]} ) (Com {[LIT_CHARS exit]} ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub fixup_msg]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS cp]} {[DQ [VarSub msg]]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /MERGE_MSG]} ) (Com {[LIT_CHARS exit]} ) ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Could not apply "][VarSub 1][LIT_CHARS "... "][VarSub 2]]} ) (Com {[LIT_CHARS die_with_patch]} {[VarSub 1]} {[DQ ]} ) ) ) (FunctionDef flush_rewritten_pending [] (List (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -s]} {[DQ [VarSub rewritten_pending]]} ) (Com {[LIT_CHARS return]} ) ) (= scope= flags=0 words=[] bindings=[('newsha1', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD] [LIT_OTHER "^"] [LIT_CHARS 0]})]]})]) (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS s/][LIT_OTHER "$"][LIT_CHARS "/ "][VarSub newsha1][LIT_CHARS /]]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten_pending]]} 0), (FilenameRedirectNode filename={[DQ [VarSub rewritten_list]]} >"> 1), > ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub rewritten_pending]]} ) ) ) (FunctionDef record_in_rewritten [] (List (= scope= flags=0 words=[] bindings=[('oldsha1', {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[VarSub 1]})]]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub oldsha1]]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten_pending]]} >"> 1), > ) (Case to_match={[DQ [ComSub (Com {[LIT_CHARS peek_next_command]})]]}, pat_word_list=[[{[LIT_CHARS squash]}, {[LIT_CHARS s]}, {[LIT_CHARS fixup]}, {[LIT_CHARS f]}], [{[LIT_OTHER "*"]}]] (ElseTrue) (Com {[LIT_CHARS flush_rewritten_pending]} ) ) ) ) (FunctionDef do_pick [] (If (Com {[LIT_CHARS test]} {[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD]})]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [VarSub squash_onto]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --allow-empty]} {[LIT_CHARS --allow-empty-message]} {[LIT_CHARS --amend]} {[LIT_CHARS --no-post-rewrite]} {[LIT_CHARS -n]} {[LIT_CHARS -q]} {[LIT_CHARS -C]} {[VarSub 1]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS pick_one]} {[LIT_CHARS -n]} {[VarSub 1]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --allow-empty]} {[LIT_CHARS --allow-empty-message]} {[LIT_CHARS --amend]} {[LIT_CHARS --no-post-rewrite]} {[LIT_CHARS -n]} {[LIT_CHARS -q]} {[LIT_CHARS -C]} {[VarSub 1]} ) (Com {[LIT_CHARS die_with_patch]} {[VarSub 1]} {[DQ [LIT_CHARS "Could not apply "][VarSub 1][LIT_CHARS "... "][VarSub 2]]} ) ) ) ) (ElseTrue) (AndOr OP_OR_IF (Com {[LIT_CHARS pick_one]} {[VarSub 1]} ) (Com {[LIT_CHARS die_with_patch]} {[VarSub 1]} {[DQ [LIT_CHARS "Could not apply "][VarSub 1][LIT_CHARS "... "][VarSub 2]]} ) ) ) ) (FunctionDef do_next [] (List (AndOr OP_OR_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub msg]]} {[DQ [VarSub author_script]]} {[DQ [VarSub amend]]} ) (Com {[LIT_CHARS exit]} ) ) (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS command]} {[LIT_CHARS sha1]} {[LIT_CHARS rest]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} 0), > ) (Case to_match={[DQ [VarSub command]]}, pat_word_list=[[{[SQ ] [LIT_OTHER "*"]}, {[SQ ]}, {[LIT_CHARS noop]}], [{[LIT_CHARS pick]}, {[LIT_CHARS p]}], [{[LIT_CHARS reword]}, {[LIT_CHARS r]}], [{[LIT_CHARS edit]}, {[LIT_CHARS e]}], [{[LIT_CHARS squash]}, {[LIT_CHARS s]}, {[LIT_CHARS fixup]}, {[LIT_CHARS f]}], [{[LIT_CHARS x]}, {[DQ [LIT_CHARS exec]]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS mark_action_done]} ) (List (Com {[LIT_CHARS comment_for_reflog]} {[LIT_CHARS pick]} ) (Com {[LIT_CHARS mark_action_done]} ) (Com {[LIT_CHARS do_pick]} {[VarSub sha1]} {[DQ [VarSub rest]]} ) (Com {[LIT_CHARS record_in_rewritten]} {[VarSub sha1]} ) ) (List (Com {[LIT_CHARS comment_for_reflog]} {[LIT_CHARS reword]} ) (Com {[LIT_CHARS mark_action_done]} ) (Com {[LIT_CHARS do_pick]} {[VarSub sha1]} {[DQ [VarSub rest]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --amend]} {[LIT_CHARS --no-post-rewrite]} ) (List (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Could not amend commit after successfully picking "][VarSub sha1][LIT_CHARS "... "][VarSub rest]]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "This is most likely due to an empty commit message, or the pre-commit hook"]]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "failed. If the pre-commit hook failed, you may need to resolve the issue before"]]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "you are able to reword the commit."]]} ) (Com {[LIT_CHARS exit_with_patch]} {[VarSub sha1]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS record_in_rewritten]} {[VarSub sha1]} ) ) (List (Com {[LIT_CHARS comment_for_reflog]} {[LIT_CHARS edit]} ) (Com {[LIT_CHARS mark_action_done]} ) (Com {[LIT_CHARS do_pick]} {[VarSub sha1]} {[DQ [VarSub rest]]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Stopped at "][VarSub sha1][LIT_CHARS "... "][VarSub rest]]} ) (Com {[LIT_CHARS exit_with_patch]} {[VarSub sha1]} {[LIT_CHARS 0]} ) ) (List (Case to_match={[DQ [VarSub command]]}, pat_word_list=[[{[LIT_CHARS squash]}, {[LIT_CHARS s]}], [{[LIT_CHARS fixup]}, {[LIT_CHARS f]}]] (= scope= flags=0 words=[] bindings=[('squash_style', {[LIT_CHARS squash]})]) (= scope= flags=0 words=[] bindings=[('squash_style', {[LIT_CHARS fixup]})]) ) (Com {[LIT_CHARS comment_for_reflog]} {[VarSub squash_style]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub done]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS has_action]} {[DQ [VarSub done]]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Cannot '"][VarSub squash_style][LIT_CHARS "' without a previous commit"]]} ) ) ) (Com {[LIT_CHARS mark_action_done]} ) (Com {[LIT_CHARS update_squash_messages]} {[VarSub squash_style]} {[VarSub sha1]} ) (= scope= flags=0 words=[] bindings=[('author_script_content', {[ComSub (Com {[LIT_CHARS get_author_ident_from_commit]} {[LIT_CHARS HEAD]})]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub author_script_content]]} < (FilenameRedirectNode filename={[DQ [VarSub author_script]]} "> 1), > ) (Com {[LIT_CHARS eval]} {[DQ [VarSub author_script_content]]} ) (If (Pipeline! (Com {[LIT_CHARS pick_one]} {[LIT_CHARS -n]} {[VarSub sha1]} ) ) (List (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[DQ [VarSub amend]]} "> 1), > ) (Com {[LIT_CHARS die_failed_squash]} {[VarSub sha1]} {[DQ [VarSub rest]]} ) ) ) (Case to_match={[DQ [ComSub (Com {[LIT_CHARS peek_next_command]})]]}, pat_word_list=[[{[LIT_CHARS squash]}, {[LIT_CHARS s]}, {[LIT_CHARS fixup]}, {[LIT_CHARS f]}], [{[LIT_OTHER "*"]}]] (AndOr OP_OR_IF (Com {[LIT_CHARS do_with_author]} {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --amend]} {[LIT_CHARS --no-verify]} {[LIT_CHARS -F]} {[DQ [VarSub squash_msg]]} ) (Com {[LIT_CHARS die_failed_squash]} {[VarSub sha1]} {[DQ [VarSub rest]]} ) ) (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub fixup_msg]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS do_with_author]} {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --amend]} {[LIT_CHARS --no-verify]} {[LIT_CHARS -F]} {[DQ [VarSub fixup_msg]]} ) (Com {[LIT_CHARS die_failed_squash]} {[VarSub sha1]} {[DQ [VarSub rest]]} ) ) (ElseTrue) (List (AndOr OP_OR_IF (Com {[LIT_CHARS cp]} {[DQ [VarSub squash_msg]]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /SQUASH_MSG]} ) (Com {[LIT_CHARS exit]} ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /MERGE_MSG]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS do_with_author]} {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --amend]} {[LIT_CHARS --no-verify]} {[LIT_CHARS -F]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /SQUASH_MSG]} {[LIT_CHARS -e]} ) (Com {[LIT_CHARS die_failed_squash]} {[VarSub sha1]} {[DQ [VarSub rest]]} ) ) ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub squash_msg]]} {[DQ [VarSub fixup_msg]]} ) ) ) (Com {[LIT_CHARS record_in_rewritten]} {[VarSub sha1]} ) ) (List (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS command]} {[LIT_CHARS rest]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} 0), > ) (Com {[LIT_CHARS mark_action_done]} ) (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub rest]]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[DQ [VarSub state_dir]] [LIT_CHARS /stopped-sha]} "> 1), > ) (Com {[VarSub SHELL test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS "@SHELL_PATH@"]}]} {[LIT_CHARS -c]} {[DQ [VarSub rest]]} ) (= scope= flags=0 words=[] bindings=[('status', {[VarSub ?]})]) (= scope= flags=0 words=[] bindings=[('dirty', {[LIT_CHARS f]})]) (AndOr OP_OR_IF (Subshell (Com {[LIT_CHARS require_clean_work_tree]} {[DQ [LIT_CHARS rebase]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) ) (= scope= flags=0 words=[] bindings=[('dirty', {[LIT_CHARS t]})]) ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub status]]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} ) (List (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Execution failed: "][VarSub rest]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub dirty]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS f]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "and made changes to the index and/or the working tree"]]} ) ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "You can fix the problem, and then run"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "\tgit rebase --continue"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS exit]} {[DQ [VarSub status]]} ) ) (Com {[LIT_CHARS test]} {[DQ [VarSub dirty]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS t]} ) (List (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Execution succeeded: "][VarSub rest]]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "but left changes to the index and/or the working tree"]]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Commit or stash your changes, and then run"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "\tgit rebase --continue"]]} ) (Com {[LIT_CHARS warn]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) (List (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Unknown command: "][VarSub command][LIT_CHARS " "][VarSub sha1][LIT_CHARS " "][VarSub rest]]} ) (If (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS -q]} {[DQ [VarSub sha1]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS die_with_patch]} {[VarSub sha1]} {[DQ [LIT_CHARS "Please fix this in the file "][VarSub todo][LIT_CHARS .]]} ) (ElseTrue) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Please fix this in the file "][VarSub todo][LIT_CHARS .]]} ) ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -s]} {[DQ [VarSub todo]]} ) (Com {[LIT_CHARS return]} ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS comment_for_reflog]} {[LIT_CHARS finish]} ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('newhead', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD]})]})]) (AndOr OP_AND_IF (Case to_match={[VarSub head_name]}, pat_word_list=[[{[LIT_CHARS refs/] [LIT_OTHER "*"]}]] (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('message', {[DQ [VarSub GIT_REFLOG_ACTION][LIT_CHARS ": "][VarSub head_name][LIT_CHARS " onto "][VarSub onto]]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS update-ref]} {[LIT_CHARS -m]} {[DQ [VarSub message]]} {[VarSub head_name]} {[VarSub newhead]} {[VarSub orig_head]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS symbolic-ref]} {[LIT_CHARS -m]} {[DQ [VarSub GIT_REFLOG_ACTION][LIT_CHARS ": returning to "][VarSub head_name]]} {[LIT_CHARS HEAD]} {[VarSub head_name]} ) ) ) ) (AndOr OP_AND_IF (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub state_dir]] [LIT_CHARS /verbose]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS diff-tree]} {[LIT_CHARS --stat]} {[VarSub orig_head] [LIT_CHARS ..HEAD]} ) ) (AndOr OP_AND_IF (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -s]} {[DQ [VarSub rewritten_list]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS notes]} {[LIT_CHARS copy]} {[LIT_CHARS --for-rewrite] [LIT_DBRACKET_LIKE "="] [LIT_CHARS rebase]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten_list]]} 0), > ) (Com {[LIT_CHARS true]} ) ) ) (AndOr OP_AND_IF (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -x]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /hooks/post-rewrite]} ) (Com {[LIT_CHARS test]} {[LIT_CHARS -s]} {[DQ [VarSub rewritten_list]]} ) ) (List (Com {[DQ [VarSub GIT_DIR]] [LIT_CHARS /hooks/post-rewrite]} {[LIT_CHARS rebase]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten_list]]} 0), > ) (Com {[LIT_CHARS true]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub state_dir]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS gc]} {[LIT_CHARS --auto]} ) (Com {[LIT_CHARS warn]} {[DQ [LIT_CHARS "Successfully rebased and updated "][VarSub head_name][LIT_CHARS .]]} ) ) ) ) ) ) ) ) ) (Com {[LIT_CHARS exit]} ) ) ) (FunctionDef do_rest [] (While (Com {[LIT_OTHER ":"]} ) (Com {[LIT_CHARS do_next]} ) ) ) (FunctionDef skip_unnecessary_picks [] (List (= scope= flags=0 words=[] bindings=[('fd', {[LIT_CHARS 3]})]) (AndOr OP_AND_IF (While (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS command]} {[LIT_CHARS rest]} ) (List (Case to_match={[DQ [VarSub fd][LIT_CHARS ","][VarSub command]]}, pat_word_list=[[{[LIT_CHARS 3] [LIT_COMMA ","] [LIT_CHARS pick]}, {[LIT_CHARS 3] [LIT_COMMA ","] [LIT_CHARS p]}], [{[LIT_CHARS 3] [LIT_COMMA ","] [LIT_OTHER "#"] [LIT_OTHER "*"]}, {[LIT_CHARS 3] [LIT_COMMA ","]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('sha1', {[VarSub rest transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS " *"]}]]})]) (Case to_match={[DQ [ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS --quiet]} {[DQ [VarSub sha1]] [LIT_OTHER "^"]})]]}, pat_word_list=[[{[DQ [VarSub onto]] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('onto', {[VarSub sha1]})]) (= scope= flags=0 words=[] bindings=[('fd', {[LIT_CHARS 1]})]) ) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('fd', {[LIT_CHARS 1]})]) ) (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub command][VarSub rest test_op=VS_TEST_COLON_PLUS {[LIT_CHARS " "]}][VarSub rest]]} < (DescriptorRedirectNode target={[VarSub fd]} &"> 1), > ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS mv]} {[LIT_CHARS -f]} {[DQ [VarSub todo]] [LIT_CHARS .new]} {[DQ [VarSub todo]]} ) (AndOr OP_OR_IF (Case to_match={[DQ [ComSub (Com {[LIT_CHARS peek_next_command]})]]}, pat_word_list=[[{[LIT_CHARS squash]}, {[LIT_CHARS s]}, {[LIT_CHARS fixup]}, {[LIT_CHARS f]}]] (Com {[LIT_CHARS record_in_rewritten]} {[DQ [VarSub onto]]} ) ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not skip unnecessary pick commands"]]} ) ) ) ) ) ) (FunctionDef rearrange_squash [] (List (While (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS pick]} {[LIT_CHARS sha1]} {[LIT_CHARS message]} ) (Case to_match={[DQ [VarSub message]]}, pat_word_list=[[{[DQ [LIT_CHARS "squash! "]] [LIT_OTHER "*"]}, {[DQ [LIT_CHARS "fixup! "]] [LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('action', {[DQ [VarSub message transform_ops=[VS_UNARY_DPERCENT {[LIT_CHARS "!*"]}]]]})]) (= scope= flags=0 words=[] bindings=[('rest', {[DQ [VarSub message transform_ops=[VS_UNARY_POUND {[LIT_CHARS "*! "]}]]]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub sha1][LIT_CHARS " "][VarSub action][LIT_CHARS " "][VarSub rest]]} ) (If (Com {[LIT_CHARS test]} {[DQ [VarSub rest transform_ops=[VS_UNARY_POUND {[LIT_CHARS "* "]}]]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [VarSub rest]]} ) (List (= scope= flags=0 words=[] bindings=[('fullsha', {[DQ [ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS -q]} {[LIT_CHARS --verify]} {[DQ [VarSub rest]]})]]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub fullsha]]} ) (Com {[LIT_CHARS echo]} {[DQ [VarSub sha1][LIT_CHARS " +"][VarSub action][LIT_CHARS " "][VarSub fullsha]]} ) ) ) ) ) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -s]} {[DQ [VarSub 1][LIT_CHARS .sq]]} ) (Com {[LIT_CHARS return]} ) ) (= scope= flags=0 words=[] bindings=[('used', {[SQ ]})]) (While (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS pick]} {[LIT_CHARS sha1]} {[LIT_CHARS message]} ) (List (Case to_match={[DQ [LIT_CHARS " "][VarSub used]]}, pat_word_list=[[{[LIT_OTHER "*"] [DQ [LIT_CHARS " "][VarSub sha1][LIT_CHARS " "]] [LIT_OTHER "*"]}]] (Com {[LIT_CHARS continue]} ) ) (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub pick][LIT_CHARS " "][VarSub sha1][LIT_CHARS " "][VarSub message]]} ) (= scope= flags=0 words=[] bindings=[('used', {[DQ [VarSub used][VarSub sha1][LIT_CHARS " "]]})]) (While (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS squash]} {[LIT_CHARS action]} {[LIT_CHARS msg_content]} ) (List (Case to_match={[DQ [LIT_CHARS " "][VarSub used]]}, pat_word_list=[[{[LIT_OTHER "*"] [DQ [LIT_CHARS " "][VarSub squash][LIT_CHARS " "]] [LIT_OTHER "*"]}]] (Com {[LIT_CHARS continue]} ) ) (= scope= flags=0 words=[] bindings=[('emit', {[LIT_CHARS 0]})]) (Case to_match={[DQ [VarSub action]]}, pat_word_list=[[{[LIT_OTHER "+"] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('action', {[DQ [VarSub action transform_ops=[VS_UNARY_POUND {[LIT_CHARS "+"]}]]]})]) (Case to_match={[DQ [VarSub msg_content]]}, pat_word_list=[[{[DQ [VarSub sha1]] [LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('emit', {[LIT_CHARS 1]})]) ) ) (Case to_match={[DQ [VarSub message]]}, pat_word_list=[[{[DQ [VarSub msg_content]] [LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('emit', {[LIT_CHARS 1]})]) ) ) (If (Com {[LIT_CHARS test]} {[VarSub emit]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS 1]} ) (List (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub action][LIT_CHARS " "][VarSub squash][LIT_CHARS " "][VarSub action][LIT_CHARS "! "][VarSub msg_content]]} ) (= scope= flags=0 words=[] bindings=[('used', {[DQ [VarSub used][VarSub squash][LIT_CHARS " "]]})]) ) ) ) ) ) ) (Com {[LIT_CHARS cat]} {[DQ [VarSub 1][LIT_CHARS .rearranged]]} < (FilenameRedirectNode filename={[DQ [VarSub 1]]} "> 1), > ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub 1][LIT_CHARS .sq]]} {[DQ [VarSub 1][LIT_CHARS .rearranged]]} ) ) ) (FunctionDef add_exec_commands [] (AndOr OP_AND_IF (List redirects=[(FilenameRedirectNode filename={[DQ [VarSub 1]]} 0), (FilenameRedirectNode filename={[DQ [VarSub 1][LIT_CHARS .new]]} "> 1)] (= scope= flags=0 words=[] bindings=[('first', {[LIT_CHARS t]})]) (While (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS insn]} {[LIT_CHARS rest]} ) (List (Case to_match={[VarSub insn]}, pat_word_list=[[{[LIT_CHARS pick]}]] (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub first]]} ) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s"]]} {[DQ [VarSub cmd]]} ) ) ) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub insn]]} {[DQ [VarSub rest]]} ) (= scope= flags=0 words=[] bindings=[('first', {[SQ ]})]) ) ) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%s"]]} {[DQ [VarSub cmd]]} ) ) (Com {[LIT_CHARS mv]} {[DQ [VarSub 1][LIT_CHARS .new]]} {[DQ [VarSub 1]]} ) ) ) (Case to_match={[DQ [VarSub action]]}, pat_word_list=[[{[LIT_CHARS continue]}], [{[LIT_CHARS skip]}]] (List (If (Com {[LIT_CHARS git]} {[LIT_CHARS diff-index]} {[LIT_CHARS --cached]} {[LIT_CHARS --quiet]} {[LIT_CHARS HEAD]} {[LIT_CHARS --]} ) (Com {[LIT_OTHER ":"]} {[LIT_CHARS Nothing]} {[LIT_CHARS to]} {[LIT_CHARS commit]} {[LIT_CHARS --]} {[LIT_CHARS skip]} {[LIT_CHARS this]} ) (ElseTrue) (List (If (Pipeline! (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub author_script]]} ) ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "You have staged changes in your working tree. If these changes are meant to be\n"][LIT_CHARS "squashed into the previous commit, run:\n"][LIT_CHARS "\n"][LIT_CHARS " git commit --amend\n"][LIT_CHARS "\n"][LIT_CHARS "If they are meant to go into a new commit, run:\n"][LIT_CHARS "\n"][LIT_CHARS " git commit\n"][LIT_CHARS "\n"][LIT_CHARS "In both case, once you're done, continue with:\n"][LIT_CHARS "\n"][LIT_CHARS " git rebase --continue\n"]]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS .]} {[DQ [VarSub author_script]]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Error trying to find the author identity to amend commit"]]} ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub amend]]} ) (List (= scope= flags=0 words=[] bindings=[('current_head', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]})]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[DQ [VarSub current_head]]} {[LIT_DBRACKET_LIKE "="]} {[ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub amend]]})]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "You have uncommitted changes in your working tree. Please, commit them\n"][LIT_CHARS "first and then run 'git rebase --continue' again."]]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS do_with_author]} {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --amend]} {[LIT_CHARS --no-verify]} {[LIT_CHARS -F]} {[DQ [VarSub msg]]} {[LIT_CHARS -e]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not commit staged changes."]]} ) ) ) (ElseTrue) (AndOr OP_OR_IF (Com {[LIT_CHARS do_with_author]} {[LIT_CHARS git]} {[LIT_CHARS commit]} {[LIT_CHARS --no-verify]} {[LIT_CHARS -F]} {[DQ [VarSub msg]]} {[LIT_CHARS -e]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not commit staged changes."]]} ) ) ) ) ) (Com {[LIT_CHARS record_in_rewritten]} {[DQ [ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub state_dir]] [LIT_CHARS /stopped-sha]})]]} ) (Com {[LIT_CHARS require_clean_work_tree]} {[DQ [LIT_CHARS rebase]]} ) (Com {[LIT_CHARS do_rest]} ) ) (List (Com {[LIT_CHARS git]} {[LIT_CHARS rerere]} {[LIT_CHARS clear]} ) (Com {[LIT_CHARS do_rest]} ) ) ) (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 die]} {[DQ [LIT_CHARS "You need to set your committer info first"]]} ) ) (Com {[LIT_CHARS comment_for_reflog]} {[LIT_CHARS start]} ) (If (Com {[LIT_CHARS test]} {[LIT_OTHER "!"]} {[LIT_CHARS -z]} {[DQ [VarSub switch_to]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[DQ [VarSub switch_to]]} {[LIT_CHARS --]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not checkout "][VarSub switch_to]]} ) ) ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('orig_head', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS HEAD]})]})]) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "No HEAD?"]]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS mkdir]} {[DQ [VarSub state_dir]]} ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not create temporary "][VarSub state_dir]]} ) ) (AndOr OP_OR_IF (Com {[LIT_OTHER ":"]} < (FilenameRedirectNode filename={[DQ [VarSub state_dir]] [LIT_CHARS /interactive]} "> 1), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not mark as interactive"]]} ) ) (Com {[LIT_CHARS write_basic_state]} ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS t]} {[LIT_DBRACKET_LIKE "="]} {[DQ [VarSub preserve_merges]]} ) (List (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub rebase_root]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS mkdir]} {[DQ [VarSub rewritten]]} ) (For c [{[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS merge-base]} {[LIT_CHARS --all]} {[VarSub orig_head]} {[VarSub upstream]})]}]) (AndOr OP_OR_IF (Com {[LIT_CHARS echo]} {[VarSub onto]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub c]} "> 1), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not init rewritten commits"]]} ) ) ) ) (ElseTrue) (AndOr OP_AND_IF (Com {[LIT_CHARS mkdir]} {[DQ [VarSub rewritten]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS echo]} {[VarSub onto]} < (FilenameRedirectNode filename={[DQ [VarSub rewritten]] [LIT_CHARS /root]} "> 1), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Could not init rewritten commits"]]} ) ) ) ) (= scope= flags=0 words=[] bindings=[('merges_option', {[SQ ]})]) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('merges_option', {[DQ [LIT_CHARS "--no-merges --cherry-pick"]]})]) ) (= scope= flags=0 words=[] bindings=[('shorthead', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --short]} {[VarSub orig_head]})]})]) (= scope= flags=0 words=[] bindings=[('shortonto', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --short]} {[VarSub onto]})]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub rebase_root]]} ) (List (= scope= flags=0 words=[] bindings=[('shortupstream', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --short]} {[VarSub upstream]})]})]) (= scope= flags=0 words=[] bindings=[('revisions', {[VarSub upstream] [LIT_CHARS ...] [VarSub orig_head]})]) (= scope= flags=0 words=[] bindings=[('shortrevisions', {[VarSub shortupstream] [LIT_CHARS ..] [VarSub shorthead]})]) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('revisions', {[VarSub onto] [LIT_CHARS ...] [VarSub orig_head]})]) (= scope= flags=0 words=[] bindings=[('shortrevisions', {[VarSub shorthead]})]) ) ) (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[VarSub merges_option]} {[LIT_CHARS --pretty] [LIT_DBRACKET_LIKE "="] [LIT_CHARS oneline]} {[LIT_CHARS --abbrev-commit]} {[LIT_CHARS --abbrev] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 7]} {[LIT_CHARS --reverse]} {[LIT_CHARS --left-right]} {[LIT_CHARS --topo-order]} {[VarSub revisions]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "s/^>//p"]]} ) (While (Com {[LIT_CHARS read]} {[LIT_CHARS -r]} {[LIT_CHARS shortsha1]} {[LIT_CHARS rest]} ) (List (If (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub keep_empty]]} ) (Com {[LIT_CHARS is_empty_commit]} {[VarSub shortsha1]} ) ) (= scope= flags=0 words=[] bindings=[('comment_out', {[DQ [LIT_CHARS "# "]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('comment_out', {[SQ ]})]) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS t]} {[LIT_NEQUAL "!="]} {[DQ [VarSub preserve_merges]]} ) (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub comment_out][LIT_CHARS "pick "][VarSub shortsha1][LIT_CHARS " "][VarSub rest]]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} >"> 1), > ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('sha1', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[VarSub shortsha1]})]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub rebase_root]]} ) (List (= scope= flags=0 words=[] bindings=[('preserve', {[LIT_CHARS t]})]) (For p [{[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[LIT_CHARS --parents]} {[LIT_CHARS -1]} {[VarSub sha1]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -s]} {[LIT_CHARS -f2-]}) )]}]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub p]} ) (= scope= flags=0 words=[] bindings=[('preserve', {[LIT_CHARS f]})]) ) ) ) (ElseTrue) (= scope= flags=0 words=[] bindings=[('preserve', {[LIT_CHARS f]})]) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS f]} {[LIT_DBRACKET_LIKE "="]} {[DQ [VarSub preserve]]} ) (List (Com {[LIT_CHARS touch]} {[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub sha1]} ) (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub comment_out][LIT_CHARS "pick "][VarSub shortsha1][LIT_CHARS " "][VarSub rest]]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} >"> 1), > ) ) ) ) ) ) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS t]} {[LIT_DBRACKET_LIKE "="]} {[DQ [VarSub preserve_merges]]} ) (List (Com {[LIT_CHARS mkdir]} {[DQ [VarSub dropped]]} ) (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[VarSub revisions]} {[LIT_CHARS --left-right]} {[LIT_CHARS --cherry-pick]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "s/^>//p"]]} < (FilenameRedirectNode filename={[DQ [VarSub state_dir]] [LIT_CHARS /not-cherry-picks]} "> 1), > ) ) (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[VarSub revisions]} ) (While (Com {[LIT_CHARS read]} {[LIT_CHARS rev]} ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -f]} {[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub rev]} {[LIT_CHARS -a]} {[DQ [ComSub (Com {[LIT_CHARS sane_grep]} {[DQ [VarSub rev]]} {[DQ [VarSub state_dir]] [LIT_CHARS /not-cherry-picks]})]]} {[LIT_DBRACKET_LIKE "="]} {[DQ ]} ) (List (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[LIT_CHARS --parents]} {[LIT_CHARS -1]} {[VarSub rev]} ) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -s]} {[LIT_CHARS -f2]} < (FilenameRedirectNode filename={[DQ [VarSub dropped]] [LIT_CHARS /] [VarSub rev]} "> 1), > ) ) (= scope= flags=0 words=[] bindings=[('short', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-list]} {[LIT_CHARS -1]} {[LIT_CHARS --abbrev-commit]} {[LIT_CHARS --abbrev] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 7]} {[VarSub rev]})]})]) (Com {[LIT_CHARS sane_grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS "^[a-z][a-z]* "][VarSub short]]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} 0), (FilenameRedirectNode filename={[DQ [VarSub todo][LIT_CHARS 2]]} "> 1), > ) (Com {[LIT_CHARS mv]} {[DQ [VarSub todo][LIT_CHARS 2]]} {[DQ [VarSub todo]]} ) (Com {[LIT_CHARS rm]} {[DQ [VarSub rewritten]] [LIT_CHARS /] [VarSub rev]} ) ) ) ) ) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -s]} {[DQ [VarSub todo]]} ) (Com {[LIT_CHARS echo]} {[LIT_CHARS noop]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} >"> 1), > ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub autosquash]]} ) (Com {[LIT_CHARS rearrange_squash]} {[DQ [VarSub todo]]} ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub cmd]]} ) (Com {[LIT_CHARS add_exec_commands]} {[DQ [VarSub todo]]} ) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} >"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "\n"][LIT_CHARS "# Rebase "][VarSub shortrevisions][LIT_CHARS " onto "][VarSub shortonto][LIT_CHARS "\n"][LIT_CHARS "#\n"][LIT_CHARS "# Commands:\n"][LIT_CHARS "# p, pick = use commit\n"][LIT_CHARS "# r, reword = use commit, but edit the commit message\n"][LIT_CHARS "# e, edit = use commit, but stop for amending\n"][LIT_CHARS "# s, squash = use commit, but meld into previous commit\n"][LIT_CHARS "# f, fixup = like "][RIGHT_D_QUOTE "\""][LIT_CHARS squash][RIGHT_D_QUOTE "\""][LIT_CHARS ", but discard this commit's log message\n"][LIT_CHARS "# x, exec = run command (the rest of the line) using shell\n"][LIT_CHARS "#\n"][LIT_CHARS "# These lines can be re-ordered; they are executed from top to bottom.\n"][LIT_CHARS "#\n"][LIT_CHARS "# If you remove a line here THAT COMMIT WILL BE LOST.\n"][LIT_CHARS "# However, if you remove everything, the rebase will be aborted.\n"][LIT_CHARS "#\n"]]} 0), > ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub keep_empty]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# Note that empty commits are commented out"]]} < (FilenameRedirectNode filename={[DQ [VarSub todo]]} >"> 1), > ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS has_action]} {[DQ [VarSub todo]]} ) (Com {[LIT_CHARS die_abort]} {[DQ [LIT_CHARS "Nothing to do"]]} ) ) (Com {[LIT_CHARS cp]} {[DQ [VarSub todo]]} {[DQ [VarSub todo]] [LIT_CHARS .backup]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS git_sequence_editor]} {[DQ [VarSub todo]]} ) (Com {[LIT_CHARS die_abort]} {[DQ [LIT_CHARS "Could not execute editor"]]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS has_action]} {[DQ [VarSub todo]]} ) (Com {[LIT_CHARS die_abort]} {[DQ [LIT_CHARS "Nothing to do"]]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -d]} {[DQ [VarSub rewritten]]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub force_rebase]]} ) (Com {[LIT_CHARS skip_unnecessary_picks]} ) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS output]} {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[VarSub onto]} ) (Com {[LIT_CHARS die_abort]} {[DQ [LIT_CHARS "could not detach HEAD"]]} ) ) (Com {[LIT_CHARS git]} {[LIT_CHARS update-ref]} {[LIT_CHARS ORIG_HEAD]} {[VarSub orig_head]} ) (Com {[LIT_CHARS do_rest]} ) )