(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:'git svn property tests' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (C {(mkdir)} {(import)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_crlf)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [28]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_lf)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [30]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_cr)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [32]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_ne_crlf)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [34]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_ne_lf)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [36]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_ne_cr)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [38]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [40]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty_lf)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [42]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty_cr)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [44]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty_crlf)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [46]
        )
      ]
    )
    (C {(cd)} {(import)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_DGreat val:'>>' span_id:56) fd:-1 arg_word:{(kw.c)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:60)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:61)) (OF)}
          here_end_span_id: 66
          stdin_parts: [('/* Somebody prematurely put a keyword into this file */\n') ('/* $Id$ */\n')]
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {
          (DQ (Hello) (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (nWorld) (Id.Lit_Other '\\') (r) 
            (Id.Lit_Other '\\') (n)
          )
        }
      ]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:83) fd:-1 arg_word:{(crlf)})]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_crlf)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:89)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(crlf)})]
                  )
              )
            }
          spids: [88]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Hello) (Id.Lit_Other '\\') (rWorld) (Id.Lit_Other '\\') (r))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:110) fd:-1 arg_word:{(cr)})]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_cr)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:116)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(cr)})]
                  )
              )
            }
          spids: [115]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Hello) (Id.Lit_Other '\\') (nWorld) (Id.Lit_Other '\\') (n))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:137) fd:-1 arg_word:{(lf)})]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_lf)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:143)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(lf)})]
                  )
              )
            }
          spids: [142]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Hello) (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (nWorld))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:165)
          fd: -1
          arg_word: {(ne_crlf)}
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_ne_crlf)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:171)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(ne_crlf)})]
                  )
              )
            }
          spids: [170]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Hello) (Id.Lit_Other '\\') (nWorld))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:190) fd:-1 arg_word:{(ne_lf)})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_ne_lf)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:196)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(ne_lf)})]
                  )
              )
            }
          spids: [195]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Hello) (Id.Lit_Other '\\') (rWorld))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:215) fd:-1 arg_word:{(ne_cr)})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_ne_cr)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:221)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(ne_cr)})]
                  )
              )
            }
          spids: [220]
        )
      ]
    )
    (C {(touch)} {(empty)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:239)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(empty)})]
                  )
              )
            }
          spids: [238]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Id.Lit_Other '\\') (n))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:257)
          fd: -1
          arg_word: {(empty_lf)}
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty_lf)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:263)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(empty_lf)})]
                  )
              )
            }
          spids: [262]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Id.Lit_Other '\\') (r))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:281)
          fd: -1
          arg_word: {(empty_cr)}
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty_cr)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:287)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(empty_cr)})]
                  )
              )
            }
          spids: [286]
        )
      ]
    )
    (command.Simple
      words: [{(printf)} {(DQ (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (n))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:307)
          fd: -1
          arg_word: {(empty_crlf)}
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_empty_crlf)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:313)
                command_list: 
                  (command.CommandList
                    children: [(C {(git)} {(hash-object)} {(-w)} {(empty_crlf)})]
                  )
              )
            }
          spids: [312]
        )
      ]
    )
    (command.Simple
      words: [
        {(svn_cmd)}
        {(import)}
        {(--no-auto-props)}
        {(-m)}
        {(SQ (Token id:Id.Lit_Chars val:'import for git svn' span_id:334))}
        {(.)}
        {(DQ ($ Id.VSub_DollarName '$svnrepo'))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:343)
          fd: -1
          arg_word: {(/dev/null)}
        )
      ]
    )
    (C {(cd)} {(..)})
    (C {(rm)} {(-rf)} {(import)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout working copy from svn' span_id:360))} {(SQ (Token id:Id.Lit_Chars val:'svn co "$svnrepo" test_wc' span_id:364))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup some commits to svn' span_id:370))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:374) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:375) (Token id:Id.Lit_Chars val:'\t\tcd test_wc &&\n' span_id:376) 
          (Token id:Id.Lit_Chars val:'\t\techo Greetings >> kw.c &&\n' span_id:377) (Token id:Id.Lit_Chars val:'\t\tpoke kw.c &&\n' span_id:378) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "Not yet an Id" &&\n'
            span_id: 379
          ) (Token id:Id.Lit_Chars val:'\t\techo Hello world >> kw.c &&\n' span_id:380) 
          (Token id:Id.Lit_Chars val:'\t\tpoke kw.c &&\n' span_id:381) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd commit -m "Modified file, but still not yet an Id" &&\n'
            span_id: 382
          ) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd propset svn:keywords Id kw.c &&\n' span_id:383) 
          (Token id:Id.Lit_Chars val:'\t\tpoke kw.c &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd commit -m "Propset Id"\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:386)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'initialize git svn' span_id:393))} 
      {(SQ (Token id:Id.Lit_Chars val:'git svn init "$svnrepo"' span_id:397))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fetch revisions from svn' span_id:403))} 
      {(SQ (Token id:Id.Lit_Chars val:'git svn fetch' span_id:407))}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:name)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'test svn:keywords ignoring' span_id:413))}
          spids: [411]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$name'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git checkout -b mybranch remotes/git-svn &&\n' span_id:425) 
          (Token id:Id.Lit_Chars val:'\techo Hi again >> kw.c &&\n' span_id:426) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "test keywords ignoring" &&\n' span_id:427) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit svn set-tree remotes/git-svn..mybranch &&\n'
            span_id: 428
          ) (Token id:Id.Lit_Chars val:'\tgit pull . remotes/git-svn' span_id:429)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:expect)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'/* $Id$ */' span_id:435))}
          spids: [433]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:got)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:440)
                  command_list: (command.CommandList children:[(C {(sed)} {(-ne)} {(2p)} {(kw.c)})])
                )
              )
            }
          spids: [438]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'raw $Id$ found in kw.c' span_id:454))} 
      {(DQ ("test '") ($ Id.VSub_DollarName '$expect') ("' = '") ($ Id.VSub_DollarName '$got') ("'"))}
    )
    (C {(test_expect_success)} {(DQ ('propset CR on crlf files'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:473) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:474) (Token id:Id.Lit_Chars val:'\t\tcd test_wc &&\n' span_id:475) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd propset svn:eol-style CR empty &&\n'
            span_id: 476
          ) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd propset svn:eol-style CR crlf &&\n' span_id:477) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd propset svn:eol-style CR ne_crlf &&\n'
            span_id: 478
          ) (Token id:Id.Lit_Chars val:'\t\tsvn_cmd commit -m "propset CR on crlf files"\n' span_id:479) 
          (Token id:Id.Lit_Chars val:'\t )\n' span_id:480)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fetch and pull latest from svn and checkout a new wc'
            span_id: 487
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'git svn fetch &&\n' span_id:493) 
          (Token id:Id.Lit_Chars val:'\t git pull . remotes/git-svn &&\n' span_id:494) (Token id:Id.Lit_Chars val:'\t svn_cmd co "$svnrepo" new_wc' span_id:495)
        )
      }
    )
    (command.ForEach
      iter_name: i
      iter_words: [
        {(crlf)}
        {(ne_crlf)}
        {(lf)}
        {(ne_lf)}
        {(cr)}
        {(ne_cr)}
        {(empty_cr)}
        {(empty_lf)}
        {(empty)}
        {(empty_crlf)}
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} {(DQ ('Comparing ') ($ Id.VSub_DollarName '$i'))} 
              {(DQ ('cmp ') ($ Id.VSub_DollarName '$i') (' new_wc/') ($ Id.VSub_DollarName '$i'))}
            )
          ]
        )
    )
    (C {(cd)} {(test_wc)})
    (command.Simple
      words: [{(printf)} {(SQ (Token id:Id.Lit_Chars val:'$Id$\\rHello\\rWorld\\r' span_id:554))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:557) fd:-1 arg_word:{(cr)})]
    )
    (command.Simple
      words: [{(printf)} {(SQ (Token id:Id.Lit_Chars val:'$Id$\\rHello\\rWorld' span_id:565))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:568) fd:-1 arg_word:{(ne_cr)})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_cr)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:574)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(printf)} 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '$Id$\\r\\nHello\\r\\nWorld\\r\\n'
                                  span_id: 578
                                )
                              )
                            }
                          )
                          (C {(git)} {(hash-object)} {(--stdin)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [573]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a_ne_cr)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:592)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Pipeline
                        children: [
                          (C {(printf)} 
                            {
                              (SQ 
                                (Token
                                  id: Id.Lit_Chars
                                  val: '$Id$\\r\\nHello\\r\\nWorld'
                                  span_id: 596
                                )
                              )
                            }
                          )
                          (C {(git)} {(hash-object)} {(--stdin)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [591]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Set CRLF on cr files' span_id:612))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'svn_cmd propset svn:eol-style CRLF cr &&\n' span_id:618) 
          (Token
            id: Id.Lit_Chars
            val: '\t svn_cmd propset svn:eol-style CRLF ne_cr &&\n'
            span_id: 619
          ) (Token id:Id.Lit_Chars val:'\t svn_cmd propset svn:keywords Id cr &&\n' span_id:620) 
          (Token
            id: Id.Lit_Chars
            val: '\t svn_cmd propset svn:keywords Id ne_cr &&\n'
            span_id: 621
          ) (Token id:Id.Lit_Chars val:'\t svn_cmd commit -m "propset CRLF on cr files"' span_id:622)
        )
      }
    )
    (C {(cd)} {(..)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch and pull latest from svn' span_id:632))} {(SQ (Token id:Id.Lit_Chars val:'git svn fetch && git pull . remotes/git-svn' span_id:638))}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:b_cr)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:644)
                  command_list: (command.CommandList children:[(C {(git)} {(hash-object)} {(cr)})])
                )
              )
            }
          spids: [642]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:b_ne_cr)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:655)
                  command_list: 
                    (command.CommandList
                      children: [(C {(git)} {(hash-object)} {(ne_cr)})]
                    )
                )
              )
            }
          spids: [653]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'CRLF + $Id$' span_id:668))} 
      {(DQ ("test '") ($ Id.VSub_DollarName '$a_cr') ("' = '") ($ Id.VSub_DollarName '$b_cr') ("'"))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'CRLF + $Id$ (no newline)' span_id:682))} 
      {
        (DQ ("test '") ($ Id.VSub_DollarName '$a_ne_cr') ("' = '") ($ Id.VSub_DollarName '$b_ne_cr') 
          ("'")
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:696)
          fd: -1
          arg_word: {(show-ignore.expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:700)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:701)) 
              (OF)
            }
          here_end_span_id: 716
          stdin_parts: [
            ('\n')
            ('# /\n')
            ('/no-such-file*\n')
            ('\n')
            ('# /deeply/\n')
            ('/deeply/no-such-file*\n')
            ('\n')
            ('# /deeply/nested/\n')
            ('/deeply/nested/no-such-file*\n')
            ('\n')
            ('# /deeply/nested/directory/\n')
            ('/deeply/nested/directory/no-such-file*\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test show-ignore' span_id:721))} 
      {
        (DQ ('\n') ('\t(\n') ('\t\tcd test_wc &&\n') ('\t\tmkdir -p deeply/nested/directory &&\n') 
          ('\t\ttouch deeply/nested/directory/.keep &&\n') ('\t\tsvn_cmd add deeply &&\n') ('\t\tsvn_cmd up &&\n') ("\t\tsvn_cmd propset -R svn:ignore '\n") 
          ('no-such-file*\n') ("' .\n") ("\t\tsvn_cmd commit -m 'propset svn:ignore'\n") ('\t) &&\n') 
          ('\tgit svn show-ignore > show-ignore.got &&\n') ('\tcmp show-ignore.expect show-ignore.got\n')
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:744)
          fd: -1
          arg_word: {(create-ignore.expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:747)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:748)) 
              (OF)
            }
          here_end_span_id: 752
          stdin_parts: [('/no-such-file*\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:756)
          fd: -1
          arg_word: {(create-ignore-index.expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:759)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:760)) 
              (OF)
            }
          here_end_span_id: 767
          stdin_parts: [
            ('100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0\t.gitignore\n')
            ('100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0\tdeeply/.gitignore\n')
            ('100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0\tdeeply/nested/.gitignore\n')
            (
'100644 8c52e5dfcd0a8b6b6bcfe6b41b89bcbf493718a5 0\tdeeply/nested/directory/.gitignore\n'
            )
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test create-ignore' span_id:772))} 
      {
        (DQ ('\n') ('\tgit svn fetch && git pull . remotes/git-svn &&\n') 
          ('\tgit svn create-ignore &&\n') ('\tcmp ./.gitignore create-ignore.expect &&\n') 
          ('\tcmp ./deeply/.gitignore create-ignore.expect &&\n') ('\tcmp ./deeply/nested/.gitignore create-ignore.expect &&\n') 
          ('\tcmp ./deeply/nested/directory/.gitignore create-ignore.expect &&\n') ('\tgit ls-files -s | grep gitignore | cmp - create-ignore-index.expect\n') ('\t')
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:790)
          fd: -1
          arg_word: {(prop.expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:793)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:794)) 
              (OF)
            }
          here_end_span_id: 800
          stdin_parts: [('\n') ('no-such-file*\n') ('\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:803)
          fd: -1
          arg_word: {(prop2.expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:806)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:807)) 
              (OF)
            }
          here_end_span_id: 811
          stdin_parts: [('8\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test propget' span_id:825))} 
      {
        (DQ ('\n') ('\tgit svn propget svn:ignore . | cmp - prop.expect &&\n') ('\tcd deeply &&\n') 
          ('\tgit svn propget svn:ignore . | cmp - ../prop.expect &&\n') ('\tgit svn propget svn:entry:committed-rev nested/directory/.keep ') 
          ('\t  | cmp - ../prop2.expect &&\n') ('\tgit svn propget svn:ignore .. | cmp - ../prop.expect &&\n') 
          ('\tgit svn propget svn:ignore nested/ | cmp - ../prop.expect &&\n') ('\tgit svn propget svn:ignore ./nested | cmp - ../prop.expect &&\n') 
          ('\tgit svn propget svn:ignore .././deeply/nested | cmp - ../prop.expect\n') ('\t')
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:846)
          fd: -1
          arg_word: {(prop.expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:849)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:850)) 
              (OF)
            }
          here_end_span_id: 859
          stdin_parts: [
            ("Properties on '.':\n")
            ('  svn:entry:committed-date\n')
            ('  svn:entry:committed-rev\n')
            ('  svn:entry:last-author\n')
            ('  svn:entry:uuid\n')
            ('  svn:ignore\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:862)
          fd: -1
          arg_word: {(prop2.expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:865)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:866)) 
              (OF)
            }
          here_end_span_id: 874
          stdin_parts: [
            ("Properties on 'nested/directory/.keep':\n")
            ('  svn:entry:committed-date\n')
            ('  svn:entry:committed-rev\n')
            ('  svn:entry:last-author\n')
            ('  svn:entry:uuid\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test proplist' span_id:879))} 
      {
        (DQ ('\n') ('\tgit svn proplist . | cmp - prop.expect &&\n') 
          ('\tgit svn proplist nested/directory/.keep | cmp - prop2.expect\n') ('\t')
        )
      }
    )
    (C {(test_done)})
  ]
)