(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 --include-untracked' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash save --include-untracked 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:'\ttest_tick &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\techo 2 > file &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\techo 3 > file &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\techo 1 > file2 &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\techo 1 > HEAD &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\tmkdir untracked &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\techo untracked >untracked/untracked &&\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tgit stash --include-untracked &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet &&\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\tgit diff-index --cached --quiet HEAD\n' span_id:46)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:52) fd:-1 arg_word:{(expect)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:56)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 62
          stdin_parts: [('?? actual\n') ('?? expect\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash save --include-untracked cleaned the untracked files'
            span_id: 67
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tgit status --porcelain >actual &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:73)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:79)
          fd: -1
          arg_word: {(expect.diff)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:83)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 108
          stdin_parts: [
            ('diff --git a/HEAD b/HEAD\n')
            ('new file mode 100644\n')
            ('index 0000000..d00491f\n')
            ('--- /dev/null\n')
            ('+++ b/HEAD\n')
            ('@@ -0,0 +1 @@\n')
            ('+1\n')
            ('diff --git a/file2 b/file2\n')
            ('new file mode 100644\n')
            ('index 0000000..d00491f\n')
            ('--- /dev/null\n')
            ('+++ b/file2\n')
            ('@@ -0,0 +1 @@\n')
            ('+1\n')
            ('diff --git a/untracked/untracked b/untracked/untracked\n')
            ('new file mode 100644\n')
            ('index 0000000..5a72eb2\n')
            ('--- /dev/null\n')
            ('+++ b/untracked/untracked\n')
            ('@@ -0,0 +1 @@\n')
            ('+untracked\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:111)
          fd: -1
          arg_word: {(expect.lstree)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:115)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 122
          stdin_parts: [('HEAD\n') ('file2\n') ('untracked\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash save --include-untracked stashed the untracked files'
            span_id: 127
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\ttest_path_is_missing file2 &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing untracked &&\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\ttest_path_is_missing HEAD &&\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff HEAD stash^3 -- HEAD file2 untracked >actual &&\n'
            span_id: 135
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.diff actual &&\n' span_id:136) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-tree --name-only stash^3: >actual &&\n'
            span_id: 137
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.lstree actual\n' span_id:138)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash save --patch --include-untracked fails' span_id:144))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:148) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash --patch --include-untracked\n'
            span_id: 149
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash save --patch --all fails' span_id:156))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:160) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git stash --patch --all\n'
            span_id: 161
          )
        )
      }
    )
    (C {(git)} {(clean)} {(--force)} {(--quiet)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:176)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:180)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 190
          stdin_parts: [
            (' M file\n')
            ('?? HEAD\n')
            ('?? actual\n')
            ('?? expect\n')
            ('?? file2\n')
            ('?? untracked/\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash pop after save --include-untracked leaves files untracked again'
            span_id: 195
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\tgit stash pop &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit status --porcelain >actual &&\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\ttest "1" = "$(cat file2)" &&\n' span_id:203) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest untracked = "$(cat untracked/untracked)"\n'
            span_id: 204
          )
        )
      }
    )
    (C {(git)} {(clean)} {(--force)} {(--quiet)} {(-d)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash save -u dirty index' span_id:222))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\techo 4 > file3 &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\tgit add file3 &&\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\tgit stash -u\n' span_id:230)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:236)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:240)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 251
          stdin_parts: [
            ('diff --git a/file3 b/file3\n')
            ('new file mode 100644\n')
            ('index 0000000..b8626c4\n')
            ('--- /dev/null\n')
            ('+++ b/file3\n')
            ('@@ -0,0 +1 @@\n')
            ('+4\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash save --include-untracked dirty index got stashed'
            span_id: 256
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:260) 
          (Token id:Id.Lit_Chars val:'\tgit stash pop --index &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tgit diff --cached >actual &&\n' span_id:262) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:263)
        )
      }
    )
    (command.Simple
      words: [{(git)} {(reset)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:271)
          fd: -1
          arg_word: {(/dev/null)}
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash save --include-untracked -q is quiet' span_id:282))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\techo 1 > file5 &&\n' span_id:287) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit stash save --include-untracked --quiet > .git/stash-output.out 2>&1 &&\n'
            span_id: 288
          ) (Token id:Id.Lit_Chars val:'\ttest_line_count = 0 .git/stash-output.out &&\n' span_id:289) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/stash-output.out\n' span_id:290)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash save --include-untracked removed files' span_id:297))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:301) 
          (Token id:Id.Lit_Chars val:'\trm -f file &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\tgit stash save --include-untracked &&\n' span_id:303) 
          (Token id:Id.Lit_Chars val:'\techo 1 > expect &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\ttest_cmp file expect\n' span_id:305)
        )
      }
    )
    (C {(rm)} {(-f)} {(expect)})
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash save --include-untracked removed files got stashed'
            span_id: 319
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:323) 
          (Token id:Id.Lit_Chars val:'\tgit stash pop &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing file\n' span_id:325)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:331)
          fd: -1
          arg_word: {(.gitignore)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:335)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 342
          stdin_parts: [('.gitignore\n') ('ignored\n') ('ignored.d/\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash save --include-untracked respects .gitignore'
            span_id: 347
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:351) 
          (Token id:Id.Lit_Chars val:'\techo ignored > ignored &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\tmkdir ignored.d &&\n' span_id:353) 
          (Token
            id: Id.Lit_Chars
            val: '\techo ignored >ignored.d/untracked &&\n'
            span_id: 354
          ) (Token id:Id.Lit_Chars val:'\tgit stash -u &&\n' span_id:355) 
          (Token id:Id.Lit_Chars val:'\ttest -s ignored &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\ttest -s ignored.d/untracked &&\n' span_id:357) 
          (Token id:Id.Lit_Chars val:'\ttest -s .gitignore\n' span_id:358)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stash save -u can stash with only untracked files different'
            span_id: 365
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:369) 
          (Token id:Id.Lit_Chars val:'\techo 4 > file4 &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\tgit stash -u &&\n' span_id:371) 
          (Token id:Id.Lit_Chars val:'\ttest_path_is_missing file4\n' span_id:372)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash save --all does not respect .gitignore' span_id:379))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:383) 
          (Token id:Id.Lit_Chars val:'\tgit stash -a &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing ignored &&\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\ttest_path_is_missing ignored.d &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .gitignore\n' span_id:387)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stash save --all is stash poppable' span_id:394))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:398) 
          (Token id:Id.Lit_Chars val:'\tgit stash pop &&\n' span_id:399) (Token id:Id.Lit_Chars val:'\ttest -s ignored &&\n' span_id:400) 
          (Token id:Id.Lit_Chars val:'\ttest -s ignored.d/untracked &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\ttest -s .gitignore\n' span_id:402)
        )
      }
    )
    (C {(test_done)})
  ]
)