(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git-apply --ignore-whitespace.\n'> <'\n'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(patch1.patch)} spids:[33])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('diff --git a/main.c b/main.c\n') ('new file mode 100644\n') ('--- /dev/null\n') 
              ('+++ b/main.c\n') ('@@ -0,0 +1,22 @@\n') ('+#include <stdio.h>\n') ('+\n') ('+void print_int(int num);\n') 
              ('+int func(int num);\n') ('+\n') ('+int main() {\n') ('+       int i;\n') ('+\n') ('+       for (i = 0; i < 10; i++) {\n') 
              ('+               print_int(func(i)); /* stuff */\n') ('+       }\n') ('+\n') ('+       return 0;\n') ('+}\n') ('+\n') ('+int func(int num) {\n') 
              ('+       return num * num;\n') ('+}\n') ('+\n') ('+void print_int(int num) {\n') ('+       printf("%d", num);\n') ('+}\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [37]
        )
      ]
    )
    (SimpleCommand
      words: [{(sed)} {(-e)} {(SQ <'s/Z/ /g'>)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(patch2.patch)} spids:[67])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('diff --git a/main.c b/main.c\n') ('--- a/main.c\n') ('+++ b/main.c\n') 
              ('@@ -10,6 +10,8 @@\n') ('Z\t\tprint_int(func(i)); /* stuff */\n') ('Z\t}\n') ('Z\n') ('+\tprintf("\\n");\n') ('+\n') 
              ('Z\treturn 0;\n') ('Z}\n') ('Z\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [71]
        )
      ]
    )
    (SimpleCommand
      words: [{(sed)} {(-e)} {(SQ <'s/Z/ /g'>)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(patch3.patch)} spids:[97])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('diff --git a/main.c b/main.c\n') ('--- a/main.c\n') ('+++ b/main.c\n') 
              ('@@ -10,3 +10,4 @@\n') ('Z\tfor (i = 0; i < 10; i++) {\n') ('Z\t\tprint_int(func(i));Z\n') ('+\t\t/* stuff */\n') ('Z\t}\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [101]
        )
      ]
    )
    (SimpleCommand
      words: [{(sed)} {(-e)} {(SQ <'s/Z/ /g'>)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(patch4.patch)} spids:[121])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('diff --git a/main.c b/main.c\n') ('--- a/main.c\n') ('+++ b/main.c\n') 
              ('@@ -21,1 +21,1 @@\n') ('-\t};Z\n') ('\\ No newline at end of file\n') ('+\t};\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [125]
        )
      ]
    )
    (SimpleCommand
      words: [{(sed)} {(-e)} {(SQ <'s/Z/ /g'>)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(patch5.patch)} spids:[142])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('diff --git a/main.c b/main.c\n') ('--- a/main.c\n') ('+++ b/main.c\n') 
              ('@@ -2,2 +2,3 @@\n') ('Z\tvoid print_int(int num);\n') ('+\t/* a comment */\n') ('Z\tint func(int num);\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [146]
        )
      ]
    )
    (SimpleCommand
      words: [{(sed)} {(-e)} {(SQ <'s/T/\t/g'>)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(main.c.final)} spids:[166])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('#include <stdio.h>\n') ('\n') ('void print_int(int num);\n') ('int func(int num);\n') 
              ('\n') ('int main() {\n') ('       int i;\n') ('\n') ('       for (i = 0; i < 10; i++) {\n') 
              ('               print_int(func(i)); /* stuff */\n') ('       }\n') ('\n') ('Tprintf("\\n");\n') ('\n') ('       return 0;\n') ('}\n') ('\n') 
              ('int func(int num) {\n') ('       return num * num;\n') ('}\n') ('\n') ('void print_int(int num) {\n') 
              ('       printf("%d", num);\n') ('}\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [170]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'file creation'>)} {(SQ <'\n'> <'\tgit apply patch1.patch\n'>)})
    (C {(test_expect_success)} {(SQ <'patch2 fails (retab)'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git apply patch2.patch\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'patch2 applies with --ignore-whitespace'>)} 
      {(SQ <'\n'> <'\tgit apply --ignore-whitespace patch2.patch\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'patch2 reverse applies with --ignore-space-change'>)} 
      {(SQ <'\n'> <'\tgit apply -R --ignore-space-change patch2.patch\n'>)}
    )
    (C {(git)} {(config)} {(apply.ignorewhitespace)} {(change)})
    (C {(test_expect_success)} {(SQ <'patch2 applies (apply.ignorewhitespace = change)'>)} 
      {(SQ <'\n'> <'\tgit apply patch2.patch &&\n'> <'\ttest_cmp main.c.final main.c\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'patch3 fails (missing string at EOL)'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git apply patch3.patch\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'patch4 fails (missing EOL at EOF)'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git apply patch4.patch\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'patch5 fails (leading whitespace differences matter)'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git apply patch5.patch\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'re-create file (with --ignore-whitespace)'>)} 
      {(SQ <'\n'> <'\trm -f main.c &&\n'> <'\tgit apply patch1.patch\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'patch5 fails (--no-ignore-whitespace)'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git apply --no-ignore-whitespace patch5.patch\n'>)}
    )
    (C {(test_done)})
  ]
)