(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"Test git stash">)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <"stash some dirty working directory">)} { (SQ <"\n"> <"\techo 1 > file &&\n"> <"\tgit add file &&\n"> <"\techo unrelated >other-file &&\n"> <"\tgit add other-file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m initial &&\n"> <"\techo 2 > file &&\n"> <"\tgit add file &&\n"> <"\techo 3 > file &&\n"> <"\ttest_tick &&\n"> <"\tgit stash &&\n"> <"\tgit diff-files --quiet &&\n"> <"\tgit diff-index --cached --quiet HEAD\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[50]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("diff --git a/file b/file\n") ("index 0cfbf08..00750ed 100644\n") ("--- a/file\n") ("+++ b/file\n") ("@@ -1 +1 @@\n") ("-2\n") ("+3\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [54] ) ] ) (C {(test_expect_success)} {(SQ <"parents of stash">)} { (SQ <"\n"> <"\ttest $(git rev-parse stash^) = $(git rev-parse HEAD) &&\n"> <"\tgit diff stash^2..stash > output &&\n"> <"\ttest_cmp output expect\n"> ) } ) (C {(test_expect_success)} {(SQ <"applying bogus stash does nothing">)} { (SQ <"\n"> <"\ttest_must_fail git stash apply stash@{1} &&\n"> <"\techo 1 >expect &&\n"> <"\ttest_cmp expect file\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply does not need clean working directory">)} { (SQ <"\n"> <"\techo 4 >other-file &&\n"> <"\tgit stash apply &&\n"> <"\techo 3 >expect &&\n"> <"\ttest_cmp expect file\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply does not clobber working directory changes">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\techo 4 >file &&\n"> <"\ttest_must_fail git stash apply &&\n"> <"\techo 4 >expect &&\n"> <"\ttest_cmp expect file\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply stashed changes">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\techo 5 >other-file &&\n"> <"\tgit add other-file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m other-file &&\n"> <"\tgit stash apply &&\n"> <"\ttest 3 = $(cat file) &&\n"> <"\ttest 1 = $(git show :file) &&\n"> <"\ttest 1 = $(git show HEAD:file)\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply stashed changes (including index)">)} { (SQ <"\n"> <"\tgit reset --hard HEAD^ &&\n"> <"\techo 6 > other-file &&\n"> <"\tgit add other-file &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m other-file &&\n"> <"\tgit stash apply --index &&\n"> <"\ttest 3 = $(cat file) &&\n"> <"\ttest 2 = $(git show :file) &&\n"> <"\ttest 1 = $(git show HEAD:file)\n"> ) } ) (C {(test_expect_success)} {(SQ <"unstashing in a subdirectory">)} { (SQ <"\n"> <"\tgit reset --hard HEAD &&\n"> <"\tmkdir subdir &&\n"> <"\t(\n"> <"\t\tcd subdir &&\n"> <"\t\tgit stash apply\n"> <"\t)\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash drop complains of extra options">)} {(SQ <"\n"> <"\ttest_must_fail git stash drop --foo\n">)} ) (C {(test_expect_success)} {(SQ <"drop top stash">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit stash list > stashlist1 &&\n"> <"\techo 7 > file &&\n"> <"\tgit stash &&\n"> <"\tgit stash drop &&\n"> <"\tgit stash list > stashlist2 &&\n"> <"\ttest_cmp stashlist1 stashlist2 &&\n"> <"\tgit stash apply &&\n"> <"\ttest 3 = $(cat file) &&\n"> <"\ttest 1 = $(git show :file) &&\n"> <"\ttest 1 = $(git show HEAD:file)\n"> ) } ) (C {(test_expect_success)} {(SQ <"drop middle stash">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\techo 8 > file &&\n"> <"\tgit stash &&\n"> <"\techo 9 > file &&\n"> <"\tgit stash &&\n"> <"\tgit stash drop stash@{1} &&\n"> <"\ttest 2 = $(git stash list | wc -l) &&\n"> <"\tgit stash apply &&\n"> <"\ttest 9 = $(cat file) &&\n"> <"\ttest 1 = $(git show :file) &&\n"> <"\ttest 1 = $(git show HEAD:file) &&\n"> <"\tgit reset --hard &&\n"> <"\tgit stash drop &&\n"> <"\tgit stash apply &&\n"> <"\ttest 3 = $(cat file) &&\n"> <"\ttest 1 = $(git show :file) &&\n"> <"\ttest 1 = $(git show HEAD:file)\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash pop">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit stash pop &&\n"> <"\ttest 3 = $(cat file) &&\n"> <"\ttest 1 = $(git show :file) &&\n"> <"\ttest 1 = $(git show HEAD:file) &&\n"> <"\ttest 0 = $(git stash list | wc -l)\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[263]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("diff --git a/file2 b/file2\n") ("new file mode 100644\n") ("index 0000000..1fe912c\n") ("--- /dev/null\n") ("+++ b/file2\n") ("@@ -0,0 +1 @@\n") ("+bar2\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [267] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect1)} spids:[281]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("diff --git a/file b/file\n") ("index 257cc56..5716ca5 100644\n") ("--- a/file\n") ("+++ b/file\n") ("@@ -1 +1 @@\n") ("-foo\n") ("+bar\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [285] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect2)} spids:[299]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("diff --git a/file b/file\n") ("index 7601807..5716ca5 100644\n") ("--- a/file\n") ("+++ b/file\n") ("@@ -1 +1 @@\n") ("-baz\n") ("+bar\n") ("diff --git a/file2 b/file2\n") ("new file mode 100644\n") ("index 0000000..1fe912c\n") ("--- /dev/null\n") ("+++ b/file2\n") ("@@ -0,0 +1 @@\n") ("+bar2\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [303] ) ] ) (C {(test_expect_success)} {(SQ <"stash branch">)} { (SQ <"\n"> <"\techo foo > file &&\n"> <"\tgit commit file -m first &&\n"> <"\techo bar > file &&\n"> <"\techo bar2 > file2 &&\n"> <"\tgit add file2 &&\n"> <"\tgit stash &&\n"> <"\techo baz > file &&\n"> <"\tgit commit file -m second &&\n"> <"\tgit stash branch stashbranch &&\n"> <"\ttest refs/heads/stashbranch = $(git symbolic-ref HEAD) &&\n"> <"\ttest $(git rev-parse HEAD) = $(git rev-parse master^) &&\n"> <"\tgit diff --cached > output &&\n"> <"\ttest_cmp output expect &&\n"> <"\tgit diff > output &&\n"> <"\ttest_cmp output expect1 &&\n"> <"\tgit add file &&\n"> <"\tgit commit -m alternate\\ second &&\n"> <"\tgit diff master..stashbranch > output &&\n"> <"\ttest_cmp output expect2 &&\n"> <"\ttest 0 = $(git stash list | wc -l)\n"> ) } ) (C {(test_expect_success)} {(SQ <"apply -q is quiet">)} { (SQ <"\n"> <"\techo foo > file &&\n"> <"\tgit stash &&\n"> <"\tgit stash apply -q > output.out 2>&1 &&\n"> <"\ttest_must_be_empty output.out\n"> ) } ) (C {(test_expect_success)} {(SQ <"save -q is quiet">)} { (SQ <"\n"> <"\tgit stash save --quiet > output.out 2>&1 &&\n"> <"\ttest_must_be_empty output.out\n"> ) } ) (C {(test_expect_success)} {(SQ <"pop -q is quiet">)} { (SQ <"\n"> <"\tgit stash pop -q > output.out 2>&1 &&\n"> <"\ttest_must_be_empty output.out\n">) } ) (C {(test_expect_success)} {(SQ <"pop -q --index works and is quiet">)} { (SQ <"\n"> <"\techo foo > file &&\n"> <"\tgit add file &&\n"> <"\tgit stash save --quiet &&\n"> <"\tgit stash pop -q --index > output.out 2>&1 &&\n"> <"\ttest foo = \"$(git show :file)\" &&\n"> <"\ttest_must_be_empty output.out\n"> ) } ) (C {(test_expect_success)} {(SQ <"drop -q is quiet">)} { (SQ <"\n"> <"\tgit stash &&\n"> <"\tgit stash drop -q > output.out 2>&1 &&\n"> <"\ttest_must_be_empty output.out\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash -k">)} { (SQ <"\n"> <"\techo bar3 > file &&\n"> <"\techo bar4 > file2 &&\n"> <"\tgit add file2 &&\n"> <"\tgit stash -k &&\n"> <"\ttest bar,bar4 = $(cat file),$(cat file2)\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash --no-keep-index">)} { (SQ <"\n"> <"\techo bar33 > file &&\n"> <"\techo bar44 > file2 &&\n"> <"\tgit add file2 &&\n"> <"\tgit stash --no-keep-index &&\n"> <"\ttest bar,bar2 = $(cat file),$(cat file2)\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash --invalid-option">)} { (SQ <"\n"> <"\techo bar5 > file &&\n"> <"\techo bar6 > file2 &&\n"> <"\tgit add file2 &&\n"> <"\ttest_must_fail git stash --invalid-option &&\n"> <"\ttest_must_fail git stash save --invalid-option &&\n"> <"\ttest bar5,bar6 = $(cat file),$(cat file2) &&\n"> <"\tgit stash -- -message-starting-with-dash &&\n"> <"\ttest bar,bar2 = $(cat file),$(cat file2)\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash an added file">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\techo new >file3 &&\n"> <"\tgit add file3 &&\n"> <"\tgit stash save \"added file\" &&\n"> <"\t! test -r file3 &&\n"> <"\tgit stash apply &&\n"> <"\ttest new = \"$(cat file3)\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash rm then recreate">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit rm file &&\n"> <"\techo bar7 >file &&\n"> <"\tgit stash save \"rm then recreate\" &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\tgit stash apply &&\n"> <"\ttest bar7 = \"$(cat file)\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash rm and ignore">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit rm file &&\n"> <"\techo file >.gitignore &&\n"> <"\tgit stash save \"rm and ignore\" &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\ttest file = \"$(cat .gitignore)\" &&\n"> <"\tgit stash apply &&\n"> <"\t! test -r file &&\n"> <"\ttest file = \"$(cat .gitignore)\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash rm and ignore (stage .gitignore)">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit rm file &&\n"> <"\techo file >.gitignore &&\n"> <"\tgit add .gitignore &&\n"> <"\tgit stash save \"rm and ignore (stage .gitignore)\" &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\t! test -r .gitignore &&\n"> <"\tgit stash apply &&\n"> <"\t! test -r file &&\n"> <"\ttest file = \"$(cat .gitignore)\"\n"> ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"stash file to symlink">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\trm file &&\n"> <"\tln -s file2 file &&\n"> <"\tgit stash save \"file to symlink\" &&\n"> <"\ttest -f file &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\tgit stash apply &&\n"> <"\tcase \"$(ls -l file)\" in *\" file -> file2\") :;; *) false;; esac\n"> ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"stash file to symlink (stage rm)">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit rm file &&\n"> <"\tln -s file2 file &&\n"> <"\tgit stash save \"file to symlink (stage rm)\" &&\n"> <"\ttest -f file &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\tgit stash apply &&\n"> <"\tcase \"$(ls -l file)\" in *\" file -> file2\") :;; *) false;; esac\n"> ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"stash file to symlink (full stage)">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\trm file &&\n"> <"\tln -s file2 file &&\n"> <"\tgit add file &&\n"> <"\tgit stash save \"file to symlink (full stage)\" &&\n"> <"\ttest -f file &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\tgit stash apply &&\n"> <"\tcase \"$(ls -l file)\" in *\" file -> file2\") :;; *) false;; esac\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash symlink to file">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\ttest_ln_s_add file filelink &&\n"> <"\tgit commit -m \"Add symlink\" &&\n"> <"\trm filelink &&\n"> <"\tcp file filelink &&\n"> <"\tgit stash save \"symlink to file\"\n"> ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"this must have re-created the symlink">)} { (SQ <"\n"> <"\ttest -h filelink &&\n"> <"\tcase \"$(ls -l filelink)\" in *\" filelink -> file\") :;; *) false;; esac\n"> ) } ) (C {(test_expect_success)} {(SQ <"unstash must re-create the file">)} { (SQ <"\n"> <"\tgit stash apply &&\n"> <"\t! test -h filelink &&\n"> <"\ttest bar = \"$(cat file)\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash symlink to file (stage rm)">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit rm filelink &&\n"> <"\tcp file filelink &&\n"> <"\tgit stash save \"symlink to file (stage rm)\"\n"> ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"this must have re-created the symlink">)} { (SQ <"\n"> <"\ttest -h filelink &&\n"> <"\tcase \"$(ls -l filelink)\" in *\" filelink -> file\") :;; *) false;; esac\n"> ) } ) (C {(test_expect_success)} {(SQ <"unstash must re-create the file">)} { (SQ <"\n"> <"\tgit stash apply &&\n"> <"\t! test -h filelink &&\n"> <"\ttest bar = \"$(cat file)\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash symlink to file (full stage)">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\trm filelink &&\n"> <"\tcp file filelink &&\n"> <"\tgit add filelink &&\n"> <"\tgit stash save \"symlink to file (full stage)\"\n"> ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"this must have re-created the symlink">)} { (SQ <"\n"> <"\ttest -h filelink &&\n"> <"\tcase \"$(ls -l filelink)\" in *\" filelink -> file\") :;; *) false;; esac\n"> ) } ) (C {(test_expect_success)} {(SQ <"unstash must re-create the file">)} { (SQ <"\n"> <"\tgit stash apply &&\n"> <"\t! test -h filelink &&\n"> <"\ttest bar = \"$(cat file)\"\n"> ) } ) (C {(test_expect_failure)} {(SQ <"stash directory to file">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tmkdir dir &&\n"> <"\techo foo >dir/file &&\n"> <"\tgit add dir/file &&\n"> <"\tgit commit -m \"Add file in dir\" &&\n"> <"\trm -fr dir &&\n"> <"\techo bar >dir &&\n"> <"\tgit stash save \"directory to file\" &&\n"> <"\ttest -d dir &&\n"> <"\ttest foo = \"$(cat dir/file)\" &&\n"> <"\ttest_must_fail git stash apply &&\n"> <"\ttest bar = \"$(cat dir)\" &&\n"> <"\tgit reset --soft HEAD^\n"> ) } ) (C {(test_expect_failure)} {(SQ <"stash file to directory">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\trm file &&\n"> <"\tmkdir file &&\n"> <"\techo foo >file/file &&\n"> <"\tgit stash save \"file to directory\" &&\n"> <"\ttest -f file &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\tgit stash apply &&\n"> <"\ttest -f file/file &&\n"> <"\ttest foo = \"$(cat file/file)\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash branch - no stashes on stack, stash-like argument">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo >> file &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\tgit stash branch stash-branch ${STASH_ID} &&\n"> < "\ttest_when_finished \"git reset --hard HEAD && git checkout master && git branch -D stash-branch\" &&\n" > <"\ttest $(git ls-files --modified | wc -l) -eq 1\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash branch - stashes on stack, stash-like argument">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo >> file &&\n"> <"\tgit stash &&\n"> <"\ttest_when_finished \"git stash drop\" &&\n"> <"\techo bar >> file &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\tgit stash branch stash-branch ${STASH_ID} &&\n"> < "\ttest_when_finished \"git reset --hard HEAD && git checkout master && git branch -D stash-branch\" &&\n" > <"\ttest $(git ls-files --modified | wc -l) -eq 1\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash show format defaults to --stat">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo >> file &&\n"> <"\tgit stash &&\n"> <"\ttest_when_finished \"git stash drop\" &&\n"> <"\techo bar >> file &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\tcat >expected <<-EOF &&\n"> <"\t file | 1 +\n"> <"\t 1 file changed, 1 insertion(+)\n"> <"\tEOF\n"> <"\tgit stash show ${STASH_ID} >actual &&\n"> <"\ttest_i18ncmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash show - stashes on stack, stash-like argument">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo >> file &&\n"> <"\tgit stash &&\n"> <"\ttest_when_finished \"git stash drop\" &&\n"> <"\techo bar >> file &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\techo \"1\t0\tfile\" >expected &&\n"> <"\tgit stash show --numstat ${STASH_ID} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash show -p - stashes on stack, stash-like argument">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo >> file &&\n"> <"\tgit stash &&\n"> <"\ttest_when_finished \"git stash drop\" &&\n"> <"\techo bar >> file &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\tcat >expected <<-EOF &&\n"> <"\tdiff --git a/file b/file\n"> <"\tindex 7601807..935fbd3 100644\n"> <"\t--- a/file\n"> <"\t+++ b/file\n"> <"\t@@ -1 +1,2 @@\n"> <"\t baz\n"> <"\t+bar\n"> <"\tEOF\n"> <"\tgit stash show -p ${STASH_ID} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash show - no stashes on stack, stash-like argument">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo >> file &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\techo \"1\t0\tfile\" >expected &&\n"> <"\tgit stash show --numstat ${STASH_ID} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash show -p - no stashes on stack, stash-like argument">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo >> file &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\tcat >expected <<-EOF &&\n"> <"\tdiff --git a/file b/file\n"> <"\tindex 7601807..71b52c4 100644\n"> <"\t--- a/file\n"> <"\t+++ b/file\n"> <"\t@@ -1 +1,2 @@\n"> <"\t baz\n"> <"\t+foo\n"> <"\tEOF\n"> <"\tgit stash show -p ${STASH_ID} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash drop - fail early if specified stash is not a stash reference">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD && git stash clear\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo > file &&\n"> <"\tgit stash &&\n"> <"\techo bar > file &&\n"> <"\tgit stash &&\n"> <"\ttest_must_fail git stash drop $(git rev-parse stash@{0}) &&\n"> <"\tgit stash pop &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\tgit reset --hard HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash pop - fail early if specified stash is not a stash reference">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_when_finished \"git reset --hard HEAD && git stash clear\" &&\n"> <"\tgit reset --hard &&\n"> <"\techo foo > file &&\n"> <"\tgit stash &&\n"> <"\techo bar > file &&\n"> <"\tgit stash &&\n"> <"\ttest_must_fail git stash pop $(git rev-parse stash@{0}) &&\n"> <"\tgit stash pop &&\n"> <"\ttest bar = \"$(cat file)\" &&\n"> <"\tgit reset --hard HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref with non-existent reflog">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\techo bar5 > file &&\n"> <"\techo bar6 > file2 &&\n"> <"\tgit add file2 &&\n"> <"\tgit stash &&\n"> <"\ttest_must_fail git rev-parse --quiet --verify does-not-exist &&\n"> <"\ttest_must_fail git stash drop does-not-exist &&\n"> <"\ttest_must_fail git stash drop does-not-exist@{0} &&\n"> <"\ttest_must_fail git stash pop does-not-exist &&\n"> <"\ttest_must_fail git stash pop does-not-exist@{0} &&\n"> <"\ttest_must_fail git stash apply does-not-exist &&\n"> <"\ttest_must_fail git stash apply does-not-exist@{0} &&\n"> <"\ttest_must_fail git stash show does-not-exist &&\n"> <"\ttest_must_fail git stash show does-not-exist@{0} &&\n"> <"\ttest_must_fail git stash branch tmp does-not-exist &&\n"> <"\ttest_must_fail git stash branch tmp does-not-exist@{0} &&\n"> <"\tgit stash drop\n"> ) } ) (C {(test_expect_success)} {(SQ <"invalid ref of the form stash@{n}, n >= N">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\ttest_must_fail git stash drop stash@{0} &&\n"> <"\techo bar5 > file &&\n"> <"\techo bar6 > file2 &&\n"> <"\tgit add file2 &&\n"> <"\tgit stash &&\n"> <"\ttest_must_fail git stash drop stash@{1} &&\n"> <"\ttest_must_fail git stash pop stash@{1} &&\n"> <"\ttest_must_fail git stash apply stash@{1} &&\n"> <"\ttest_must_fail git stash show stash@{1} &&\n"> <"\ttest_must_fail git stash branch tmp stash@{1} &&\n"> <"\tgit stash drop\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash branch should not drop the stash if the branch exists">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\techo foo >file &&\n"> <"\tgit add file &&\n"> <"\tgit commit -m initial &&\n"> <"\techo bar >file &&\n"> <"\tgit stash &&\n"> <"\ttest_must_fail git stash branch master stash@{0} &&\n"> <"\tgit rev-parse stash@{0} --\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash apply shows status same as git status (relative to current directory)">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\techo 1 >subdir/subfile1 &&\n"> <"\techo 2 >subdir/subfile2 &&\n"> <"\tgit add subdir/subfile1 &&\n"> <"\tgit commit -m subdir &&\n"> <"\t(\n"> <"\t\tcd subdir &&\n"> <"\t\techo x >subfile1 &&\n"> <"\t\techo x >../file &&\n"> <"\t\tgit status >../expect &&\n"> <"\t\tgit stash &&\n"> <"\t\tsane_unset GIT_MERGE_VERBOSITY &&\n"> <"\t\tgit stash apply\n"> <"\t) |\n"> <"\tsed -e 1,2d >actual && # drop \"Saved...\" and \"HEAD is now...\"\n"> <"\ttest_i18ncmp expect actual\n"> ) } ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[1115]) (HereDoc op_id: Redir_DLess fd: -1 body: { (DQ ("diff --git a/HEAD b/HEAD\n") ("new file mode 100644\n") ("index 0000000..fe0cbee\n") ("--- /dev/null\n") ("+++ b/HEAD\n") ("@@ -0,0 +1 @@\n") ("+file-not-a-ref\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1119] ) ] ) (C {(test_expect_success)} {(SQ <"stash where working directory contains \"HEAD\" file">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\tgit reset --hard &&\n"> <"\techo file-not-a-ref > HEAD &&\n"> <"\tgit add HEAD &&\n"> <"\ttest_tick &&\n"> <"\tgit stash &&\n"> <"\tgit diff-files --quiet &&\n"> <"\tgit diff-index --cached --quiet HEAD &&\n"> <"\ttest \"$(git rev-parse stash^)\" = \"$(git rev-parse HEAD)\" &&\n"> <"\tgit diff stash^..stash > output &&\n"> <"\ttest_cmp output expect\n"> ) } ) (C {(test_expect_success)} {(SQ <"store called with invalid commit">)} {(SQ <"\n"> <"\ttest_must_fail git stash store foo\n">)} ) (C {(test_expect_success)} {(SQ <"store updates stash ref and reflog">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\tgit reset --hard &&\n"> <"\techo quux >bazzy &&\n"> <"\tgit add bazzy &&\n"> <"\tSTASH_ID=$(git stash create) &&\n"> <"\tgit reset --hard &&\n"> <"\t! grep quux bazzy &&\n"> <"\tgit stash store -m quuxery $STASH_ID &&\n"> <"\ttest $(cat .git/refs/stash) = $STASH_ID &&\n"> <"\tgit reflog --format=%H stash| grep $STASH_ID &&\n"> <"\tgit stash pop &&\n"> <"\tgrep quux bazzy\n"> ) } ) (C {(test_expect_success)} {(SQ <"handle stash specification with spaces">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\techo pig >file &&\n"> <"\tgit stash &&\n"> <"\tstamp=$(git log -g --format=\"%cd\" -1 refs/stash) &&\n"> <"\ttest_tick &&\n"> <"\techo cow >file &&\n"> <"\tgit stash &&\n"> <"\tgit stash apply \"stash@{$stamp}\" &&\n"> <"\tgrep pig file\n"> ) } ) (C {(test_expect_success)} {(SQ <"setup stash with index and worktree changes">)} { (SQ <"\n"> <"\tgit stash clear &&\n"> <"\tgit reset --hard &&\n"> <"\techo index >file &&\n"> <"\tgit add file &&\n"> <"\techo working >file &&\n"> <"\tgit stash\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash list implies --first-parent -m">)} { (SQ <"\n"> <"\tcat >expect <<-EOF &&\n"> <"\tstash@{0}\n"> <"\n"> <"\tdiff --git a/file b/file\n"> <"\tindex 257cc56..d26b33d 100644\n"> <"\t--- a/file\n"> <"\t+++ b/file\n"> <"\t@@ -1 +1 @@\n"> <"\t-foo\n"> <"\t+working\n"> <"\tEOF\n"> <"\tgit stash list --format=%gd -p >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"stash list --cc shows combined diff">)} { (SQ <"\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tstash@{0}\n"> <"\n"> <"\tdiff --cc file\n"> <"\tindex 257cc56,9015a7a..d26b33d\n"> <"\t--- a/file\n"> <"\t+++ b/file\n"> <"\t@@@ -1,1 -1,1 +1,1 @@@\n"> <"\t- foo\n"> <"\t -index\n"> <"\t++working\n"> <"\tEOF\n"> <"\tgit stash list --format=%gd -p --cc >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_done)}) ] )