(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)}) ] )