(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'Test git stash' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash some dirty working directory' span_id:27))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\techo 1 > file &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\techo unrelated >other-file &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit add other-file &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\techo 2 > file &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\techo 3 > file &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet &&\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tgit diff-index --cached --quiet HEAD\n' span_id:44)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:50) fd:-1 arg_word:{(expect)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:54)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 66
          stdin_parts: [
            ('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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'parents of stash' span_id:71))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse stash^) = $(git rev-parse HEAD) &&\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\tgit diff stash^2..stash > output &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp output expect\n' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'applying bogus stash does nothing' span_id:85))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash apply stash@{1} &&\n'
            span_id: 90
          ) (Token id:Id.Lit_Chars val:'\techo 1 >expect &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect file\n' span_id:92)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply does not need clean working directory' span_id:99))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\techo 4 >other-file &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\techo 3 >expect &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\ttest_cmp expect file\n' span_id:107)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'apply does not clobber working directory changes'
            span_id: 114
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\techo 4 >file &&\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash apply &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\techo 4 >expect &&\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect file\n' span_id:123)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply stashed changes' span_id:130))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\techo 5 >other-file &&\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\tgit add other-file &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m other-file &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\ttest 3 = $(cat file) &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show :file) &&\n' span_id:142) 
          (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show HEAD:file)\n' span_id:143)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply stashed changes (including index)' span_id:150))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\techo 6 > other-file &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\tgit add other-file &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m other-file &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgit stash apply --index &&\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\ttest 3 = $(cat file) &&\n' span_id:161) (Token id:Id.Lit_Chars val:'\ttest 2 = $(git show :file) &&\n' span_id:162) 
          (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show HEAD:file)\n' span_id:163)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'unstashing in a subdirectory' span_id:170))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tmkdir subdir &&\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:177) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\t\tgit stash apply\n' span_id:179) (Token id:Id.Lit_Chars val:'\t)\n' span_id:180)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash drop complains of extra options' span_id:187))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash drop --foo\n' span_id:192)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'drop top stash' span_id:199))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\tgit stash list > stashlist1 &&\n' span_id:205) 
          (Token id:Id.Lit_Chars val:'\techo 7 > file &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\tgit stash drop &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tgit stash list > stashlist2 &&\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp stashlist1 stashlist2 &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\ttest 3 = $(cat file) &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show :file) &&\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show HEAD:file)\n' span_id:214)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'drop middle stash' span_id:221))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:225) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\techo 8 > file &&\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\techo 9 > file &&\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\tgit stash drop stash@{1} &&\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 2 = $(git stash list | wc -l) &&\n'
            span_id: 232
          ) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:233) 
          (Token id:Id.Lit_Chars val:'\ttest 9 = $(cat file) &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show :file) &&\n' span_id:235) 
          (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show HEAD:file) &&\n' span_id:236) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:237) 
          (Token id:Id.Lit_Chars val:'\tgit stash drop &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'\ttest 3 = $(cat file) &&\n' span_id:240) (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show :file) &&\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show HEAD:file)\n' span_id:242)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash pop' span_id:249))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\tgit stash pop &&\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'\ttest 3 = $(cat file) &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show :file) &&\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\ttest 1 = $(git show HEAD:file) &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\ttest 0 = $(git stash list | wc -l)\n' span_id:259)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:265)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:269)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 281
          stdin_parts: [
            ('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')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:285)
          fd: -1
          arg_word: {(expect1)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:289)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 301
          stdin_parts: [
            ('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')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:305)
          fd: -1
          arg_word: {(expect2)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:309)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 328
          stdin_parts: [
            ('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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash branch' span_id:333))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:337) 
          (Token id:Id.Lit_Chars val:'\techo foo > file &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\tgit commit file -m first &&\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\techo bar > file &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\techo bar2 > file2 &&\n' span_id:341) 
          (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:343) 
          (Token id:Id.Lit_Chars val:'\techo baz > file &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\tgit commit file -m second &&\n' span_id:345) 
          (Token id:Id.Lit_Chars val:'\tgit stash branch stashbranch &&\n' span_id:346) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest refs/heads/stashbranch = $(git symbolic-ref HEAD) &&\n'
            span_id: 347
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git rev-parse HEAD) = $(git rev-parse master^) &&\n'
            span_id: 348
          ) (Token id:Id.Lit_Chars val:'\tgit diff --cached > output &&\n' span_id:349) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp output expect &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\tgit diff > output &&\n' span_id:351) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp output expect1 &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:353) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m alternate\\ second &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\tgit diff master..stashbranch > output &&\n' span_id:355) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp output expect2 &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\ttest 0 = $(git stash list | wc -l)\n' span_id:357)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply -q is quiet' span_id:364))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:368) 
          (Token id:Id.Lit_Chars val:'\techo foo > file &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:370) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash apply -q > output.out 2>&1 &&\n'
            span_id: 371
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output.out\n' span_id:372)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'save -q is quiet' span_id:379))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:383) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash save --quiet > output.out 2>&1 &&\n'
            span_id: 384
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output.out\n' span_id:385)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pop -q is quiet' span_id:392))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:396) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash pop -q > output.out 2>&1 &&\n'
            span_id: 397
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output.out\n' span_id:398)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pop -q --index works and is quiet' span_id:405))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:409) 
          (Token id:Id.Lit_Chars val:'\techo foo > file &&\n' span_id:410) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:411) 
          (Token id:Id.Lit_Chars val:'\tgit stash save --quiet &&\n' span_id:412) (Token id:Id.Lit_Chars val:'\tgit stash pop -q --index > output.out 2>&1 &&\n' span_id:413) 
          (Token id:Id.Lit_Chars val:'\ttest foo = "$(git show :file)" &&\n' span_id:414) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output.out\n' span_id:415)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'drop -q is quiet' span_id:422))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:426) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\tgit stash drop -q > output.out 2>&1 &&\n' span_id:428) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty output.out\n' span_id:429)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash -k' span_id:436))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:440) 
          (Token id:Id.Lit_Chars val:'\techo bar3 > file &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\techo bar4 > file2 &&\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\tgit stash -k &&\n' span_id:444) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest bar,bar4 = $(cat file),$(cat file2)\n'
            span_id: 445
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash --no-keep-index' span_id:452))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:456) 
          (Token id:Id.Lit_Chars val:'\techo bar33 > file &&\n' span_id:457) (Token id:Id.Lit_Chars val:'\techo bar44 > file2 &&\n' span_id:458) 
          (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:459) (Token id:Id.Lit_Chars val:'\tgit stash --no-keep-index &&\n' span_id:460) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest bar,bar2 = $(cat file),$(cat file2)\n'
            span_id: 461
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash --invalid-option' span_id:468))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:472) 
          (Token id:Id.Lit_Chars val:'\techo bar5 > file &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\techo bar6 > file2 &&\n' span_id:474) 
          (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash --invalid-option &&\n' span_id:476) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash save --invalid-option &&\n'
            span_id: 477
          ) (Token id:Id.Lit_Chars val:'\ttest bar5,bar6 = $(cat file),$(cat file2) &&\n' span_id:478) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash -- -message-starting-with-dash &&\n'
            span_id: 479
          ) (Token id:Id.Lit_Chars val:'\ttest bar,bar2 = $(cat file),$(cat file2)\n' span_id:480)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash an added file' span_id:487))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:491) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\techo new >file3 &&\n' span_id:493) 
          (Token id:Id.Lit_Chars val:'\tgit add file3 &&\n' span_id:494) (Token id:Id.Lit_Chars val:'\tgit stash save "added file" &&\n' span_id:495) 
          (Token id:Id.Lit_Chars val:'\t! test -r file3 &&\n' span_id:496) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:497) 
          (Token id:Id.Lit_Chars val:'\ttest new = "$(cat file3)"\n' span_id:498)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash rm then recreate' span_id:505))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:509) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:510) (Token id:Id.Lit_Chars val:'\tgit rm file &&\n' span_id:511) 
          (Token id:Id.Lit_Chars val:'\techo bar7 >file &&\n' span_id:512) (Token id:Id.Lit_Chars val:'\tgit stash save "rm then recreate" &&\n' span_id:513) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:514) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:515) 
          (Token id:Id.Lit_Chars val:'\ttest bar7 = "$(cat file)"\n' span_id:516)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash rm and ignore' span_id:523))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:527) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:528) (Token id:Id.Lit_Chars val:'\tgit rm file &&\n' span_id:529) 
          (Token id:Id.Lit_Chars val:'\techo file >.gitignore &&\n' span_id:530) (Token id:Id.Lit_Chars val:'\tgit stash save "rm and ignore" &&\n' span_id:531) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:532) (Token id:Id.Lit_Chars val:'\ttest file = "$(cat .gitignore)" &&\n' span_id:533) 
          (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\t! test -r file &&\n' span_id:535) 
          (Token id:Id.Lit_Chars val:'\ttest file = "$(cat .gitignore)"\n' span_id:536)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash rm and ignore (stage .gitignore)' span_id:543))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:547) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:548) (Token id:Id.Lit_Chars val:'\tgit rm file &&\n' span_id:549) 
          (Token id:Id.Lit_Chars val:'\techo file >.gitignore &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\tgit add .gitignore &&\n' span_id:551) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash save "rm and ignore (stage .gitignore)" &&\n'
            span_id: 552
          ) (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:553) 
          (Token id:Id.Lit_Chars val:'\t! test -r .gitignore &&\n' span_id:554) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:555) 
          (Token id:Id.Lit_Chars val:'\t! test -r file &&\n' span_id:556) (Token id:Id.Lit_Chars val:'\ttest file = "$(cat .gitignore)"\n' span_id:557)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash file to symlink' span_id:566))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:570) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:571) (Token id:Id.Lit_Chars val:'\trm file &&\n' span_id:572) 
          (Token id:Id.Lit_Chars val:'\tln -s file2 file &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\tgit stash save "file to symlink" &&\n' span_id:574) 
          (Token id:Id.Lit_Chars val:'\ttest -f file &&\n' span_id:575) (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:576) 
          (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:577) 
          (Token
            id: Id.Lit_Chars
            val: '\tcase "$(ls -l file)" in *" file -> file2") :;; *) false;; esac\n'
            span_id: 578
          )
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash file to symlink (stage rm)' span_id:587))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:591) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:592) (Token id:Id.Lit_Chars val:'\tgit rm file &&\n' span_id:593) 
          (Token id:Id.Lit_Chars val:'\tln -s file2 file &&\n' span_id:594) (Token id:Id.Lit_Chars val:'\tgit stash save "file to symlink (stage rm)" &&\n' span_id:595) 
          (Token id:Id.Lit_Chars val:'\ttest -f file &&\n' span_id:596) (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:597) 
          (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:598) 
          (Token
            id: Id.Lit_Chars
            val: '\tcase "$(ls -l file)" in *" file -> file2") :;; *) false;; esac\n'
            span_id: 599
          )
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash file to symlink (full stage)' span_id:608))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:612) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:613) (Token id:Id.Lit_Chars val:'\trm file &&\n' span_id:614) 
          (Token id:Id.Lit_Chars val:'\tln -s file2 file &&\n' span_id:615) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:616) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash save "file to symlink (full stage)" &&\n'
            span_id: 617
          ) (Token id:Id.Lit_Chars val:'\ttest -f file &&\n' span_id:618) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:619) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:620) 
          (Token
            id: Id.Lit_Chars
            val: '\tcase "$(ls -l file)" in *" file -> file2") :;; *) false;; esac\n'
            span_id: 621
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stash symlink to file' span_id:632))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:636) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:637) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add file filelink &&\n' span_id:638) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "Add symlink" &&\n' span_id:639) (Token id:Id.Lit_Chars val:'\trm filelink &&\n' span_id:640) 
          (Token id:Id.Lit_Chars val:'\tcp file filelink &&\n' span_id:641) (Token id:Id.Lit_Chars val:'\tgit stash save "symlink to file"\n' span_id:642)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'this must have re-created the symlink' span_id:651))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:655) 
          (Token id:Id.Lit_Chars val:'\ttest -h filelink &&\n' span_id:656) 
          (Token
            id: Id.Lit_Chars
            val: '\tcase "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac\n'
            span_id: 657
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'unstash must re-create the file' span_id:664))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:668) 
          (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:669) (Token id:Id.Lit_Chars val:'\t! test -h filelink &&\n' span_id:670) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)"\n' span_id:671)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash symlink to file (stage rm)' span_id:678))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:682) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:683) (Token id:Id.Lit_Chars val:'\tgit rm filelink &&\n' span_id:684) 
          (Token id:Id.Lit_Chars val:'\tcp file filelink &&\n' span_id:685) (Token id:Id.Lit_Chars val:'\tgit stash save "symlink to file (stage rm)"\n' span_id:686)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'this must have re-created the symlink' span_id:695))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:699) 
          (Token id:Id.Lit_Chars val:'\ttest -h filelink &&\n' span_id:700) 
          (Token
            id: Id.Lit_Chars
            val: '\tcase "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac\n'
            span_id: 701
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'unstash must re-create the file' span_id:708))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:712) 
          (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:713) (Token id:Id.Lit_Chars val:'\t! test -h filelink &&\n' span_id:714) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)"\n' span_id:715)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash symlink to file (full stage)' span_id:722))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:726) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:727) (Token id:Id.Lit_Chars val:'\trm filelink &&\n' span_id:728) 
          (Token id:Id.Lit_Chars val:'\tcp file filelink &&\n' span_id:729) (Token id:Id.Lit_Chars val:'\tgit add filelink &&\n' span_id:730) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash save "symlink to file (full stage)"\n'
            span_id: 731
          )
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'this must have re-created the symlink' span_id:740))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:744) 
          (Token id:Id.Lit_Chars val:'\ttest -h filelink &&\n' span_id:745) 
          (Token
            id: Id.Lit_Chars
            val: '\tcase "$(ls -l filelink)" in *" filelink -> file") :;; *) false;; esac\n'
            span_id: 746
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'unstash must re-create the file' span_id:753))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:757) 
          (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:758) (Token id:Id.Lit_Chars val:'\t! test -h filelink &&\n' span_id:759) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)"\n' span_id:760)
        )
      }
    )
    (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'stash directory to file' span_id:767))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:771) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:772) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:773) 
          (Token id:Id.Lit_Chars val:'\techo foo >dir/file &&\n' span_id:774) (Token id:Id.Lit_Chars val:'\tgit add dir/file &&\n' span_id:775) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "Add file in dir" &&\n' span_id:776) (Token id:Id.Lit_Chars val:'\trm -fr dir &&\n' span_id:777) 
          (Token id:Id.Lit_Chars val:'\techo bar >dir &&\n' span_id:778) (Token id:Id.Lit_Chars val:'\tgit stash save "directory to file" &&\n' span_id:779) 
          (Token id:Id.Lit_Chars val:'\ttest -d dir &&\n' span_id:780) (Token id:Id.Lit_Chars val:'\ttest foo = "$(cat dir/file)" &&\n' span_id:781) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash apply &&\n' span_id:782) (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat dir)" &&\n' span_id:783) 
          (Token id:Id.Lit_Chars val:'\tgit reset --soft HEAD^\n' span_id:784)
        )
      }
    )
    (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'stash file to directory' span_id:791))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:795) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:796) (Token id:Id.Lit_Chars val:'\trm file &&\n' span_id:797) 
          (Token id:Id.Lit_Chars val:'\tmkdir file &&\n' span_id:798) (Token id:Id.Lit_Chars val:'\techo foo >file/file &&\n' span_id:799) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash save "file to directory" &&\n'
            span_id: 800
          ) (Token id:Id.Lit_Chars val:'\ttest -f file &&\n' span_id:801) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:802) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:803) 
          (Token id:Id.Lit_Chars val:'\ttest -f file/file &&\n' span_id:804) (Token id:Id.Lit_Chars val:'\ttest foo = "$(cat file/file)"\n' span_id:805)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash branch - no stashes on stack, stash-like argument'
            span_id: 812
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:816) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:817) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git reset --hard HEAD" &&\n' span_id:818) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:819) (Token id:Id.Lit_Chars val:'\techo foo >> file &&\n' span_id:820) 
          (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:821) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:822) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash branch stash-branch ${STASH_ID} &&\n'
            span_id: 823
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_when_finished "git reset --hard HEAD && git checkout master && git branch -D stash-branch" &&\n'
            span_id: 824
          ) (Token id:Id.Lit_Chars val:'\ttest $(git ls-files --modified | wc -l) -eq 1\n' span_id:825)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash branch - stashes on stack, stash-like argument'
            span_id: 832
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:836) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:837) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git reset --hard HEAD" &&\n' span_id:838) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:839) (Token id:Id.Lit_Chars val:'\techo foo >> file &&\n' span_id:840) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:841) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git stash drop" &&\n' span_id:842) 
          (Token id:Id.Lit_Chars val:'\techo bar >> file &&\n' span_id:843) (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:844) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:845) (Token id:Id.Lit_Chars val:'\tgit stash branch stash-branch ${STASH_ID} &&\n' span_id:846) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_when_finished "git reset --hard HEAD && git checkout master && git branch -D stash-branch" &&\n'
            span_id: 847
          ) (Token id:Id.Lit_Chars val:'\ttest $(git ls-files --modified | wc -l) -eq 1\n' span_id:848)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash show format defaults to --stat' span_id:855))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:859) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:860) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git reset --hard HEAD" &&\n' span_id:861) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:862) (Token id:Id.Lit_Chars val:'\techo foo >> file &&\n' span_id:863) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:864) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git stash drop" &&\n' span_id:865) 
          (Token id:Id.Lit_Chars val:'\techo bar >> file &&\n' span_id:866) (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:867) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:868) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:869) 
          (Token id:Id.Lit_Chars val:'\t file | 1 +\n' span_id:870) (Token id:Id.Lit_Chars val:'\t 1 file changed, 1 insertion(+)\n' span_id:871) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:872) (Token id:Id.Lit_Chars val:'\tgit stash show ${STASH_ID} >actual &&\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:874)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash show - stashes on stack, stash-like argument'
            span_id: 881
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:885) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:886) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git reset --hard HEAD" &&\n' span_id:887) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:888) (Token id:Id.Lit_Chars val:'\techo foo >> file &&\n' span_id:889) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:890) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git stash drop" &&\n' span_id:891) 
          (Token id:Id.Lit_Chars val:'\techo bar >> file &&\n' span_id:892) (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:893) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:894) (Token id:Id.Lit_Chars val:'\techo "1\t0\tfile" >expected &&\n' span_id:895) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash show --numstat ${STASH_ID} >actual &&\n'
            span_id: 896
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:897)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash show -p - stashes on stack, stash-like argument'
            span_id: 904
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:908) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:909) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git reset --hard HEAD" &&\n' span_id:910) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:911) (Token id:Id.Lit_Chars val:'\techo foo >> file &&\n' span_id:912) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:913) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git stash drop" &&\n' span_id:914) 
          (Token id:Id.Lit_Chars val:'\techo bar >> file &&\n' span_id:915) (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:916) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:917) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:918) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/file b/file\n' span_id:919) (Token id:Id.Lit_Chars val:'\tindex 7601807..935fbd3 100644\n' span_id:920) 
          (Token id:Id.Lit_Chars val:'\t--- a/file\n' span_id:921) (Token id:Id.Lit_Chars val:'\t+++ b/file\n' span_id:922) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +1,2 @@\n' span_id:923) (Token id:Id.Lit_Chars val:'\t baz\n' span_id:924) (Token id:Id.Lit_Chars val:'\t+bar\n' span_id:925) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:926) (Token id:Id.Lit_Chars val:'\tgit stash show -p ${STASH_ID} >actual &&\n' span_id:927) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:928)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash show - no stashes on stack, stash-like argument'
            span_id: 935
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:939) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:940) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git reset --hard HEAD" &&\n' span_id:941) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:942) (Token id:Id.Lit_Chars val:'\techo foo >> file &&\n' span_id:943) 
          (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:944) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:945) 
          (Token id:Id.Lit_Chars val:'\techo "1\t0\tfile" >expected &&\n' span_id:946) (Token id:Id.Lit_Chars val:'\tgit stash show --numstat ${STASH_ID} >actual &&\n' span_id:947) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:948)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash show -p - no stashes on stack, stash-like argument'
            span_id: 955
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:959) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:960) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git reset --hard HEAD" &&\n' span_id:961) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:962) (Token id:Id.Lit_Chars val:'\techo foo >> file &&\n' span_id:963) 
          (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:964) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:965) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:966) (Token id:Id.Lit_Chars val:'\tdiff --git a/file b/file\n' span_id:967) 
          (Token id:Id.Lit_Chars val:'\tindex 7601807..71b52c4 100644\n' span_id:968) (Token id:Id.Lit_Chars val:'\t--- a/file\n' span_id:969) 
          (Token id:Id.Lit_Chars val:'\t+++ b/file\n' span_id:970) (Token id:Id.Lit_Chars val:'\t@@ -1 +1,2 @@\n' span_id:971) 
          (Token id:Id.Lit_Chars val:'\t baz\n' span_id:972) (Token id:Id.Lit_Chars val:'\t+foo\n' span_id:973) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:974) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash show -p ${STASH_ID} >actual &&\n'
            span_id: 975
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:976)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash drop - fail early if specified stash is not a stash reference'
            span_id: 983
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:987) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:988) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git reset --hard HEAD && git stash clear" &&\n'
            span_id: 989
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:990) 
          (Token id:Id.Lit_Chars val:'\techo foo > file &&\n' span_id:991) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:992) 
          (Token id:Id.Lit_Chars val:'\techo bar > file &&\n' span_id:993) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:994) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash drop $(git rev-parse stash@{0}) &&\n'
            span_id: 995
          ) (Token id:Id.Lit_Chars val:'\tgit stash pop &&\n' span_id:996) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:997) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD\n' span_id:998)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash pop - fail early if specified stash is not a stash reference'
            span_id: 1005
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1009) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1010) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git reset --hard HEAD && git stash clear" &&\n'
            span_id: 1011
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1012) 
          (Token id:Id.Lit_Chars val:'\techo foo > file &&\n' span_id:1013) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1014) 
          (Token id:Id.Lit_Chars val:'\techo bar > file &&\n' span_id:1015) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1016) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash pop $(git rev-parse stash@{0}) &&\n'
            span_id: 1017
          ) (Token id:Id.Lit_Chars val:'\tgit stash pop &&\n' span_id:1018) 
          (Token id:Id.Lit_Chars val:'\ttest bar = "$(cat file)" &&\n' span_id:1019) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD\n' span_id:1020)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'ref with non-existent reflog' span_id:1027))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1031) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1032) (Token id:Id.Lit_Chars val:'\techo bar5 > file &&\n' span_id:1033) 
          (Token id:Id.Lit_Chars val:'\techo bar6 > file2 &&\n' span_id:1034) (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:1035) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1036) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --quiet --verify does-not-exist &&\n'
            span_id: 1037
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash drop does-not-exist &&\n' span_id:1038) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash drop does-not-exist@{0} &&\n'
            span_id: 1039
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash pop does-not-exist &&\n' span_id:1040) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash pop does-not-exist@{0} &&\n'
            span_id: 1041
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash apply does-not-exist &&\n' span_id:1042) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash apply does-not-exist@{0} &&\n'
            span_id: 1043
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash show does-not-exist &&\n' span_id:1044) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash show does-not-exist@{0} &&\n'
            span_id: 1045
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash branch tmp does-not-exist &&\n' span_id:1046) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash branch tmp does-not-exist@{0} &&\n'
            span_id: 1047
          ) (Token id:Id.Lit_Chars val:'\tgit stash drop\n' span_id:1048)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'invalid ref of the form stash@{n}, n >= N' span_id:1055))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1059) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1060) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash drop stash@{0} &&\n' span_id:1061) 
          (Token id:Id.Lit_Chars val:'\techo bar5 > file &&\n' span_id:1062) (Token id:Id.Lit_Chars val:'\techo bar6 > file2 &&\n' span_id:1063) 
          (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:1064) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1065) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash drop stash@{1} &&\n'
            span_id: 1066
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash pop stash@{1} &&\n' span_id:1067) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash apply stash@{1} &&\n'
            span_id: 1068
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash show stash@{1} &&\n' span_id:1069) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash branch tmp stash@{1} &&\n'
            span_id: 1070
          ) (Token id:Id.Lit_Chars val:'\tgit stash drop\n' span_id:1071)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash branch should not drop the stash if the branch exists'
            span_id: 1078
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1082) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1083) (Token id:Id.Lit_Chars val:'\techo foo >file &&\n' span_id:1084) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:1085) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:1086) 
          (Token id:Id.Lit_Chars val:'\techo bar >file &&\n' span_id:1087) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1088) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash branch master stash@{0} &&\n'
            span_id: 1089
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse stash@{0} --\n' span_id:1090)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash apply shows status same as git status (relative to current directory)'
            span_id: 1097
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1101) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1102) (Token id:Id.Lit_Chars val:'\techo 1 >subdir/subfile1 &&\n' span_id:1103) 
          (Token id:Id.Lit_Chars val:'\techo 2 >subdir/subfile2 &&\n' span_id:1104) (Token id:Id.Lit_Chars val:'\tgit add subdir/subfile1 &&\n' span_id:1105) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m subdir &&\n' span_id:1106) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1107) 
          (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:1108) (Token id:Id.Lit_Chars val:'\t\techo x >subfile1 &&\n' span_id:1109) 
          (Token id:Id.Lit_Chars val:'\t\techo x >../file &&\n' span_id:1110) (Token id:Id.Lit_Chars val:'\t\tgit status >../expect &&\n' span_id:1111) 
          (Token id:Id.Lit_Chars val:'\t\tgit stash &&\n' span_id:1112) (Token id:Id.Lit_Chars val:'\t\tsane_unset GIT_MERGE_VERBOSITY &&\n' span_id:1113) 
          (Token id:Id.Lit_Chars val:'\t\tgit stash apply\n' span_id:1114) (Token id:Id.Lit_Chars val:'\t) |\n' span_id:1115) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e 1,2d >actual && # drop "Saved..." and "HEAD is now..."\n'
            span_id: 1116
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expect actual\n' span_id:1117)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1123)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1127)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1139
          stdin_parts: [
            ('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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash where working directory contains "HEAD" file'
            span_id: 1144
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1148) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1149) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1150) 
          (Token id:Id.Lit_Chars val:'\techo file-not-a-ref > HEAD &&\n' span_id:1151) (Token id:Id.Lit_Chars val:'\tgit add HEAD &&\n' span_id:1152) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1153) (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1154) 
          (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet &&\n' span_id:1155) (Token id:Id.Lit_Chars val:'\tgit diff-index --cached --quiet HEAD &&\n' span_id:1156) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse stash^)" = "$(git rev-parse HEAD)" &&\n'
            span_id: 1157
          ) (Token id:Id.Lit_Chars val:'\tgit diff stash^..stash > output &&\n' span_id:1158) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp output expect\n' span_id:1159)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'store called with invalid commit' span_id:1166))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1170) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git stash store foo\n' span_id:1171)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'store updates stash ref and reflog' span_id:1178))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1182) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1183) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1184) 
          (Token id:Id.Lit_Chars val:'\techo quux >bazzy &&\n' span_id:1185) (Token id:Id.Lit_Chars val:'\tgit add bazzy &&\n' span_id:1186) 
          (Token id:Id.Lit_Chars val:'\tSTASH_ID=$(git stash create) &&\n' span_id:1187) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1188) 
          (Token id:Id.Lit_Chars val:'\t! grep quux bazzy &&\n' span_id:1189) (Token id:Id.Lit_Chars val:'\tgit stash store -m quuxery $STASH_ID &&\n' span_id:1190) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(cat .git/refs/stash) = $STASH_ID &&\n'
            span_id: 1191
          ) (Token id:Id.Lit_Chars val:'\tgit reflog --format=%H stash| grep $STASH_ID &&\n' span_id:1192) 
          (Token id:Id.Lit_Chars val:'\tgit stash pop &&\n' span_id:1193) (Token id:Id.Lit_Chars val:'\tgrep quux bazzy\n' span_id:1194)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'handle stash specification with spaces' span_id:1201))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1205) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1206) (Token id:Id.Lit_Chars val:'\techo pig >file &&\n' span_id:1207) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1208) (Token id:Id.Lit_Chars val:'\tstamp=$(git log -g --format="%cd" -1 refs/stash) &&\n' span_id:1209) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1210) (Token id:Id.Lit_Chars val:'\techo cow >file &&\n' span_id:1211) 
          (Token id:Id.Lit_Chars val:'\tgit stash &&\n' span_id:1212) (Token id:Id.Lit_Chars val:'\tgit stash apply "stash@{$stamp}" &&\n' span_id:1213) 
          (Token id:Id.Lit_Chars val:'\tgrep pig file\n' span_id:1214)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup stash with index and worktree changes' span_id:1221))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1225) 
          (Token id:Id.Lit_Chars val:'\tgit stash clear &&\n' span_id:1226) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:1227) 
          (Token id:Id.Lit_Chars val:'\techo index >file &&\n' span_id:1228) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:1229) 
          (Token id:Id.Lit_Chars val:'\techo working >file &&\n' span_id:1230) (Token id:Id.Lit_Chars val:'\tgit stash\n' span_id:1231)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash list implies --first-parent -m' span_id:1238))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1242) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1243) (Token id:Id.Lit_Chars val:'\tstash@{0}\n' span_id:1244) (Token id:Id.Lit_Chars val:'\n' span_id:1245) 
          (Token id:Id.Lit_Chars val:'\tdiff --git a/file b/file\n' span_id:1246) (Token id:Id.Lit_Chars val:'\tindex 257cc56..d26b33d 100644\n' span_id:1247) 
          (Token id:Id.Lit_Chars val:'\t--- a/file\n' span_id:1248) (Token id:Id.Lit_Chars val:'\t+++ b/file\n' span_id:1249) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +1 @@\n' span_id:1250) (Token id:Id.Lit_Chars val:'\t-foo\n' span_id:1251) 
          (Token id:Id.Lit_Chars val:'\t+working\n' span_id:1252) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1253) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash list --format=%gd -p >actual &&\n'
            span_id: 1254
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1255)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash list --cc shows combined diff' span_id:1262))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1266) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:1267) (Token id:Id.Lit_Chars val:'\tstash@{0}\n' span_id:1268) (Token id:Id.Lit_Chars val:'\n' span_id:1269) 
          (Token id:Id.Lit_Chars val:'\tdiff --cc file\n' span_id:1270) (Token id:Id.Lit_Chars val:'\tindex 257cc56,9015a7a..d26b33d\n' span_id:1271) 
          (Token id:Id.Lit_Chars val:'\t--- a/file\n' span_id:1272) (Token id:Id.Lit_Chars val:'\t+++ b/file\n' span_id:1273) 
          (Token id:Id.Lit_Chars val:'\t@@@ -1,1 -1,1 +1,1 @@@\n' span_id:1274) (Token id:Id.Lit_Chars val:'\t- foo\n' span_id:1275) 
          (Token id:Id.Lit_Chars val:'\t -index\n' span_id:1276) (Token id:Id.Lit_Chars val:'\t++working\n' span_id:1277) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1278) (Token id:Id.Lit_Chars val:'\tgit stash list --format=%gd -p --cc >actual &&\n' span_id:1279) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1280)
        )
      }
    )
    (C {(test_done)})
  ]
)