#!/bin/sh # Copyright (c) 2007, Nanako Shiraishi global dashless := $[basename $0 | sed -e 's/-/ /] global USAGE := ""list [] or: $dashless show [] or: $dashless drop [-q|--quiet] [] or: $dashless ( pop | apply ) [--index] [-q|--quiet] [] or: $dashless branch [] or: $dashless [save [--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] []] or: $dashless clear"" global SUBDIRECTORY_OK := 'Yes' global OPTIONS_SPEC := '' global START_DIR := $[pwd] source git-sh-setup require_work_tree cd_to_toplevel global TMP := ""$GIT_DIR/.git-stash.$Pid"" global TMPindex := "$(GIT_INDEX_FILE-"$(git rev-parse --git-path index)").stash.$Pid" trap 'rm -f "$TMP-"* "$TMPindex"' 0 global ref_stash := 'refs/stash' if git config --get-colorbool color.interactive { global help_color := $[git config --get-color color.interactive.help 'red bold] global reset_color := $[git config --get-color '' reset] } else { global help_color := '' global reset_color := '' } proc no_changes { git diff-index --quiet --cached HEAD --ignore-submodules -- && git diff-files --quiet --ignore-submodules && shell {test -z $untracked || test -z $[untracked_files]} } proc untracked_files { global excl_opt := '--exclude-standard' test $untracked = "all" && global excl_opt := '' git ls-files -o -z $excl_opt } proc clear_stash { if test $Argc != 0 { die $[gettext "git stash clear with parameters is unimplemented] } if global current := $[git rev-parse --verify --quiet $ref_stash] { git update-ref -d $ref_stash $current } } proc create_stash { global stash_msg := $1 global untracked := $2 git update-index -q --refresh if no_changes { exit 0 } # state of the base commit if global b_commit := $[git rev-parse --verify HEAD] { global head := $[git rev-list --oneline -n 1 HEAD --] } else { die $[gettext "You do not have the initial commit yet] } if global branch := $[git symbolic-ref -q HEAD] { global branch := $(branch#refs/heads/) } else { global branch := ''(no branch)'' } global msg := $[printf '%s: %s' $branch $head] # state of the index global i_tree := $[git write-tree] && global i_commit := $[printf 'index on %s\n' $msg | git commit-tree $i_tree -p $b_commit] || die $[gettext "Cannot save the current index state] if test -n $untracked { # Untracked files are stored by themselves in a parentless commit, for # ease of unpacking later. global u_commit := $[ untracked_files | shell { global GIT_INDEX_FILE := $TMPindex && export GIT_INDEX_FILE && rm -f $TMPindex && git update-index -z --add --remove --stdin && global u_tree := $[git write-tree] && printf 'untracked files on %s\n' $msg | git commit-tree $u_tree && rm -f $TMPindex }] || die $[gettext "Cannot save the untracked files] global untracked_commit_option := ""-p $u_commit""; } else { global untracked_commit_option := '' } if test -z $patch_mode { # state of the working tree global w_tree := $[ shell { git read-tree --index-output="$TMPindex" -m $i_tree && global GIT_INDEX_FILE := $TMPindex && export GIT_INDEX_FILE && git diff --name-only -z HEAD -- >"$TMP-stagenames" && git update-index -z --add --remove --stdin <"$TMP-stagenames" && git write-tree && rm -f $TMPindex }] || die $[gettext "Cannot save the current worktree state] } else { rm -f "$TMP-index" && env GIT_INDEX_FILE="$TMP-index" git read-tree HEAD && # find out what the user wants env GIT_INDEX_FILE="$TMP-index" \ git add--interactive --patch=stash -- && # state of the working tree global w_tree := $[env GIT_INDEX_FILE="$TMP-index" git write-tree] || die $[gettext "Cannot save the current worktree state] git diff-tree -p HEAD $w_tree -- >"$TMP-patch" && test -s "$TMP-patch" || die $[gettext "No changes selected] rm -f "$TMP-index" || die $[gettext "Cannot remove temporary index (can't happen)] } # create the stash if test -z $stash_msg { global stash_msg := $[printf 'WIP on %s' $msg] } else { global stash_msg := $[printf 'On %s: %s' $branch $stash_msg] } global w_commit := $[printf '%s\n' $stash_msg | git commit-tree $w_tree -p $b_commit -p $i_commit $untracked_commit_option] || die $[gettext "Cannot record working tree state] } proc store_stash { while test $# != 0 { matchstr $1 { -m|--message { shift global stash_msg := $1 } -q|--quiet { global quiet := 't' } * { break } } shift } test $Argc = 1 || die $[eval_gettext "\"$dashless store\" requires one argument] global w_commit := $1 if test -z $stash_msg { global stash_msg := '"Created via \"git stash store\".'" } git update-ref --create-reflog -m $stash_msg $ref_stash $w_commit global ret := $Status test $ret != 0 && test -z $quiet && die $[eval_gettext "Cannot update \$ref_stash with \$w_commit] return $ret } proc save_stash { global keep_index := '' global patch_mode := '' global untracked := '' while test $# != 0 { matchstr $1 { -k|--keep-index { global keep_index := 't' } --no-keep-index { global keep_index := 'n' } -p|--patch { global patch_mode := 't' # only default to keep if we don't already have an override test -z $keep_index && global keep_index := 't' } -q|--quiet { global GIT_QUIET := 't' } -u|--include-untracked { global untracked := 'untracked' } -a|--all { global untracked := 'all' } --help { show_help } -- { shift break } -* { global option := $1 # TRANSLATORS: $option is an invalid option, like # `--blah-blah'. The 7 spaces at the beginning of the # second line correspond to "error: ". So you should line # up the second line with however many characters the # translation of "error: " takes in your language. E.g. in # English this is: # # $ git stash save --blah-blah 2>&1 | head -n 2 # error: unknown option for 'stash save': --blah-blah # To provide a message, use git stash save -- '--blah-blah' eval_gettextln "error: unknown option for 'stash save': \$option To provide a message, use git stash save -- '\$option'" usage } * { break } } shift } if test -n $patch_mode && test -n $untracked { die $[gettext "Can't use --patch and --include-untracked or --all at the same time] } global stash_msg := "$ifsjoin(Argv)" git update-index -q --refresh if no_changes { say $[gettext "No local changes to save] exit 0 } git reflog exists $ref_stash || clear_stash || die $[gettext "Cannot initialize stash] create_stash $stash_msg $untracked store_stash -m $stash_msg -q $w_commit || die $[gettext "Cannot save the current status] say $[eval_gettext "Saved working directory and index state \$stash_msg] if test -z $patch_mode { git reset --hard $(GIT_QUIET:+-q) test $untracked = "all" && global CLEAN_X_OPTION := '-x' || global CLEAN_X_OPTION := '' if test -n $untracked { git clean --force --quiet -d $CLEAN_X_OPTION } if test $keep_index = "t" && test -n $i_tree { git read-tree --reset -u $i_tree } } else { git apply -R < "$TMP-patch" || die $[gettext "Cannot remove worktree changes] if test $keep_index != "t" { git reset } } } proc have_stash { git rev-parse --verify --quiet $ref_stash >/dev/null } proc list_stash { have_stash || return 0 git log --format="%gd: %gs" -g --first-parent -m @Argv $ref_stash -- } proc show_stash { global ALLOW_UNKNOWN_FLAGS := 't' assert_stash_like @Argv if test -z $FLAGS { if test $[git config --bool stash.showStat || echo true] = "true" { global FLAGS := '--stat' } if test $[git config --bool stash.showPatch || echo false] = "true" { global FLAGS := "$(FLAGS)$(FLAGS:+ )-p" } if test -z $FLAGS { return 0 } } git diff $(FLAGS) $b_commit $w_commit } proc show_help { exec git help stash exit 1 } # # Parses the remaining options looking for flags and # at most one revision defaulting to ${ref_stash}@{0} # if none found. # # Derives related tree and commit objects from the # revision, if one is found. # # stash records the work tree, and is a merge between the # base commit (first parent) and the index tree (second parent). # # REV is set to the symbolic version of the specified stash-like commit # IS_STASH_LIKE is non-blank if ${REV} looks like a stash # IS_STASH_REF is non-blank if the ${REV} looks like a stash ref # s is set to the SHA1 of the stash commit # w_commit is set to the commit containing the working tree # b_commit is set to the base commit # i_commit is set to the commit containing the index tree # u_commit is set to the commit containing the untracked files tree # w_tree is set to the working tree # b_tree is set to the base tree # i_tree is set to the index tree # u_tree is set to the untracked files tree # # GIT_QUIET is set to t if -q is specified # INDEX_OPTION is set to --index if --index is specified. # FLAGS is set to the remaining flags (if allowed) # # dies if: # * too many revisions specified # * no revision is specified and there is no stash stack # * a revision is specified which cannot be resolve to a SHA1 # * a non-existent stash reference is specified # * unknown flags were set and ALLOW_UNKNOWN_FLAGS is not "t" # proc parse_flags_and_rev { test $PARSE_CACHE = "$ifsjoin(Argv)" && return 0 # optimisation global PARSE_CACHE := "$ifsjoin(Argv)" global IS_STASH_LIKE := '' global IS_STASH_REF := '' global INDEX_OPTION := '' global s := '' global w_commit := '' global b_commit := '' global i_commit := '' global u_commit := '' global w_tree := '' global b_tree := '' global i_tree := '' global u_tree := '' global REV := $[git rev-parse --no-flags --symbolic --sq @Argv] || exit 1 global FLAGS := ''for opt in @Argv { matchstr $opt { -q|--quiet { global GIT_QUIET := '-t' } --index { global INDEX_OPTION := '--index' } --help { show_help } -* { test $ALLOW_UNKNOWN_FLAGS = t || die $[eval_gettext "unknown option: \$opt] global FLAGS := ""$(FLAGS)$(FLAGS:+ )$opt"" } } } eval set -- $REV matchstr $Argc { 0 { have_stash || die $[gettext "No stash found.] set -- $(ref_stash)@{0} } 1 { : } * { die $[eval_gettext "Too many revisions specified: \$REV] } } global REV := $[git rev-parse --symbolic --verify --quiet $1] || do { global reference := $1 die $[eval_gettext "\$reference is not a valid reference] } global i_commit := $[git rev-parse --verify --quiet "$REV^2] && set -- $[git rev-parse $REV "$REV^1" "$REV:" "$REV^1:" "$REV^2:" !2 >/dev/null] && global s := $1 && global w_commit := $1 && global b_commit := $2 && global w_tree := $3 && global b_tree := $4 && global i_tree := $5 && global IS_STASH_LIKE := 't' && test $ref_stash = $[git rev-parse --symbolic-full-name $(REV%@*)] && global IS_STASH_REF := 't' global u_commit := $[git rev-parse --verify --quiet "$REV^3] && global u_tree := $[git rev-parse "$REV^3:" !2 >/dev/null] } proc is_stash_like { parse_flags_and_rev @Argv test -n $IS_STASH_LIKE } proc assert_stash_like { is_stash_like @Argv || do { global args := "$ifsjoin(Argv)" die $[eval_gettext "'\$args' is not a stash-like commit] } } proc is_stash_ref { is_stash_like @Argv && test -n $IS_STASH_REF } proc assert_stash_ref { is_stash_ref @Argv || do { global args := "$ifsjoin(Argv)" die $[eval_gettext "'\$args' is not a stash reference] } } proc apply_stash { assert_stash_like @Argv git update-index -q --refresh || die $[gettext "unable to refresh index] # current index state global c_tree := $[git write-tree] || die $[gettext "Cannot apply a stash in the middle of a merge] global unstashed_index_tree := '' if test -n $INDEX_OPTION && test $b_tree != $i_tree && test $c_tree != $i_tree { git diff-tree --binary $s^2^..$s^2 | git apply --cached test $Status -ne 0 && die $[gettext "Conflicts in index. Try without --index.] global unstashed_index_tree := $[git write-tree] || die $[gettext "Could not save index tree] git reset } if test -n $u_tree { env GIT_INDEX_FILE=$TMPindex git-read-tree $u_tree && env GIT_INDEX_FILE=$TMPindex git checkout-index --all && rm -f $TMPindex || die $[gettext "Could not restore untracked files from stash] } eval " GITHEAD_$w_tree='Stashed changes' && GITHEAD_$c_tree='Updated upstream' && GITHEAD_$b_tree='Version stash was based on' && export GITHEAD_$w_tree GITHEAD_$c_tree GITHEAD_$b_tree " if test -n $GIT_QUIET { global GIT_MERGE_VERBOSITY := '0' && export GIT_MERGE_VERBOSITY } if git merge-recursive $b_tree -- $c_tree $w_tree { # No conflict if test -n $unstashed_index_tree { git read-tree $unstashed_index_tree } else { global a := ""$TMP-added"" && git diff-index --cached --name-only --diff-filter=A $c_tree >$a && git read-tree --reset $c_tree && git update-index --add --stdin <$a || die $[gettext "Cannot unstage modified files] rm -f $a } global squelch := '' if test -n $GIT_QUIET { global squelch := ''>/dev/null 2>&1'' } shell {cd $START_DIR && eval "git status $squelch"} || : } else { # Merge conflict; keep the exit status from merge-recursive global status := $Status git rerere if test -n $INDEX_OPTION { gettextln "Index was not unstashed." > !2 } exit $status } } proc pop_stash { assert_stash_ref @Argv if apply_stash @Argv { drop_stash @Argv } else { global status := $Status say $[gettext "The stash is kept in case you need it again.] exit $status } } proc drop_stash { assert_stash_ref @Argv git reflog delete --updateref --rewrite $(REV) && say $[eval_gettext "Dropped \${REV} (\$s)] || die $[eval_gettext "\${REV}: Could not drop stash entry] # clear_stash if we just dropped the last stash entry git rev-parse --verify --quiet "$ref_stash@{0}" >/dev/null || clear_stash } proc apply_to_branch { test -n $1 || die $[gettext "No branch name specified] global branch := $1 shift 1 set -- --index @Argv assert_stash_like @Argv git checkout -b $branch $REV^ && apply_stash @Argv && do { test -z $IS_STASH_REF || drop_stash @Argv } } global PARSE_CACHE := ''--not-parsed'' # The default command is "save" if nothing but options are given global seen_non_option := ''for opt in @Argv { matchstr $opt { -* { } * { global seen_non_option := 't'; break } } } test -n $seen_non_option || set "save" @Argv # Main command set matchstr $1 { list { shift list_stash @Argv } show { shift show_stash @Argv } save { shift save_stash @Argv } apply { shift apply_stash @Argv } clear { shift clear_stash @Argv } create { shift create_stash "$ifsjoin(Argv)" && echo $w_commit } store { shift store_stash @Argv } drop { shift drop_stash @Argv } pop { shift pop_stash @Argv } branch { shift apply_to_branch @Argv } * { matchstr $Argc { 0 { save_stash && say $[gettext "(To restore them type \"git stash apply\")] } * { usage } } } } (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:dashless) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(basename)} {(DQ ($ VSub_Number "$0"))}) (C {(sed)} {(-e)} {(SQ <"s/-/ /">)}) ] negated: False ) ] ) left_token: spids: [8 24] ) } spids: [7] ) ] spids: [7] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:USAGE) op: Equal rhs: { (DQ ("list []\n") (" or: ") ($ VSub_Name "$dashless") (" show []\n") (" or: ") ($ VSub_Name "$dashless") (" drop [-q|--quiet] []\n") (" or: ") ($ VSub_Name "$dashless") (" ( pop | apply ) [--index] [-q|--quiet] []\n") (" or: ") ($ VSub_Name "$dashless") (" branch []\n") (" or: ") ($ VSub_Name "$dashless") (" [save [--patch] [-k|--[no-]keep-index] [-q|--quiet]\n") ("\t\t [-u|--include-untracked] [-a|--all] []]\n") (" or: ") ($ VSub_Name "$dashless") (" clear") ) } spids: [26] ) ] spids: [26] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:SUBDIRECTORY_OK) op:Equal rhs:{(Yes)} spids:[51])] spids: [51] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:OPTIONS_SPEC) op:Equal rhs:{(SQ )} spids:[54])] spids: [54] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:START_DIR) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(pwd)})]) left_token: spids: [57 59] ) } spids: [56] ) ] spids: [56] ) (C {(.)} {(git-sh-setup)}) (C {(require_work_tree)}) (C {(cd_to_toplevel)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TMP) op: Equal rhs: {(DQ ($ VSub_Name "$GIT_DIR") (/.git-stash.) ($ VSub_Dollar "$$"))} spids: [70] ) ] spids: [70] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TMPindex) op: Equal rhs: { (BracedVarSub token: suffix_op: (StringUnary op_id: VTest_Hyphen arg_word: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(git)} {(rev-parse)} {(--git-path)} {(index)})] ) left_token: spids: [82 90] ) ) } ) spids: [78 92] ) (.stash.) ($ VSub_Dollar "$$") } spids: [77] ) ] spids: [77] ) (C {(trap)} {(SQ <"rm -f \"$TMP-\"* \"$TMPindex\"">)} {(0)}) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ref_stash) op:Equal rhs:{(refs/stash)} spids:[105])] spids: [105] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(git)} {(config)} {(--get-colorbool)} {(color.interactive)}) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:help_color) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(config)} {(--get-color)} {(color.interactive.help)} {(SQ <"red bold">)} ) ] ) left_token: spids: [125 137] ) ) } spids: [123] ) ] spids: [123] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:reset_color) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(git)} {(config)} {(--get-color)} {(SQ )} {(reset)})] ) left_token: spids: [143 154] ) ) } spids: [141] ) ] spids: [141] ) ] spids: [-1 120] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:help_color) op:Equal rhs:{(SQ )} spids:[160])] spids: [160] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:reset_color) op:Equal rhs:{(SQ )} spids:[163])] spids: [163] ) ] spids: [157 165] ) (FuncDef name: no_changes body: (BraceGroup children: [ (AndOr children: [ (C {(git)} {(diff-index)} {(--quiet)} {(--cached)} {(HEAD)} {(--ignore-submodules)} {(--)}) (AndOr children: [ (C {(git)} {(diff-files)} {(--quiet)} {(--ignore-submodules)}) (Subshell child: (AndOr children: [ (C {(test)} {(-z)} {(DQ ($ VSub_Name "$untracked"))}) (C {(test)} {(-z)} { (DQ (CommandSubPart command_list: (CommandList children:[(C {(untracked_files)})]) left_token: spids: [220 222] ) ) } ) ] op_id: Op_DPipe ) spids: [204 224] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [173] ) spids: [168 172] ) (FuncDef name: untracked_files body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:excl_opt) op: Equal rhs: {(--exclude-standard)} spids: [237] ) ] spids: [237] ) (AndOr children: [ (C {(test)} {(DQ ($ VSub_Name "$untracked"))} {(Lit_Other "=")} {(DQ (all))}) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:excl_opt) op:Equal rhs:{(SQ )} spids:[255])] spids: [255] ) ] op_id: Op_DAmp ) (C {(git)} {(ls-files)} {(-o)} {(-z)} {($ VSub_Name "$excl_opt")}) ] spids: [234] ) spids: [229 233] ) (FuncDef name: clear_stash body: (BraceGroup children: [ (If arms: [ (if_arm cond: [(C {(test)} {($ VSub_Pound "$#")} {(KW_Bang "!") (Lit_Other "=")} {(0)})] action: [ (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("git stash clear with parameters is unimplemented"))} ) ] ) left_token: spids: [297 303] ) ) } ) ] spids: [-1 291] ) ] spids: [-1 307] ) (If arms: [ (if_arm cond: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:current) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} {(--quiet)} {($ VSub_Name "$ref_stash")} ) ] ) left_token: spids: [313 323] ) } spids: [312] ) ] spids: [312] ) ] action: [ (C {(git)} {(update-ref)} {(-d)} {($ VSub_Name "$ref_stash")} {($ VSub_Name "$current")} ) ] spids: [-1 326] ) ] spids: [-1 340] ) ] spids: [276] ) spids: [271 275] ) (FuncDef name: create_stash body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stash_msg) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [353] ) ] spids: [353] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:untracked) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [359] ) ] spids: [359] ) (C {(git)} {(update-index)} {(-q)} {(--refresh)}) (If arms: [(if_arm cond:[(C {(no_changes)})] action:[(C {(exit)} {(0)})] spids:[-1380])] spids: [-1 388] ) (If arms: [ (if_arm cond: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:b_commit) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(git)} {(rev-parse)} {(--verify)} {(HEAD)})] ) left_token: spids: [399 407] ) } spids: [398] ) ] spids: [398] ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:head) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-list)} {(--oneline)} {(-n)} {(1)} {(HEAD)} {(--)}) ] ) left_token: spids: [414 428] ) } spids: [413] ) ] spids: [413] ) ] spids: [-1 410] ) ] else_action: [ (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("You do not have the initial commit yet"))})] ) left_token: spids: [437 443] ) ) } ) ] spids: [431 447] ) (If arms: [ (if_arm cond: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:branch) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(git)} {(symbolic-ref)} {(-q)} {(HEAD)})] ) left_token: spids: [454 462] ) } spids: [453] ) ] spids: [453] ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:branch) op: Equal rhs: { (BracedVarSub token: suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(refs) (Lit_Slash /) (heads) (Lit_Slash /)} ) spids: [469 476] ) } spids: [468] ) ] spids: [468] ) ] spids: [-1 465] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:branch) op: Equal rhs: {(SQ <"(no branch)">)} spids: [482] ) ] spids: [482] ) ] spids: [479 488] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:msg) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(printf)} {(SQ <"%s: %s">)} {(DQ ($ VSub_Name "$branch"))} {(DQ ($ VSub_Name "$head"))} ) ] ) left_token: spids: [492 506] ) } spids: [491] ) ] spids: [491] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i_tree) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(git)} {(write-tree)})]) left_token: spids: [515 519] ) } spids: [514] ) ] spids: [514] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i_commit) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(printf)} {(SQ <"index on %s\\n">)} {(DQ ($ VSub_Name "$msg"))} ) (C {(git)} {(commit-tree)} {($ VSub_Name "$i_tree")} {(-p)} {($ VSub_Name "$b_commit")} ) ] negated: False ) ] ) left_token: spids: [525 548] ) } spids: [524] ) ] spids: [524] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Cannot save the current index state"))}) ] ) left_token: spids: [556 562] ) ) } ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$untracked"))})] action: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:u_commit) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(untracked_files)}) (Subshell child: (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GIT_INDEX_FILE) op: Equal rhs: {(DQ ($ VSub_Name "$TMPindex"))} spids: [600] ) ] spids: [600] ) (AndOr children: [ (C {(export)} {(GIT_INDEX_FILE)}) (AndOr children: [ (C {(rm)} {(-f)} {(DQ ($ VSub_Name "$TMPindex"))} ) (AndOr children: [ (C {(git)} {(update-index)} {(-z)} {(--add)} {(--remove)} {(--stdin)} ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name: u_tree ) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} { ( write-tree ) } ) ] ) left_token: < Left_CommandSub "$(" > spids: [642 646] ) } spids: [641] ) ] spids: [641] ) (AndOr children: [ (Pipeline children: [ (C {(printf)} { (SQ < "untracked files on %s\\n" > ) } {(DQ ($ VSub_Name "$msg"))} ) (C {(git)} {(commit-tree)} {($ VSub_Name "$u_tree")} ) ] negated: False ) (C {(rm)} {(-f)} { (DQ ($ VSub_Name "$TMPindex" ) ) } ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [597 681] ) ] negated: False ) ] ) left_token: spids: [590 683] ) } spids: [589] ) ] spids: [589] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Cannot save the untracked files"))}) ] ) left_token: spids: [690 696] ) ) } ) ] op_id: Op_DPipe ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:untracked_commit_option) op: Equal rhs: {(DQ ("-p ") ($ VSub_Name "$u_commit"))} spids: [701] ) ] spids: [701] ) terminator: ) ] spids: [-1 578] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:untracked_commit_option) op: Equal rhs: {(SQ )} spids: [712] ) ] spids: [712] ) ] spids: [709 715] ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$patch_mode"))})] action: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:w_tree) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Subshell child: (AndOr children: [ (C {(git)} {(read-tree)} {(--index-output) (Lit_Other "=") (DQ ($ VSub_Name "$TMPindex")) } {(-m)} {($ VSub_Name "$i_tree")} ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GIT_INDEX_FILE) op: Equal rhs: {(DQ ($ VSub_Name "$TMPindex"))} spids: [761] ) ] spids: [761] ) (AndOr children: [ (C {(export)} {(GIT_INDEX_FILE)}) (AndOr children: [ (SimpleCommand words: [ {(git)} {(diff)} {(--name-only)} {(-z)} {(HEAD)} {(--)} ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: { (DQ ($ VSub_Name "$TMP") (-stagenames) ) } spids: [788] ) ] ) (AndOr children: [ (SimpleCommand words: [ {(git)} {(update-index)} {(-z)} {(--add)} {(--remove)} {(--stdin)} ] redirects: [ (Redir op_id: Redir_Less fd: -1 arg_word: { (DQ ($ VSub_Name "$TMP") (-stagenames) ) } spids: [809] ) ] ) (AndOr children: [ (C {(git)} {(write-tree)}) (C {(rm)} {(-f)} { (DQ ($ VSub_Name "$TMPindex") ) } ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [741 834] ) ] ) left_token: spids: [739 836] ) } spids: [738] ) ] spids: [738] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Cannot save the current worktree state"))}) ] ) left_token: spids: [844 850] ) ) } ) ] op_id: Op_DPipe ) ] spids: [-1 730] ) ] else_action: [ (AndOr children: [ (C {(rm)} {(-f)} {(DQ ($ VSub_Name "$TMP") (-index))}) (AndOr children: [ (SimpleCommand words: [{(git)} {(read-tree)} {(HEAD)}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ VSub_Name "$TMP") (-index))} spids: [871] ) ] ) (AndOr children: [ (SimpleCommand words: [ {(git)} {(add--interactive)} {(--patch) (Lit_Other "=") (stash)} {(--)} ] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ VSub_Name "$TMP") (-index))} spids: [891] ) ] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:w_tree) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(git)} {(write-tree)}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ VSub_Name "$TMP") (-index))} spids: [919] ) ] ) ] ) left_token: spids: [918 928] ) } spids: [917] ) ] spids: [917] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Cannot save the current worktree state"))} ) ] ) left_token: spids: [936 942] ) ) } ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (AndOr children: [ (SimpleCommand words: [{(git)} {(diff-tree)} {(-p)} {(HEAD)} {($ VSub_Name "$w_tree")} {(--)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(DQ ($ VSub_Name "$TMP") (-patch))} spids: [959] ) ] ) (AndOr children: [ (C {(test)} {(-s)} {(DQ ($ VSub_Name "$TMP") (-patch))}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("No changes selected"))})] ) left_token: spids: [983 989] ) ) } ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) (AndOr children: [ (C {(rm)} {(-f)} {(DQ ($ VSub_Name "$TMP") (-index))}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Cannot remove temporary index (can't happen)"))}) ] ) left_token: spids: [1009 1015] ) ) } ) ] op_id: Op_DPipe ) ] spids: [855 1020] ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$stash_msg"))})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stash_msg) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(printf)} {(SQ <"WIP on %s">)} {(DQ ($ VSub_Name "$msg"))}) ] ) left_token: spids: [1043 1053] ) } spids: [1042] ) ] spids: [1042] ) ] spids: [-1 1039] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stash_msg) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(printf)} {(SQ <"On %s: %s">)} {(DQ ($ VSub_Name "$branch"))} {(DQ ($ VSub_Name "$stash_msg"))} ) ] ) left_token: spids: [1060 1074] ) } spids: [1059] ) ] spids: [1059] ) ] spids: [1056 1077] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:w_commit) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(printf)} {(SQ <"%s\\n">)} {(DQ ($ VSub_Name "$stash_msg"))}) (C {(git)} {(commit-tree)} {($ VSub_Name "$w_tree")} {(-p)} {($ VSub_Name "$b_commit")} {(-p)} {($ VSub_Name "$i_commit")} {($ VSub_Name "$untracked_commit_option")} ) ] negated: False ) ] ) left_token: spids: [1081 1110] ) } spids: [1080] ) ] spids: [1080] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("Cannot record working tree state"))})] ) left_token: spids: [1118 1124] ) ) } ) ] op_id: Op_DPipe ) ] spids: [350] ) spids: [345 349] ) (FuncDef name: store_stash body: (BraceGroup children: [ (While cond: [(C {(test)} {($ VSub_Pound "$#")} {(KW_Bang "!") (Lit_Other "=")} {(0)})] body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Number "$1"))} arms: [ (case_arm pat_list: [{(-m)} {(--message)}] action: [ (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stash_msg) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1171] ) ] spids: [1171] ) ] spids: [1162 1165 1177 -1] ) (case_arm pat_list: [{(-q)} {(--quiet)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:quiet) op: Equal rhs: {(t)} spids: [1186] ) ] spids: [1186] ) ] spids: [1180 1183 1190 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [(ControlFlow token:)] spids: [1193 1194 1200 -1] ) ] spids: [1153 1159 1203] ) (C {(shift)}) ] spids: [1150 1209] ) ) (AndOr children: [ (C {(test)} {($ VSub_Pound "$#")} {(Lit_Other "=")} {(1)}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ (EscapedLiteralPart token:) ($ VSub_Name "$dashless") (" store") (EscapedLiteralPart token:) (" requires one argument") ) } ) ] ) left_token: spids: [1226 1236] ) ) } ) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:w_commit) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1241] ) ] spids: [1241] ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$stash_msg"))})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stash_msg) op: Equal rhs: { (DQ ("Created via ") (EscapedLiteralPart token:) ("git stash store") (EscapedLiteralPart token:) (.) ) } spids: [1261] ) ] spids: [1261] ) ] spids: [-1 1258] ) ] spids: [-1 1271] ) (C {(git)} {(update-ref)} {(--create-reflog)} {(-m)} {(DQ ($ VSub_Name "$stash_msg"))} {($ VSub_Name "$ref_stash")} {($ VSub_Name "$w_commit")} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ret) op: Equal rhs: {($ VSub_QMark "$?")} spids: [1292] ) ] spids: [1292] ) (AndOr children: [ (C {(test)} {($ VSub_Name "$ret")} {(KW_Bang "!") (Lit_Other "=")} {(0)}) (AndOr children: [ (C {(test)} {(-z)} {(DQ ($ VSub_Name "$quiet"))}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ ("Cannot update ") (EscapedLiteralPart token: ) ("ref_stash with ") (EscapedLiteralPart token:) (w_commit) ) } ) ] ) left_token: spids: [1321 1331] ) ) } ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (ControlFlow token: arg_word:{($ VSub_Name "$ret")}) ] spids: [1135] ) spids: [1130 1134] ) (FuncDef name: save_stash body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:keep_index) op:Equal rhs:{(SQ )} spids:[1350])] spids: [1350] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:patch_mode) op:Equal rhs:{(SQ )} spids:[1353])] spids: [1353] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:untracked) op:Equal rhs:{(SQ )} spids:[1356])] spids: [1356] ) (While cond: [(C {(test)} {($ VSub_Pound "$#")} {(KW_Bang "!") (Lit_Other "=")} {(0)})] body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Number "$1"))} arms: [ (case_arm pat_list: [{(-k)} {(--keep-index)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keep_index) op: Equal rhs: {(t)} spids: [1389] ) ] spids: [1389] ) ] spids: [1383 1386 1393 -1] ) (case_arm pat_list: [{(--no-keep-index)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keep_index) op: Equal rhs: {(n)} spids: [1400] ) ] spids: [1400] ) ] spids: [1396 1397 1404 -1] ) (case_arm pat_list: [{(-p)} {(--patch)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:patch_mode) op: Equal rhs: {(t)} spids: [1413] ) ] spids: [1413] ) (AndOr children: [ (C {(test)} {(-z)} {(DQ ($ VSub_Name "$keep_index"))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:keep_index) op: Equal rhs: {(t)} spids: [1431] ) ] spids: [1431] ) ] op_id: Op_DAmp ) ] spids: [1407 1410 1435 -1] ) (case_arm pat_list: [{(-q)} {(--quiet)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GIT_QUIET) op: Equal rhs: {(t)} spids: [1444] ) ] spids: [1444] ) ] spids: [1438 1441 1448 -1] ) (case_arm pat_list: [{(-u)} {(--include-untracked)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:untracked) op: Equal rhs: {(untracked)} spids: [1457] ) ] spids: [1457] ) ] spids: [1451 1454 1461 -1] ) (case_arm pat_list: [{(-a)} {(--all)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:untracked) op: Equal rhs: {(all)} spids: [1470] ) ] spids: [1470] ) ] spids: [1464 1467 1474 -1] ) (case_arm pat_list: [{(--help)}] action: [(C {(show_help)})] spids: [1477 1478 1484 -1] ) (case_arm pat_list: [{(--)}] action: [(C {(shift)}) (ControlFlow token:)] spids: [1487 1488 1497 -1] ) (case_arm pat_list: [{(-) (Lit_Other "*")}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:option) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1505] ) ] spids: [1505] ) (C {(eval_gettextln)} { (DQ ("error: unknown option for 'stash save': ") (EscapedLiteralPart token: ) ("option\n") (" To provide a message, use git stash save -- '") (EscapedLiteralPart token: ) ("option'") ) } ) (C {(usage)}) ] spids: [1500 1502 1566 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [(ControlFlow token:)] spids: [1569 1570 1576 -1] ) ] spids: [1374 1380 1579] ) (C {(shift)}) ] spids: [1371 1585] ) ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$patch_mode"))}) (C {(test)} {(-n)} {(DQ ($ VSub_Name "$untracked"))}) ] op_id: Op_DAmp ) ] action: [ (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} { (DQ ( "Can't use --patch and --include-untracked or --all at the same time" ) ) } ) ] ) left_token: spids: [1616 1622] ) ) } ) ] spids: [-1 1610] ) ] spids: [-1 1626] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stash_msg) op: Equal rhs: {(DQ ($ VSub_Star "$*"))} spids: [1630] ) ] spids: [1630] ) (C {(git)} {(update-index)} {(-q)} {(--refresh)}) (If arms: [ (if_arm cond: [(C {(no_changes)})] action: [ (C {(say)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("No local changes to save"))})] ) left_token: spids: [1657 1663] ) ) } ) (C {(exit)} {(0)}) ] spids: [-1 1651] ) ] spids: [-1 1672] ) (AndOr children: [ (C {(git)} {(reflog)} {(exists)} {($ VSub_Name "$ref_stash")}) (AndOr children: [ (C {(clear_stash)}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("Cannot initialize stash"))})] ) left_token: spids: [1693 1699] ) ) } ) ] op_id: Op_DPipe ) ] op_id: Op_DPipe ) (C {(create_stash)} {(DQ ($ VSub_Name "$stash_msg"))} {($ VSub_Name "$untracked")}) (AndOr children: [ (C {(store_stash)} {(-m)} {(DQ ($ VSub_Name "$stash_msg"))} {(-q)} {($ VSub_Name "$w_commit")} ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("Cannot save the current status"))})] ) left_token: spids: [1731 1737] ) ) } ) ] op_id: Op_DPipe ) (C {(say)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ ("Saved working directory and index state ") (EscapedLiteralPart token: ) (stash_msg) ) } ) ] ) left_token: spids: [1744 1752] ) ) } ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$patch_mode"))})] action: [ (C {(git)} {(reset)} {(--hard)} { (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonPlus arg_word:{(-q)}) spids: [1777 1781] ) } ) (AndOr children: [ (C {(test)} {(DQ ($ VSub_Name "$untracked"))} {(Lit_Other "=")} {(DQ (all))}) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CLEAN_X_OPTION) op: Equal rhs: {(-x)} spids: [1798] ) ] spids: [1798] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CLEAN_X_OPTION) op: Equal rhs: {(SQ )} spids: [1803] ) ] spids: [1803] ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$untracked"))})] action: [ (C {(git)} {(clean)} {(--force)} {(--quiet)} {(-d)} {($ VSub_Name "$CLEAN_X_OPTION")} ) ] spids: [-1 1817] ) ] spids: [-1 1833] ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test)} {(DQ ($ VSub_Name "$keep_index"))} {(Lit_Other "=")} {(DQ (t))} ) (C {(test)} {(-n)} {(DQ ($ VSub_Name "$i_tree"))}) ] op_id: Op_DAmp ) ] action: [ (C {(git)} {(read-tree)} {(--reset)} {(-u)} {($ VSub_Name "$i_tree")}) ] spids: [-1 1862] ) ] spids: [-1 1876] ) ] spids: [-1 1768] ) ] else_action: [ (AndOr children: [ (SimpleCommand words: [{(git)} {(apply)} {(-R)}] redirects: [ (Redir op_id: Redir_Less fd: -1 arg_word: {(DQ ($ VSub_Name "$TMP") (-patch))} spids: [1888] ) ] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("Cannot remove worktree changes"))})] ) left_token: spids: [1901 1907] ) ) } ) ] op_id: Op_DPipe ) (If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ VSub_Name "$keep_index"))} {(KW_Bang "!") (Lit_Other "=")} {(DQ (t))} ) ] action: [(C {(git)} {(reset)})] spids: [-1 1928] ) ] spids: [-1 1936] ) ] spids: [1879 1939] ) ] spids: [1347] ) spids: [1342 1346] ) (FuncDef name: have_stash body: (BraceGroup children: [ (SimpleCommand words: [{(git)} {(rev-parse)} {(--verify)} {(--quiet)} {($ VSub_Name "$ref_stash")}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[1962])] ) ] spids: [1949] ) spids: [1944 1948] ) (FuncDef name: list_stash body: (BraceGroup children: [ (AndOr children: [ (C {(have_stash)}) (ControlFlow token: arg_word:{(0)}) ] op_id: Op_DPipe ) (C {(git)} {(log)} {(--format) (Lit_Other "=") (DQ ("%gd: %gs"))} {(-g)} {(--first-parent)} {(-m)} {(DQ ($ VSub_At "$@"))} {($ VSub_Name "$ref_stash")} {(--)} ) ] spids: [1973] ) spids: [1968 1972] ) (FuncDef name: show_stash body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ALLOW_UNKNOWN_FLAGS) op: Equal rhs: {(t)} spids: [2020] ) ] spids: [2020] ) (C {(assert_stash_like)} {(DQ ($ VSub_At "$@"))}) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$FLAGS"))})] action: [ (If arms: [ (if_arm cond: [ (C {(test)} { (DQ (CommandSubPart command_list: (CommandList children: [ (AndOr children: [ (C {(git)} {(config)} {(--bool)} {(stash.showStat)}) (C {(echo)} {(true)}) ] op_id: Op_DPipe ) ] ) left_token: spids: [2051 2065] ) ) } {(Lit_Other "=")} {(DQ (true))} ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FLAGS) op: Equal rhs: {(--stat)} spids: [2078] ) ] spids: [2078] ) ] spids: [-1 2075] ) ] spids: [-1 2082] ) (If arms: [ (if_arm cond: [ (C {(test)} { (DQ (CommandSubPart command_list: (CommandList children: [ (AndOr children: [ (C {(git)} {(config)} {(--bool)} {(stash.showPatch)}) (C {(echo)} {(false)}) ] op_id: Op_DPipe ) ] ) left_token: spids: [2091 2105] ) ) } {(Lit_Other "=")} {(DQ (true))} ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FLAGS) op: Equal rhs: {(${ VSub_Name FLAGS) (BracedVarSub token: suffix_op: (StringUnary op_id:VTest_ColonPlus arg_word:{(" ")}) spids: [2122 2126] ) (-p) } spids: [2118] ) ] spids: [2118] ) ] spids: [-1 2115] ) ] spids: [-1 2130] ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$FLAGS"))})] action: [(ControlFlow token: arg_word:{(0)})] spids: [-1 2145] ) ] spids: [-1 2153] ) ] spids: [-1 2043] ) ] spids: [-1 2156] ) (C {(git)} {(diff)} {(${ VSub_Name FLAGS)} {($ VSub_Name "$b_commit")} {($ VSub_Name "$w_commit")} ) ] spids: [2017] ) spids: [2012 2016] ) (FuncDef name: show_help body: (BraceGroup children: [(C {(exec)} {(git)} {(help)} {(stash)}) (C {(exit)} {(1)})] spids: [2180] ) spids: [2175 2179] ) (FuncDef name: parse_flags_and_rev body: (BraceGroup children: [ (AndOr children: [ (C {(test)} {(DQ ($ VSub_Name "$PARSE_CACHE"))} {(Lit_Other "=")} {(DQ ($ VSub_Star "$*"))} ) (ControlFlow token: arg_word:{(0)}) ] op_id: Op_DAmp ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PARSE_CACHE) op: Equal rhs: {(DQ ($ VSub_Star "$*"))} spids: [2334] ) ] spids: [2334] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IS_STASH_LIKE) op: Equal rhs: {(SQ )} spids: [2341] ) ] spids: [2341] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:IS_STASH_REF) op:Equal rhs:{(SQ )} spids:[2344])] spids: [2344] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:INDEX_OPTION) op:Equal rhs:{(SQ )} spids:[2347])] spids: [2347] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:s) op:Equal rhs:{(SQ )} spids:[2350])] spids: [2350] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:w_commit) op:Equal rhs:{(SQ )} spids:[2353])] spids: [2353] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:b_commit) op:Equal rhs:{(SQ )} spids:[2356])] spids: [2356] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:i_commit) op:Equal rhs:{(SQ )} spids:[2359])] spids: [2359] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:u_commit) op:Equal rhs:{(SQ )} spids:[2362])] spids: [2362] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:w_tree) op:Equal rhs:{(SQ )} spids:[2365])] spids: [2365] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:b_tree) op:Equal rhs:{(SQ )} spids:[2368])] spids: [2368] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:i_tree) op:Equal rhs:{(SQ )} spids:[2371])] spids: [2371] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:u_tree) op:Equal rhs:{(SQ )} spids:[2374])] spids: [2374] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:REV) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--no-flags)} {(--symbolic)} {(--sq)} {(DQ ($ VSub_At "$@"))} ) ] ) left_token: spids: [2379 2393] ) } spids: [2378] ) ] spids: [2378] ) (C {(exit)} {(1)}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FLAGS) op:Equal rhs:{(SQ )} spids:[2403])] spids: [2403] ) (ForEach iter_name: opt do_arg_iter: True body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Name "$opt"))} arms: [ (case_arm pat_list: [{(-q)} {(--quiet)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GIT_QUIET) op: Equal rhs: {(-t)} spids: [2429] ) ] spids: [2429] ) ] spids: [2423 2426 2433 -1] ) (case_arm pat_list: [{(--index)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:INDEX_OPTION) op: Equal rhs: {(--index)} spids: [2440] ) ] spids: [2440] ) ] spids: [2436 2437 2444 -1] ) (case_arm pat_list: [{(--help)}] action: [(C {(show_help)})] spids: [2447 2448 2454 -1] ) (case_arm pat_list: [{(-) (Lit_Other "*")}] action: [ (AndOr children: [ (C {(test)} {(DQ ($ VSub_Name "$ALLOW_UNKNOWN_FLAGS"))} {(Lit_Other "=")} {(t)} ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ ("unknown option: ") (EscapedLiteralPart token: ) (opt) ) } ) ] ) left_token: spids: [2478 2486] ) ) } ) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FLAGS) op: Equal rhs: { (DQ (${ VSub_Name FLAGS) (BracedVarSub token: suffix_op: (StringUnary op_id: VTest_ColonPlus arg_word: {(" ")} ) spids: [2495 2499] ) ($ VSub_Name "$opt") ) } spids: [2490] ) ] spids: [2490] ) ] spids: [2457 2459 2504 -1] ) ] spids: [2414 2420 2507] ) ] spids: [2411 2510] ) spids: [-1 -1] ) (C {(eval)} {(set)} {(--)} {($ VSub_Name "$REV")}) (Case to_match: {($ VSub_Pound "$#")} arms: [ (case_arm pat_list: [{(0)}] action: [ (AndOr children: [ (C {(have_stash)}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("No stash found."))})] ) left_token: spids: [2542 2548] ) ) } ) ] op_id: Op_DPipe ) (C {(set)} {(--)} {(${ VSub_Name ref_stash) (Lit_Other "@") (Lit_LBrace "{") (0) (Lit_RBrace "}")} ) ] spids: [2531 2532 2565 -1] ) (case_arm pat_list: [{(1)}] action: [(C {(Lit_Other ":")})] spids: [2568 2569 2575 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ ("Too many revisions specified: ") (EscapedLiteralPart token: ) (REV) ) } ) ] ) left_token: spids: [2585 2593] ) ) } ) ] spids: [2578 2579 2597 -1] ) ] spids: [2524 2528 2600] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:REV) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--symbolic)} {(--verify)} {(--quiet)} {(DQ ($ VSub_Number "$1"))} ) ] ) left_token: spids: [2605 2619] ) } spids: [2604] ) ] spids: [2604] ) (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:reference) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [2626] ) ] spids: [2626] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ (EscapedLiteralPart token:) ("reference is not a valid reference") ) } ) ] ) left_token: spids: [2635 2642] ) ) } ) ] spids: [2623] ) ] op_id: Op_DPipe ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i_commit) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} {(--quiet)} {(DQ ($ VSub_Name "$REV") ("^2"))} ) ] ) left_token: spids: [2651 2664] ) } spids: [2650] ) ] spids: [2650] ) (AndOr children: [ (C {(set)} {(--)} { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [ {(git)} {(rev-parse)} {(DQ ($ VSub_Name "$REV"))} {(DQ ($ VSub_Name "$REV") ("^1"))} {(DQ ($ VSub_Name "$REV") (":"))} {(DQ ($ VSub_Name "$REV") ("^1:"))} {(DQ ($ VSub_Name "$REV") ("^2:"))} ] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [2702] ) ] ) ] ) left_token: spids: [2673 2704] ) } ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:s) op: Equal rhs: {($ VSub_Number "$1")} spids: [2709] ) ] spids: [2709] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:w_commit) op: Equal rhs: {($ VSub_Number "$1")} spids: [2715] ) ] spids: [2715] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:b_commit) op: Equal rhs: {($ VSub_Number "$2")} spids: [2721] ) ] spids: [2721] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:w_tree) op: Equal rhs: {($ VSub_Number "$3")} spids: [2727] ) ] spids: [2727] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:b_tree) op: Equal rhs: {($ VSub_Number "$4")} spids: [2733] ) ] spids: [2733] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i_tree) op: Equal rhs: {($ VSub_Number "$5")} spids: [2739] ) ] spids: [2739] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IS_STASH_LIKE) op: Equal rhs: {(t)} spids: [2745] ) ] spids: [2745] ) (AndOr children: [ (C {(test)} {(DQ ($ VSub_Name "$ref_stash"))} {(Lit_Other "=")} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--symbolic-full-name)} { (DQ (BracedVarSub token: suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {("@*")} ) spids: [2768 2772] ) ) } ) ] ) left_token: spids: [2760 2774] ) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IS_STASH_REF) op: Equal rhs: {(t)} spids: [2780] ) ] spids: [2780] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:u_commit) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} {(--quiet)} {(DQ ($ VSub_Name "$REV") ("^3"))} ) ] ) left_token: spids: [2786 2799] ) } spids: [2785] ) ] spids: [2785] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:u_tree) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(git)} {(rev-parse)} {(DQ ($ VSub_Name "$REV") ("^3:"))}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [2815] ) ] ) ] ) left_token: spids: [2805 2817] ) } spids: [2804] ) ] spids: [2804] ) ] op_id: Op_DAmp ) ] spids: [2309] ) spids: [2305 2308] ) (FuncDef name: is_stash_like body: (BraceGroup children: [ (C {(parse_flags_and_rev)} {(DQ ($ VSub_At "$@"))}) (C {(test)} {(-n)} {(DQ ($ VSub_Name "$IS_STASH_LIKE"))}) ] spids: [2826] ) spids: [2822 2825] ) (FuncDef name: assert_stash_like body: (BraceGroup children: [ (AndOr children: [ (C {(is_stash_like)} {(DQ ($ VSub_At "$@"))}) (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:args) op: Equal rhs: {(DQ ($ VSub_Star "$*"))} spids: [2865] ) ] spids: [2865] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ ("'") (EscapedLiteralPart token:) ("args' is not a stash-like commit") ) } ) ] ) left_token: spids: [2874 2882] ) ) } ) ] spids: [2862] ) ] op_id: Op_DPipe ) ] spids: [2851] ) spids: [2847 2850] ) (FuncDef name: is_stash_ref body: (BraceGroup children: [ (AndOr children: [ (C {(is_stash_like)} {(DQ ($ VSub_At "$@"))}) (C {(test)} {(-n)} {(DQ ($ VSub_Name "$IS_STASH_REF"))}) ] op_id: Op_DAmp ) ] spids: [2895] ) spids: [2891 2894] ) (FuncDef name: assert_stash_ref body: (BraceGroup children: [ (AndOr children: [ (C {(is_stash_ref)} {(DQ ($ VSub_At "$@"))}) (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:args) op: Equal rhs: {(DQ ($ VSub_Star "$*"))} spids: [2935] ) ] spids: [2935] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ ("'") (EscapedLiteralPart token:) ("args' is not a stash reference") ) } ) ] ) left_token: spids: [2944 2952] ) ) } ) ] spids: [2932] ) ] op_id: Op_DPipe ) ] spids: [2921] ) spids: [2917 2920] ) (FuncDef name: apply_stash body: (BraceGroup children: [ (C {(assert_stash_like)} {(DQ ($ VSub_At "$@"))}) (AndOr children: [ (C {(git)} {(update-index)} {(-q)} {(--refresh)}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("unable to refresh index"))})] ) left_token: spids: [2991 2997] ) ) } ) ] op_id: Op_DPipe ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:c_tree) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(git)} {(write-tree)})]) left_token: spids: [3007 3011] ) } spids: [3006] ) ] spids: [3006] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Cannot apply a stash in the middle of a merge"))}) ] ) left_token: spids: [3019 3025] ) ) } ) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:unstashed_index_tree) op: Equal rhs: {(SQ )} spids: [3030] ) ] spids: [3030] ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$INDEX_OPTION"))}) (AndOr children: [ (C {(test)} {(DQ ($ VSub_Name "$b_tree"))} {(KW_Bang "!") (Lit_Other "=")} {(DQ ($ VSub_Name "$i_tree"))} ) (C {(test)} {(DQ ($ VSub_Name "$c_tree"))} {(KW_Bang "!") (Lit_Other "=")} {(DQ ($ VSub_Name "$i_tree"))} ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] action: [ (Pipeline children: [ (C {(git)} {(diff-tree)} {(--binary)} {($ VSub_Name "$s") (Lit_Other "^") (2) (Lit_Other "^") (..) ($ VSub_Name "$s") (Lit_Other "^") (2) } ) (C {(git)} {(apply)} {(--cached)}) ] negated: False ) (AndOr children: [ (C {(test)} {($ VSub_QMark "$?")} {(-ne)} {(0)}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Conflicts in index. Try without --index."))}) ] ) left_token: spids: [3116 3122] ) ) } ) ] op_id: Op_DAmp ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:unstashed_index_tree) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(git)} {(write-tree)})]) left_token: spids: [3127 3131] ) } spids: [3126] ) ] spids: [3126] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("Could not save index tree"))})] ) left_token: spids: [3139 3145] ) ) } ) ] op_id: Op_DPipe ) (C {(git)} {(reset)}) ] spids: [-1 3075] ) ] spids: [-1 3154] ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$u_tree"))})] action: [ (AndOr children: [ (SimpleCommand words: [{(git-read-tree)} {(DQ ($ VSub_Name "$u_tree"))}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ VSub_Name "$TMPindex"))} spids: [3172] ) ] ) (AndOr children: [ (SimpleCommand words: [{(git)} {(checkout-index)} {(--all)}] more_env: [ (env_pair name: GIT_INDEX_FILE val: {(DQ ($ VSub_Name "$TMPindex"))} spids: [3186] ) ] ) (AndOr children: [ (C {(rm)} {(-f)} {(DQ ($ VSub_Name "$TMPindex"))}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} { (DQ ( "Could not restore untracked files from stash" ) ) } ) ] ) left_token: spids: [3214 3220] ) ) } ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [-1 3169] ) ] spids: [-1 3224] ) (C {(eval)} { (DQ ("\n") ("\t\tGITHEAD_") ($ VSub_Name "$w_tree") ("='Stashed changes' &&\n") ("\t\tGITHEAD_") ($ VSub_Name "$c_tree") ("='Updated upstream' &&\n") ("\t\tGITHEAD_") ($ VSub_Name "$b_tree") ("='Version stash was based on' &&\n") ("\t\texport GITHEAD_") ($ VSub_Name "$w_tree") (" GITHEAD_") ($ VSub_Name "$c_tree") (" GITHEAD_") ($ VSub_Name "$b_tree") ("\n") ("\t") ) } ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$GIT_QUIET"))})] action: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GIT_MERGE_VERBOSITY) op: Equal rhs: {(0)} spids: [3267] ) ] spids: [3267] ) (C {(export)} {(GIT_MERGE_VERBOSITY)}) ] op_id: Op_DAmp ) ] spids: [-1 3264] ) ] spids: [-1 3277] ) (If arms: [ (if_arm cond: [ (C {(git)} {(merge-recursive)} {($ VSub_Name "$b_tree")} {(--)} {($ VSub_Name "$c_tree")} {($ VSub_Name "$w_tree")} ) ] action: [ (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$unstashed_index_tree"))})] action: [ (C {(git)} {(read-tree)} {(DQ ($ VSub_Name "$unstashed_index_tree"))}) ] spids: [-1 3313] ) ] else_action: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:a) op: Equal rhs: {(DQ ($ VSub_Name "$TMP") (-added))} spids: [3328] ) ] spids: [3328] ) (AndOr children: [ (SimpleCommand words: [ {(git)} {(diff-index)} {(--cached)} {(--name-only)} {(--diff-filter) (Lit_Other "=") (A)} {($ VSub_Name "$c_tree")} ] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(DQ ($ VSub_Name "$a"))} spids: [3351] ) ] ) (AndOr children: [ (C {(git)} {(read-tree)} {(--reset)} {($ VSub_Name "$c_tree")}) (AndOr children: [ (SimpleCommand words: [{(git)} {(update-index)} {(--add)} {(--stdin)}] redirects: [ (Redir op_id: Redir_Less fd: -1 arg_word: {(DQ ($ VSub_Name "$a"))} spids: [3378] ) ] ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("Cannot unstage modified files"))} ) ] ) left_token: spids: [3389 3395] ) ) } ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (C {(rm)} {(-f)} {(DQ ($ VSub_Name "$a"))}) ] spids: [3325 3408] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:squelch) op: Equal rhs: {(SQ )} spids: [3411] ) ] spids: [3411] ) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$GIT_QUIET"))})] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:squelch) op: Equal rhs: {(SQ <">/dev/null 2>&1">)} spids: [3428] ) ] spids: [3428] ) ] spids: [-1 3425] ) ] spids: [-1 3434] ) (AndOr children: [ (Subshell child: (AndOr children: [ (C {(cd)} {(DQ ($ VSub_Name "$START_DIR"))}) (C {(eval)} {(DQ ("git status ") ($ VSub_Name "$squelch"))}) ] op_id: Op_DAmp ) spids: [3437 3452] ) (C {(Lit_Other ":")}) ] op_id: Op_DPipe ) ] spids: [-1 3295] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:status) op: Equal rhs: {($ VSub_QMark "$?")} spids: [3466] ) ] spids: [3466] ) (C {(git)} {(rerere)}) (If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$INDEX_OPTION"))})] action: [ (SimpleCommand words: [{(gettextln)} {(DQ ("Index was not unstashed."))}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[3495])] ) ] spids: [-1 3486] ) ] spids: [-1 3499] ) (C {(exit)} {($ VSub_Name "$status")}) ] spids: [3459 3507] ) ] spids: [2966] ) spids: [2961 2965] ) (FuncDef name: pop_stash body: (BraceGroup children: [ (C {(assert_stash_ref)} {(DQ ($ VSub_At "$@"))}) (If arms: [ (if_arm cond: [(C {(apply_stash)} {(DQ ($ VSub_At "$@"))})] action: [(C {(drop_stash)} {(DQ ($ VSub_At "$@"))})] spids: [-1 3536] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:status) op: Equal rhs: {($ VSub_QMark "$?")} spids: [3549] ) ] spids: [3549] ) (C {(say)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} {(DQ ("The stash is kept in case you need it again."))}) ] ) left_token: spids: [3556 3562] ) ) } ) (C {(exit)} {($ VSub_Name "$status")}) ] spids: [3546 3571] ) ] spids: [3516] ) spids: [3512 3515] ) (FuncDef name: drop_stash body: (BraceGroup children: [ (C {(assert_stash_ref)} {(DQ ($ VSub_At "$@"))}) (AndOr children: [ (C {(git)} {(reflog)} {(delete)} {(--updateref)} {(--rewrite)} {(DQ (${ VSub_Name REV))}) (AndOr children: [ (C {(say)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ ("Dropped ") (EscapedLiteralPart token: ) ("{REV} (") (EscapedLiteralPart token:) ("s)") ) } ) ] ) left_token: spids: [3614 3624] ) ) } ) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(eval_gettext)} { (DQ (EscapedLiteralPart token:) ("{REV}: Could not drop stash entry") ) } ) ] ) left_token: spids: [3633 3640] ) ) } ) ] op_id: Op_DPipe ) ] op_id: Op_DAmp ) (AndOr children: [ (SimpleCommand words: [ {(git)} {(rev-parse)} {(--verify)} {(--quiet)} {(DQ ($ VSub_Name "$ref_stash") ("@{0}"))} ] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[3662])] ) (C {(clear_stash)}) ] op_id: Op_DPipe ) ] spids: [3581] ) spids: [3576 3580] ) (FuncDef name: apply_to_branch body: (BraceGroup children: [ (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Number "$1"))}) (C {(die)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(gettext)} {(DQ ("No branch name specified"))})] ) left_token: spids: [3694 3700] ) ) } ) ] op_id: Op_DPipe ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:branch) op: Equal rhs: {($ VSub_Number "$1")} spids: [3704] ) ] spids: [3704] ) (C {(shift)} {(1)}) (C {(set)} {(--)} {(--index)} {(DQ ($ VSub_At "$@"))}) (C {(assert_stash_like)} {(DQ ($ VSub_At "$@"))}) (AndOr children: [ (C {(git)} {(checkout)} {(-b)} {($ VSub_Name "$branch")} {($ VSub_Name "$REV") (Lit_Other "^")} ) (AndOr children: [ (C {(apply_stash)} {(DQ ($ VSub_At "$@"))}) (BraceGroup children: [ (AndOr children: [ (C {(test)} {(-z)} {(DQ ($ VSub_Name "$IS_STASH_REF"))}) (C {(drop_stash)} {(DQ ($ VSub_At "$@"))}) ] op_id: Op_DPipe ) ] spids: [3755] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [3678] ) spids: [3673 3677] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PARSE_CACHE) op: Equal rhs: {(SQ <--not-parsed>)} spids: [3780] ) ] spids: [3780] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:seen_non_option) op:Equal rhs:{(SQ )} spids:[3788])] spids: [3788] ) (ForEach iter_name: opt do_arg_iter: True body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Name "$opt"))} arms: [ (case_arm pat_list:[{(-) (Lit_Other "*")}] spids:[380638083810-1]) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:seen_non_option) op: Equal rhs: {(t)} spids: [3816] ) ] spids: [3816] ) terminator: ) (ControlFlow token:) ] spids: [3813 3814 3822 -1] ) ] spids: [3797 3803 3825] ) ] spids: [3794 3827] ) spids: [-1 -1] ) (AndOr children: [ (C {(test)} {(-n)} {(DQ ($ VSub_Name "$seen_non_option"))}) (C {(set)} {(DQ (save))} {(DQ ($ VSub_At "$@"))}) ] op_id: Op_DPipe ) (Case to_match: {(DQ ($ VSub_Number "$1"))} arms: [ (case_arm pat_list: [{(list)}] action: [(C {(shift)}) (C {(list_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3862 3863 3876 -1] ) (case_arm pat_list: [{(show)}] action: [(C {(shift)}) (C {(show_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3878 3879 3892 -1] ) (case_arm pat_list: [{(save)}] action: [(C {(shift)}) (C {(save_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3894 3895 3908 -1] ) (case_arm pat_list: [{(apply)}] action: [(C {(shift)}) (C {(apply_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3910 3911 3924 -1] ) (case_arm pat_list: [{(clear)}] action: [(C {(shift)}) (C {(clear_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3926 3927 3940 -1] ) (case_arm pat_list: [{(create)}] action: [ (C {(shift)}) (AndOr children: [ (C {(create_stash)} {(DQ ($ VSub_Star "$*"))}) (C {(echo)} {(DQ ($ VSub_Name "$w_commit"))}) ] op_id: Op_DAmp ) ] spids: [3942 3943 3964 -1] ) (case_arm pat_list: [{(store)}] action: [(C {(shift)}) (C {(store_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3966 3967 3980 -1] ) (case_arm pat_list: [{(drop)}] action: [(C {(shift)}) (C {(drop_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3982 3983 3996 -1] ) (case_arm pat_list: [{(pop)}] action: [(C {(shift)}) (C {(pop_stash)} {(DQ ($ VSub_At "$@"))})] spids: [3998 3999 4012 -1] ) (case_arm pat_list: [{(branch)}] action: [(C {(shift)}) (C {(apply_to_branch)} {(DQ ($ VSub_At "$@"))})] spids: [4014 4015 4028 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (Case to_match: {($ VSub_Pound "$#")} arms: [ (case_arm pat_list: [{(0)}] action: [ (AndOr children: [ (C {(save_stash)}) (C {(say)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(gettext)} { (DQ ("(To restore them type ") (EscapedLiteralPart token: ) ("git stash apply") (EscapedLiteralPart token:) (")") ) } ) ] ) left_token: spids: [4053 4063] ) ) } ) ] op_id: Op_DAmp ) ] spids: [4041 4042 4067 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [(C {(usage)})] spids: [4070 4071 -1 4077] ) ] spids: [4034 4038 4077] ) ] spids: [4030 4031 4080 -1] ) ] spids: [3854 3860 4082] ) ] )