(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 --follow should always find copies hard in git log.\n'
                  span_id: 15
                ) (Token id:Id.Lit_Chars val:'\n' span_id:16)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/diff-lib.sh)})
    (command.Simple
      words: [
        {(echo)}
        {
          (SQ (Token id:Id.Lit_Chars val:'Line 1\n' span_id:37) 
            (Token id:Id.Lit_Chars val:'Line 2\n' span_id:38) (Token id:Id.Lit_Chars val:'Line 3\n' span_id:39)
          )
        }
      ]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:33) fd:-1 arg_word:{(path0)})
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'add a file path0 and commit.' span_id:48))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git add path0 &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'     git commit -m "Add path0"' span_id:55)
        )
      }
    )
    (command.Simple
      words: [
        {(echo)}
        {
          (SQ (Token id:Id.Lit_Chars val:'New line 1\n' span_id:65) 
            (Token id:Id.Lit_Chars val:'New line 2\n' span_id:66) (Token id:Id.Lit_Chars val:'New line 3\n' span_id:67)
          )
        }
      ]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:61) fd:-1 arg_word:{(path0)})
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Change path0.' span_id:75))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git add path0 &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'     git commit -m "Change path0"' span_id:82)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:88) fd:-1 arg_word:{(path0)})
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:91) fd:-1 arg_word:{(path1)})
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'copy path0 to path1.' span_id:99))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git add path1 &&\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '     git commit -m "Copy path1 from path0"'
            span_id: 106
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'find the copy path0 -> path1 harder' span_id:115))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git log --follow --name-status --pretty="format:%s"  path1 > current'
            span_id: 121
          )
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:127)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:130)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:131)) 
              (OF)
            }
          here_end_span_id: 142
          stdin_parts: [
            ('Copy path1 from path0\n')
            ('C100\tpath0\tpath1\n')
            ('\n')
            ('Change path0\n')
            ('M\tpath0\n')
            ('\n')
            ('Add path0\n')
            ('A\tpath0\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'validate the output.' span_id:149))} 
      {(SQ (Token id:Id.Lit_Chars val:'compare_diff_patch current expected' span_id:155))}
    )
    (C {(test_done)})
  ]
)