(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'check svn dumpfile importer'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShFunction
      name: reinit_git
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Pipeline
                          children: [(C {<test_declared_prereq>} {<PIPE>})]
                          negated: T
                        )
                      ]
                    )
                  action: [
                    (command.Simple
                      words: [{<echo>} {(DQ <'reinit_git: need to declare PIPE prerequisite'>)}]
                      redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<4>})]
                      do_fork: T
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Return return>
                      arg_word: {<127>}
                    )
                  ]
                  spids: [23 32]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<rm>} {<-fr>} {<.git>})
                (C {<rm>} {<-f>} {<stream>} {<backflow>})
                (C {<git>} {<init>})
                (C {<mkfifo>} {<stream>} {<backflow>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: try_dump
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:input)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [97]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:maybe_fail_svnfe)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (braced_var_sub
                            token: <Id.VSub_Number 2>
                            suffix_op: 
                              (suffix_op.Unary
                                tok: <Id.VTest_ColonPlus ':+'>
                                arg_word: {<test_> ($ Id.VSub_Number '$2')}
                              )
                          )
                        }
                      spids: [103]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:maybe_fail_fi)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (braced_var_sub
                            token: <Id.VSub_Number 3>
                            suffix_op: 
                              (suffix_op.Unary
                                tok: <Id.VTest_ColonPlus ':+'>
                                arg_word: {<test_> ($ Id.VSub_Number '$3')}
                              )
                          )
                        }
                      spids: [114]
                    )
                  ]
                )
                (BraceGroup
                  children: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          words: [
                            {($ Id.VSub_DollarName '$maybe_fail_svnfe')}
                            {<test-svn-fe>}
                            {(DQ ($ Id.VSub_DollarName '$input'))}
                          ]
                          redirects: [
                            (redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<stream>}
                            )
                            (redir
                              op: <Id.Redir_Less '3<'>
                              loc: (redir_loc.Fd fd:3)
                              arg: {<backflow>}
                            )
                          ]
                          do_fork: T
                        )
                      terminator: <Id.Op_Amp _>
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {($ Id.VSub_DollarName '$maybe_fail_fi')}
                    {<git>}
                    {<fast-import>}
                    {<--cat-blob-fd> <Id.Lit_Equals '='> <3>}
                  ]
                  redirects: [
                    (redir
                      op: <Id.Redir_Less '<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: {<stream>}
                    )
                    (redir
                      op: <Id.Redir_Great '3>'>
                      loc: (redir_loc.Fd fd:3)
                      arg: {<backflow>}
                    )
                  ]
                  do_fork: T
                )
                (C {<wait>} {($ Id.VSub_Bang '$!')})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: properties
      body: 
        (BraceGroup
          children: [
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [(C {<test>} {(DQ ($ Id.VSub_Pound '$#'))} {<-ne>} {<0>})]
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe]
                      children: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:property)
                              op: assign_op.Equal
                              rhs: {(DQ ($ Id.VSub_Number '$1'))}
                              spids: [201]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:value)
                              op: assign_op.Equal
                              rhs: {(DQ ($ Id.VSub_Number '$2'))}
                              spids: [209]
                            )
                          ]
                        )
                        (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                          {
                            (DQ <'K '> 
                              (braced_var_sub
                                token: <Id.VSub_Name property>
                                prefix_op: (Id.VSub_Pound)
                              )
                            )
                          }
                        )
                        (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                          {(DQ ($ Id.VSub_DollarName '$property'))}
                        )
                        (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                          {
                            (DQ <'V '> 
                              (braced_var_sub
                                token: <Id.VSub_Name value>
                                prefix_op: (Id.VSub_Pound)
                              )
                            )
                          }
                        )
                        (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                          {(DQ ($ Id.VSub_DollarName '$value'))}
                        )
                        (C {<shift>} {<2>})
                        (command.ControlFlow
                          token: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: text_no_props
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:text)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1') <'\n'>)}
                      spids: [310]
                    )
                  ]
                )
                (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                  {(DQ <'Prop-content-length: 10'>)}
                )
                (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                  {
                    (DQ <'Text-content-length: '> 
                      (braced_var_sub
                        token: <Id.VSub_Name text>
                        prefix_op: (Id.VSub_Pound)
                      )
                    )
                  }
                )
                (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                  {
                    (DQ <'Content-length: '> 
                      (word_part.ArithSub
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: 
                              {(braced_var_sub token:<Id.VSub_Name text> prefix_op:(Id.VSub_Pound))}
                            right: {<Id.Lit_Digits 10>}
                          )
                      )
                    )
                  }
                )
                (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} {(DQ )} {(DQ <PROPS-END>)})
                (C {<printf>} {(DQ <'%s'> <Id.Lit_BadBackslash '\\'> <n>)} 
                  {(DQ ($ Id.VSub_DollarName '$text'))}
                )
              ]
            )
          ]
        )
    )
    (command.Simple
      redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<empty>})]
      do_fork: F
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'empty dump'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\techo "SVN-fs-dump-format-version: 2" >input &&\n'> 
          <'\ttry_dump input\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'v4 dumps not supported'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\techo "SVN-fs-dump-format-version: 4" >v4.dump &&\n'> 
          <'\ttry_dump v4.dump must_fail\n'>
        )
      }
    )
    (C {<test_expect_failure>} {<PIPE>} {(SQ <'empty revision'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> 
          <'\tprintf "rev <nobody, nobody@local>: %s\\n" "" "" >expect &&\n'> <'\tcat >emptyrev.dump <<-\\EOF &&\n'> <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> 
          <'\tRevision-number: 1\n'> <'\tProp-content-length: 0\n'> <'\tContent-length: 0\n'> <'\n'> <'\tRevision-number: 2\n'> 
          <'\tProp-content-length: 0\n'> <'\tContent-length: 0\n'> <'\n'> <'\tEOF\n'> <'\ttry_dump emptyrev.dump &&\n'> 
          <'\tgit log -p --format="rev <%an, %ae>: %s" HEAD >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'empty properties'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> 
          <'\tprintf "rev <nobody, nobody@local>: %s\\n" "" "" >expect &&\n'> <'\tcat >emptyprop.dump <<-\\EOF &&\n'> <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> 
          <'\tRevision-number: 1\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> 
          <'\tRevision-number: 2\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\tEOF\n'> 
          <'\ttry_dump emptyprop.dump &&\n'> <'\tgit log -p --format="rev <%an, %ae>: %s" HEAD >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'author name and commit message'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> 
          <'\techo "<author@example.com, author@example.com@local>" >expect.author &&\n'> <'\tcat >message <<-\\EOF &&\n'> <'\tA concise summary of the change\n'> <'\n'> 
          <'\tA detailed description of the change, why it is needed, what\n'> <'\twas broken and why applying this is the best course of action.\n'> <'\n'> <'\t* file.c\n'> 
          <'\t    Details pertaining to an individual file.\n'> <'\tEOF\n'> <'\t{\n'> <'\t\tproperties \\\n'> <'\t\t\tsvn:author author@example.com \\\n'> 
          <'\t\t\tsvn:log "$(cat message)" &&\n'> <'\t\techo PROPS-END\n'> <'\t} >props &&\n'> <'\t{\n'> <'\t\techo "SVN-fs-dump-format-version: 3" &&\n'> 
          <'\t\techo &&\n'> <'\t\techo "Revision-number: 1" &&\n'> <'\t\techo Prop-content-length: $(wc -c <props) &&\n'> 
          <'\t\techo Content-length: $(wc -c <props) &&\n'> <'\t\techo &&\n'> <'\t\tcat props\n'> <'\t} >log.dump &&\n'> <'\ttry_dump log.dump &&\n'> 
          <'\tgit log -p --format="%B" HEAD >actual.log &&\n'> <'\tgit log --format="<%an, %ae>" >actual.author &&\n'> <'\ttest_cmp message actual.log &&\n'> 
          <'\ttest_cmp expect.author actual.author\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'unsupported properties are ignored'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\techo author >expect &&\n'> 
          <'\tcat >extraprop.dump <<-\\EOF &&\n'> <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\tRevision-number: 1\n'> <'\tProp-content-length: 56\n'> 
          <'\tContent-length: 56\n'> <'\n'> <'\tK 8\n'> <'\tnonsense\n'> <'\tV 1\n'> <'\ty\n'> <'\tK 10\n'> <'\tsvn:author\n'> <'\tV 6\n'> 
          <'\tauthor\n'> <'\tPROPS-END\n'> <'\tEOF\n'> <'\ttry_dump extraprop.dump &&\n'> 
          <'\tgit log -p --format=%an HEAD >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_failure>} {<PIPE>} {(SQ <'timestamp and empty file'>)} 
      {
        (SQ <'\n'> <'\techo author@example.com >expect.author &&\n'> 
          <'\techo 1999-01-01 >expect.date &&\n'> <'\techo file >expect.files &&\n'> <'\treinit_git &&\n'> <'\t{\n'> <'\t\tproperties \\\n'> 
          <'\t\t\tsvn:author author@example.com \\\n'> <'\t\t\tsvn:date "1999-01-01T00:01:002.000000Z" \\\n'> <'\t\t\tsvn:log "add empty file" &&\n'> 
          <'\t\techo PROPS-END\n'> <'\t} >props &&\n'> <'\t{\n'> <'\t\tcat <<-EOF &&\n'> <'\t\tSVN-fs-dump-format-version: 3\n'> <'\n'> 
          <'\t\tRevision-number: 1\n'> <'\t\tEOF\n'> <'\t\techo Prop-content-length: $(wc -c <props) &&\n'> 
          <'\t\techo Content-length: $(wc -c <props) &&\n'> <'\t\techo &&\n'> <'\t\tcat props &&\n'> <'\t\tcat <<-\\EOF\n'> <'\n'> <'\t\tNode-path: empty-file\n'> 
          <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> <'\t\tContent-length: 0\n'> <'\n'> <'\t\tEOF\n'> <'\t} >emptyfile.dump &&\n'> 
          <'\ttry_dump emptyfile.dump &&\n'> <'\tgit log --format=%an HEAD >actual.author &&\n'> 
          <'\tgit log --date=short --format=%ad HEAD >actual.date &&\n'> <'\tgit ls-tree -r --name-only HEAD >actual.files &&\n'> 
          <'\ttest_cmp expect.author actual.author &&\n'> <'\ttest_cmp expect.date actual.date &&\n'> <'\ttest_cmp expect.files actual.files &&\n'> 
          <'\tgit checkout HEAD empty-file &&\n'> <'\ttest_cmp empty file\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'directory with files'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> 
          <'\tprintf "%s\\n" directory/file1 directory/file2 >expect.files &&\n'> <'\techo hi >hi &&\n'> <'\techo hello >hello &&\n'> <'\t{\n'> <'\t\tproperties \\\n'> 
          <'\t\t\tsvn:author author@example.com \\\n'> <'\t\t\tsvn:date "1999-02-01T00:01:002.000000Z" \\\n'> 
          <'\t\t\tsvn:log "add directory with some files in it" &&\n'> <'\t\techo PROPS-END\n'> <'\t} >props &&\n'> <'\t{\n'> <'\t\tcat <<-EOF &&\n'> 
          <'\t\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\t\tRevision-number: 1\n'> <'\t\tEOF\n'> <'\t\techo Prop-content-length: $(wc -c <props) &&\n'> 
          <'\t\techo Content-length: $(wc -c <props) &&\n'> <'\t\techo &&\n'> <'\t\tcat props &&\n'> <'\t\tcat <<-\\EOF &&\n'> <'\n'> <'\t\tNode-path: directory\n'> 
          <'\t\tNode-kind: dir\n'> <'\t\tNode-action: add\n'> <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> 
          <'\t\tPROPS-END\n'> <'\n'> <'\t\tNode-path: directory/file1\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> 
          <'\t\tEOF\n'> <'\t\ttext_no_props hello &&\n'> <'\t\tcat <<-\\EOF &&\n'> <'\t\tNode-path: directory/file2\n'> 
          <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> <'\t\tEOF\n'> <'\t\ttext_no_props hi\n'> <'\t} >directory.dump &&\n'> 
          <'\ttry_dump directory.dump &&\n'> <'\n'> <'\tgit ls-tree -r --name-only HEAD >actual.files &&\n'> <'\tgit checkout HEAD directory &&\n'> 
          <'\ttest_cmp expect.files actual.files &&\n'> <'\ttest_cmp hello directory/file1 &&\n'> <'\ttest_cmp hi directory/file2\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'branch name with backslash'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tsort <<-\\EOF >expect.branch-files &&\n'> 
          <'\ttrunk/file1\n'> <'\ttrunk/file2\n'> <'\t"branches/UpdateFOPto094\\\\/file1"\n'> 
          <'\t"branches/UpdateFOPto094\\\\/file2"\n'> <'\tEOF\n'> <'\n'> <'\techo hi >hi &&\n'> <'\techo hello >hello &&\n'> <'\t{\n'> <'\t\tproperties \\\n'> 
          <'\t\t\tsvn:author author@example.com \\\n'> <'\t\t\tsvn:date "1999-02-02T00:01:02.000000Z" \\\n'> 
          <'\t\t\tsvn:log "add directory with some files in it" &&\n'> <'\t\techo PROPS-END\n'> <'\t} >props.setup &&\n'> <'\t{\n'> <'\t\tproperties \\\n'> 
          <'\t\t\tsvn:author brancher@example.com \\\n'> <'\t\t\tsvn:date "2007-12-06T21:38:34.000000Z" \\\n'> 
          <'\t\t\tsvn:log "Updating fop to .94 and adjust fo-stylesheets" &&\n'> <'\t\techo PROPS-END\n'> <'\t} >props.branch &&\n'> <'\t{\n'> <'\t\tcat <<-EOF &&\n'> 
          <'\t\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\t\tRevision-number: 1\n'> <'\t\tEOF\n'> 
          <'\t\techo Prop-content-length: $(wc -c <props.setup) &&\n'> <'\t\techo Content-length: $(wc -c <props.setup) &&\n'> <'\t\techo &&\n'> <'\t\tcat props.setup &&\n'> 
          <'\t\tcat <<-\\EOF &&\n'> <'\n'> <'\t\tNode-path: trunk\n'> <'\t\tNode-kind: dir\n'> <'\t\tNode-action: add\n'> 
          <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> <'\t\tPROPS-END\n'> <'\n'> <'\t\tNode-path: branches\n'> 
          <'\t\tNode-kind: dir\n'> <'\t\tNode-action: add\n'> <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> 
          <'\t\tPROPS-END\n'> <'\n'> <'\t\tNode-path: trunk/file1\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> 
          <'\t\tEOF\n'> <'\t\ttext_no_props hello &&\n'> <'\t\tcat <<-\\EOF &&\n'> <'\t\tNode-path: trunk/file2\n'> 
          <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> <'\t\tEOF\n'> <'\t\ttext_no_props hi &&\n'> <'\t\tcat <<-\\EOF &&\n'> <'\n'> 
          <'\t\tRevision-number: 2\n'> <'\t\tEOF\n'> <'\t\techo Prop-content-length: $(wc -c <props.branch) &&\n'> 
          <'\t\techo Content-length: $(wc -c <props.branch) &&\n'> <'\t\techo &&\n'> <'\t\tcat props.branch &&\n'> <'\t\tcat <<-\\EOF\n'> <'\n'> 
          <'\t\tNode-path: branches/UpdateFOPto094\\\n'> <'\t\tNode-kind: dir\n'> <'\t\tNode-action: add\n'> <'\t\tNode-copyfrom-rev: 1\n'> 
          <'\t\tNode-copyfrom-path: trunk\n'> <'\n'> <'\t\tNode-kind: dir\n'> <'\t\tNode-action: add\n'> <'\t\tProp-content-length: 34\n'> 
          <'\t\tContent-length: 34\n'> <'\n'> <'\t\tK 13\n'> <'\t\tsvn:mergeinfo\n'> <'\t\tV 0\n'> <'\n'> <'\t\tPROPS-END\n'> <'\t\tEOF\n'> 
          <'\t} >branch.dump &&\n'> <'\ttry_dump branch.dump &&\n'> <'\n'> <'\tgit ls-tree -r --name-only HEAD |\n'> 
          <'\tsort >actual.branch-files &&\n'> <'\ttest_cmp expect.branch-files actual.branch-files\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'node without action'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat >inaction.dump <<-\\EOF &&\n'> 
          <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\tRevision-number: 1\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> 
          <'\tPROPS-END\n'> <'\n'> <'\tNode-path: directory\n'> <'\tNode-kind: dir\n'> <'\tProp-content-length: 10\n'> 
          <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\tEOF\n'> <'\ttry_dump inaction.dump must_fail\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'action: add node without text'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat >textless.dump <<-\\EOF &&\n'> 
          <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\tRevision-number: 1\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> 
          <'\tPROPS-END\n'> <'\n'> <'\tNode-path: textless\n'> <'\tNode-kind: file\n'> <'\tNode-action: add\n'> 
          <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\tEOF\n'> <'\ttry_dump textless.dump must_fail\n'>
        )
      }
    )
    (C {<test_expect_failure>} {<PIPE>} {(SQ <'change file mode but keep old content'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tOBJID\n'> 
          <'\t:120000 100644 OBJID OBJID T\tgreeting\n'> <'\tOBJID\n'> <'\t:100644 120000 OBJID OBJID T\tgreeting\n'> <'\tOBJID\n'> 
          <'\t:000000 100644 OBJID OBJID A\tgreeting\n'> <'\tEOF\n'> <'\techo "link hello" >expect.blob &&\n'> <'\techo hello >hello &&\n'> 
          <'\tcat >filemode.dump <<-\\EOF &&\n'> <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\tRevision-number: 1\n'> <'\tProp-content-length: 10\n'> 
          <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> <'\tNode-path: greeting\n'> <'\tNode-kind: file\n'> 
          <'\tNode-action: add\n'> <'\tProp-content-length: 10\n'> <'\tText-content-length: 11\n'> <'\tContent-length: 21\n'> <'\n'> 
          <'\tPROPS-END\n'> <'\tlink hello\n'> <'\n'> <'\tRevision-number: 2\n'> <'\tProp-content-length: 10\n'> 
          <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> <'\tNode-path: greeting\n'> <'\tNode-kind: file\n'> 
          <'\tNode-action: change\n'> <'\tProp-content-length: 33\n'> <'\tContent-length: 33\n'> <'\n'> <'\tK 11\n'> <'\tsvn:special\n'> 
          <'\tV 1\n'> <'\t*\n'> <'\tPROPS-END\n'> <'\n'> <'\tRevision-number: 3\n'> <'\tProp-content-length: 10\n'> 
          <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> <'\tNode-path: greeting\n'> <'\tNode-kind: file\n'> 
          <'\tNode-action: change\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\tEOF\n'> 
          <'\ttry_dump filemode.dump &&\n'> <'\t{\n'> <'\t\tgit rev-list HEAD |\n'> <'\t\tgit diff-tree --root --stdin |\n'> 
          <'\t\tsed "s/$_x40/OBJID/g"\n'> <'\t} >actual &&\n'> <'\tgit show HEAD:greeting >actual.blob &&\n'> 
          <'\tgit show HEAD^:greeting >actual.target &&\n'> <'\ttest_cmp expect actual &&\n'> <'\ttest_cmp expect.blob actual.blob &&\n'> 
          <'\ttest_cmp hello actual.target\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'NUL in property value'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\techo "commit message" >expect.message &&\n'> <'\t{\n'> 
          <'\t\tproperties \\\n'> <'\t\t\tunimportant "something with a NUL (Q)" \\\n'> <'\t\t\tsvn:log "commit message"&&\n'> 
          <'\t\techo PROPS-END\n'> <'\t} |\n'> <'\tq_to_nul >props &&\n'> <'\t{\n'> <'\t\tcat <<-\\EOF &&\n'> 
          <'\t\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\t\tRevision-number: 1\n'> <'\t\tEOF\n'> <'\t\techo Prop-content-length: $(wc -c <props) &&\n'> 
          <'\t\techo Content-length: $(wc -c <props) &&\n'> <'\t\techo &&\n'> <'\t\tcat props\n'> <'\t} >nulprop.dump &&\n'> <'\ttry_dump nulprop.dump &&\n'> 
          <'\tgit diff-tree --always -s --format=%s HEAD >actual.message &&\n'> <'\ttest_cmp expect.message actual.message\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'NUL in log message, file content, and property name'>)} 
      {
        (SQ <'\n'> <'\t# Caveat: svnadmin 1.6.16 (r1073529) truncates at \\0 in the\n'> 
          <'\t# svn:specialQnotreally example.\n'> <'\treinit_git &&\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tOBJID\n'> 
          <'\t:100644 100644 OBJID OBJID M\tgreeting\n'> <'\tOBJID\n'> <'\t:000000 100644 OBJID OBJID A\tgreeting\n'> <'\tEOF\n'> 
          <'\tprintf "\\n%s\\n" "something with an ASCII NUL (Q)" >expect.message &&\n'> <'\tprintf "%s\\n" "helQo" >expect.hello1 &&\n'> <'\tprintf "%s\\n" "link hello" >expect.hello2 &&\n'> 
          <'\t{\n'> <'\t\tproperties svn:log "something with an ASCII NUL (Q)" &&\n'> <'\t\techo PROPS-END\n'> <'\t} |\n'> 
          <'\tq_to_nul >props &&\n'> <'\t{\n'> <'\t\tq_to_nul <<-\\EOF &&\n'> <'\t\tSVN-fs-dump-format-version: 3\n'> <'\n'> 
          <'\t\tRevision-number: 1\n'> <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> <'\t\tPROPS-END\n'> <'\n'> 
          <'\t\tNode-path: greeting\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> <'\t\tProp-content-length: 10\n'> 
          <'\t\tText-content-length: 6\n'> <'\t\tContent-length: 16\n'> <'\n'> <'\t\tPROPS-END\n'> <'\t\thelQo\n'> <'\n'> 
          <'\t\tRevision-number: 2\n'> <'\t\tEOF\n'> <'\t\techo Prop-content-length: $(wc -c <props) &&\n'> 
          <'\t\techo Content-length: $(wc -c <props) &&\n'> <'\t\techo &&\n'> <'\t\tcat props &&\n'> <'\t\tq_to_nul <<-\\EOF\n'> <'\n'> <'\t\tNode-path: greeting\n'> 
          <'\t\tNode-kind: file\n'> <'\t\tNode-action: change\n'> <'\t\tProp-content-length: 43\n'> <'\t\tText-content-length: 11\n'> 
          <'\t\tContent-length: 54\n'> <'\n'> <'\t\tK 21\n'> <'\t\tsvn:specialQnotreally\n'> <'\t\tV 1\n'> <'\t\t*\n'> <'\t\tPROPS-END\n'> 
          <'\t\tlink hello\n'> <'\t\tEOF\n'> <'\t} >8bitclean.dump &&\n'> <'\ttry_dump 8bitclean.dump &&\n'> <'\t{\n'> 
          <'\t\tgit rev-list HEAD |\n'> <'\t\tgit diff-tree --root --stdin |\n'> <'\t\tsed "s/$_x40/OBJID/g"\n'> <'\t} >actual &&\n'> <'\t{\n'> 
          <'\t\tgit cat-file commit HEAD | nul_to_q &&\n'> <'\t\techo\n'> <'\t} |\n'> <'\tsed -ne "/^\\$/,\\$ p" >actual.message &&\n'> 
          <'\tgit cat-file blob HEAD^:greeting | nul_to_q >actual.hello1 &&\n'> <'\tgit cat-file blob HEAD:greeting | nul_to_q >actual.hello2 &&\n'> <'\ttest_cmp expect actual &&\n'> 
          <'\ttest_cmp expect.message actual.message &&\n'> <'\ttest_cmp expect.hello1 actual.hello1 &&\n'> <'\ttest_cmp expect.hello2 actual.hello2\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'change file mode and reiterate content'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tOBJID\n'> 
          <'\t:120000 100644 OBJID OBJID T\tgreeting\n'> <'\tOBJID\n'> <'\t:100644 120000 OBJID OBJID T\tgreeting\n'> <'\tOBJID\n'> 
          <'\t:000000 100644 OBJID OBJID A\tgreeting\n'> <'\tEOF\n'> <'\techo "link hello" >expect.blob &&\n'> <'\techo hello >hello &&\n'> 
          <'\tcat >filemode2.dump <<-\\EOF &&\n'> <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\tRevision-number: 1\n'> <'\tProp-content-length: 10\n'> 
          <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> <'\tNode-path: greeting\n'> <'\tNode-kind: file\n'> 
          <'\tNode-action: add\n'> <'\tProp-content-length: 10\n'> <'\tText-content-length: 11\n'> <'\tContent-length: 21\n'> <'\n'> 
          <'\tPROPS-END\n'> <'\tlink hello\n'> <'\n'> <'\tRevision-number: 2\n'> <'\tProp-content-length: 10\n'> 
          <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> <'\tNode-path: greeting\n'> <'\tNode-kind: file\n'> 
          <'\tNode-action: change\n'> <'\tProp-content-length: 33\n'> <'\tText-content-length: 11\n'> <'\tContent-length: 44\n'> <'\n'> 
          <'\tK 11\n'> <'\tsvn:special\n'> <'\tV 1\n'> <'\t*\n'> <'\tPROPS-END\n'> <'\tlink hello\n'> <'\n'> 
          <'\tRevision-number: 3\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> 
          <'\tNode-path: greeting\n'> <'\tNode-kind: file\n'> <'\tNode-action: change\n'> <'\tProp-content-length: 10\n'> 
          <'\tText-content-length: 11\n'> <'\tContent-length: 21\n'> <'\n'> <'\tPROPS-END\n'> <'\tlink hello\n'> <'\tEOF\n'> 
          <'\ttry_dump filemode2.dump &&\n'> <'\t{\n'> <'\t\tgit rev-list HEAD |\n'> <'\t\tgit diff-tree --root --stdin |\n'> 
          <'\t\tsed "s/$_x40/OBJID/g"\n'> <'\t} >actual &&\n'> <'\tgit show HEAD:greeting >actual.blob &&\n'> 
          <'\tgit show HEAD^:greeting >actual.target &&\n'> <'\ttest_cmp expect actual &&\n'> <'\ttest_cmp expect.blob actual.blob &&\n'> 
          <'\ttest_cmp hello actual.target\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'deltas supported'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\t{\n'> <'\t\t# (old) h + (inline) ello + (old) \\n\n'> 
          <'\t\tprintf "SVNQ%b%b%s" "Q\\003\\006\\005\\004" "\\001Q\\0204\\001\\002" "ello" |\n'> <'\t\tq_to_nul\n'> <'\t} >delta &&\n'> <'\t{\n'> <'\t\tproperties \\\n'> 
          <'\t\t\tsvn:author author@example.com \\\n'> <'\t\t\tsvn:date "1999-01-05T00:01:002.000000Z" \\\n'> <'\t\t\tsvn:log "add greeting" &&\n'> 
          <'\t\techo PROPS-END\n'> <'\t} >props &&\n'> <'\t{\n'> <'\t\tproperties \\\n'> <'\t\t\tsvn:author author@example.com \\\n'> 
          <'\t\t\tsvn:date "1999-01-06T00:01:002.000000Z" \\\n'> <'\t\t\tsvn:log "change it" &&\n'> <'\t\techo PROPS-END\n'> <'\t} >props2 &&\n'> <'\t{\n'> 
          <'\t\techo SVN-fs-dump-format-version: 3 &&\n'> <'\t\techo &&\n'> <'\t\techo Revision-number: 1 &&\n'> 
          <'\t\techo Prop-content-length: $(wc -c <props) &&\n'> <'\t\techo Content-length: $(wc -c <props) &&\n'> <'\t\techo &&\n'> <'\t\tcat props &&\n'> 
          <'\t\tcat <<-\\EOF &&\n'> <'\n'> <'\t\tNode-path: hello\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> 
          <'\t\tProp-content-length: 10\n'> <'\t\tText-content-length: 3\n'> <'\t\tContent-length: 13\n'> <'\n'> <'\t\tPROPS-END\n'> <'\t\thi\n'> 
          <'\n'> <'\t\tEOF\n'> <'\t\techo Revision-number: 2 &&\n'> 
          <'\t\techo Prop-content-length: $(wc -c <props2) &&\n'> <'\t\techo Content-length: $(wc -c <props2) &&\n'> <'\t\techo &&\n'> <'\t\tcat props2 &&\n'> 
          <'\t\tcat <<-\\EOF &&\n'> <'\n'> <'\t\tNode-path: hello\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: change\n'> 
          <'\t\tText-delta: true\n'> <'\t\tProp-content-length: 10\n'> <'\t\tEOF\n'> <'\t\techo Text-content-length: $(wc -c <delta) &&\n'> 
          <'\t\techo Content-length: $((10 + $(wc -c <delta))) &&\n'> <'\t\techo &&\n'> <'\t\techo PROPS-END &&\n'> <'\t\tcat delta\n'> <'\t} >delta.dump &&\n'> 
          <'\ttry_dump delta.dump\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'property deltas supported'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tOBJID\n'> 
          <'\t:100755 100644 OBJID OBJID M\tscript.sh\n'> <'\tEOF\n'> <'\t{\n'> <'\t\tproperties \\\n'> <'\t\t\tsvn:author author@example.com \\\n'> 
          <'\t\t\tsvn:date "1999-03-06T00:01:002.000000Z" \\\n'> <'\t\t\tsvn:log "make an executable, or chmod -x it" &&\n'> <'\t\techo PROPS-END\n'> 
          <'\t} >revprops &&\n'> <'\t{\n'> <'\t\techo SVN-fs-dump-format-version: 3 &&\n'> <'\t\techo &&\n'> 
          <'\t\techo Revision-number: 1 &&\n'> <'\t\techo Prop-content-length: $(wc -c <revprops) &&\n'> 
          <'\t\techo Content-length: $(wc -c <revprops) &&\n'> <'\t\techo &&\n'> <'\t\tcat revprops &&\n'> <'\t\techo &&\n'> <'\t\tcat <<-\\EOF &&\n'> 
          <'\t\tNode-path: script.sh\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> <'\t\tText-content-length: 0\n'> 
          <'\t\tProp-content-length: 39\n'> <'\t\tContent-length: 39\n'> <'\n'> <'\t\tK 14\n'> <'\t\tsvn:executable\n'> <'\t\tV 4\n'> <'\t\ttrue\n'> 
          <'\t\tPROPS-END\n'> <'\n'> <'\t\tEOF\n'> <'\t\techo Revision-number: 2 &&\n'> 
          <'\t\techo Prop-content-length: $(wc -c <revprops) &&\n'> <'\t\techo Content-length: $(wc -c <revprops) &&\n'> <'\t\techo &&\n'> <'\t\tcat revprops &&\n'> 
          <'\t\techo &&\n'> <'\t\tcat <<-\\EOF\n'> <'\t\tNode-path: script.sh\n'> <'\t\tNode-kind: file\n'> 
          <'\t\tNode-action: change\n'> <'\t\tProp-delta: true\n'> <'\t\tProp-content-length: 30\n'> <'\t\tContent-length: 30\n'> <'\n'> 
          <'\t\tD 14\n'> <'\t\tsvn:executable\n'> <'\t\tPROPS-END\n'> <'\t\tEOF\n'> <'\t} >propdelta.dump &&\n'> 
          <'\ttry_dump propdelta.dump &&\n'> <'\t{\n'> <'\t\tgit rev-list HEAD |\n'> <'\t\tgit diff-tree --stdin |\n'> 
          <'\t\tsed "s/$_x40/OBJID/g"\n'> <'\t} >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'properties on /'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat <<-\\EOF >expect &&\n'> <'\tOBJID\n'> <'\tOBJID\n'> 
          <'\t:000000 100644 OBJID OBJID A\tgreeting\n'> <'\tEOF\n'> <'\tsed -e "s/X$//" <<-\\EOF >changeroot.dump &&\n'> <'\tSVN-fs-dump-format-version: 3\n'> 
          <'\n'> <'\tRevision-number: 1\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> 
          <'\tPROPS-END\n'> <'\n'> <'\tNode-path: greeting\n'> <'\tNode-kind: file\n'> <'\tNode-action: add\n'> 
          <'\tText-content-length: 0\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> 
          <'\tRevision-number: 2\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> 
          <'\tNode-path: X\n'> <'\tNode-kind: dir\n'> <'\tNode-action: change\n'> <'\tProp-delta: true\n'> 
          <'\tProp-content-length: 43\n'> <'\tContent-length: 43\n'> <'\n'> <'\tK 10\n'> <'\tsvn:ignore\n'> <'\tV 11\n'> <'\tbuild-area\n'> <'\n'> 
          <'\tPROPS-END\n'> <'\tEOF\n'> <'\ttry_dump changeroot.dump &&\n'> <'\t{\n'> <'\t\tgit rev-list HEAD |\n'> 
          <'\t\tgit diff-tree --root --always --stdin |\n'> <'\t\tsed "s/$_x40/OBJID/g"\n'> <'\t} >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'deltas for typechange'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tOBJID\n'> 
          <'\t:120000 100644 OBJID OBJID T\ttest-file\n'> <'\tOBJID\n'> <'\t:100755 120000 OBJID OBJID T\ttest-file\n'> <'\tOBJID\n'> 
          <'\t:000000 100755 OBJID OBJID A\ttest-file\n'> <'\tEOF\n'> <'\tcat >deleteprop.dump <<-\\EOF &&\n'> <'\tSVN-fs-dump-format-version: 3\n'> <'\n'> 
          <'\tRevision-number: 1\n'> <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> 
          <'\tNode-path: test-file\n'> <'\tNode-kind: file\n'> <'\tNode-action: add\n'> <'\tProp-delta: true\n'> 
          <'\tProp-content-length: 35\n'> <'\tText-content-length: 17\n'> <'\tContent-length: 52\n'> <'\n'> <'\tK 14\n'> <'\tsvn:executable\n'> 
          <'\tV 0\n'> <'\n'> <'\tPROPS-END\n'> <'\tlink testing 123\n'> <'\n'> <'\tRevision-number: 2\n'> 
          <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> <'\tNode-path: test-file\n'> 
          <'\tNode-kind: file\n'> <'\tNode-action: change\n'> <'\tProp-delta: true\n'> <'\tProp-content-length: 53\n'> 
          <'\tText-content-length: 17\n'> <'\tContent-length: 70\n'> <'\n'> <'\tK 11\n'> <'\tsvn:special\n'> <'\tV 1\n'> <'\t*\n'> <'\tD 14\n'> 
          <'\tsvn:executable\n'> <'\tPROPS-END\n'> <'\tlink testing 231\n'> <'\n'> <'\tRevision-number: 3\n'> 
          <'\tProp-content-length: 10\n'> <'\tContent-length: 10\n'> <'\n'> <'\tPROPS-END\n'> <'\n'> <'\tNode-path: test-file\n'> 
          <'\tNode-kind: file\n'> <'\tNode-action: change\n'> <'\tProp-delta: true\n'> <'\tProp-content-length: 27\n'> 
          <'\tText-content-length: 17\n'> <'\tContent-length: 44\n'> <'\n'> <'\tD 11\n'> <'\tsvn:special\n'> <'\tPROPS-END\n'> 
          <'\tlink testing 321\n'> <'\tEOF\n'> <'\ttry_dump deleteprop.dump &&\n'> <'\t{\n'> <'\t\tgit rev-list HEAD |\n'> 
          <'\t\tgit diff-tree --root --stdin |\n'> <'\t\tsed "s/$_x40/OBJID/g"\n'> <'\t} >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'deltas need not consume the whole preimage'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tOBJID\n'> 
          <'\t:120000 100644 OBJID OBJID T\tpostimage\n'> <'\tOBJID\n'> <'\t:100644 120000 OBJID OBJID T\tpostimage\n'> <'\tOBJID\n'> 
          <'\t:000000 100644 OBJID OBJID A\tpostimage\n'> <'\tEOF\n'> <'\techo "first preimage" >expect.1 &&\n'> <'\tprintf target >expect.2 &&\n'> 
          <'\tprintf lnk >expect.3 &&\n'> <'\t{\n'> <'\t\tprintf "SVNQ%b%b%b" "QQ\\017\\001\\017" "\\0217" "first preimage\\n" |\n'> 
          <'\t\tq_to_nul\n'> <'\t} >delta.1 &&\n'> <'\t{\n'> <'\t\tproperties svn:special "*" &&\n'> <'\t\techo PROPS-END\n'> 
          <'\t} >symlink.props &&\n'> <'\t{\n'> 
          <
'\t\tprintf "SVNQ%b%b%b" "Q\\002\\013\\004\\012" "\\0201\\001\\001\\0211" "lnk target" |\n'
          > <'\t\tq_to_nul\n'> <'\t} >delta.2 &&\n'> <'\t{\n'> 
          <'\t\tprintf "SVNQ%b%b" "Q\\004\\003\\004Q" "\\001Q\\002\\002" |\n'> <'\t\tq_to_nul\n'> <'\t} >delta.3 &&\n'> <'\t{\n'> <'\t\tcat <<-\\EOF &&\n'> 
          <'\t\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\t\tRevision-number: 1\n'> <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> 
          <'\t\tPROPS-END\n'> <'\n'> <'\t\tNode-path: postimage\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> 
          <'\t\tText-delta: true\n'> <'\t\tProp-content-length: 10\n'> <'\t\tEOF\n'> 
          <'\t\techo Text-content-length: $(wc -c <delta.1) &&\n'> <'\t\techo Content-length: $((10 + $(wc -c <delta.1))) &&\n'> <'\t\techo &&\n'> 
          <'\t\techo PROPS-END &&\n'> <'\t\tcat delta.1 &&\n'> <'\t\tcat <<-\\EOF &&\n'> <'\n'> <'\t\tRevision-number: 2\n'> 
          <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> <'\t\tPROPS-END\n'> <'\n'> <'\t\tNode-path: postimage\n'> 
          <'\t\tNode-kind: file\n'> <'\t\tNode-action: change\n'> <'\t\tText-delta: true\n'> <'\t\tEOF\n'> 
          <'\t\techo Prop-content-length: $(wc -c <symlink.props) &&\n'> <'\t\techo Text-content-length: $(wc -c <delta.2) &&\n'> 
          <'\t\techo Content-length: $(($(wc -c <symlink.props) + $(wc -c <delta.2))) &&\n'> <'\t\techo &&\n'> <'\t\tcat symlink.props &&\n'> <'\t\tcat delta.2 &&\n'> <'\t\tcat <<-\\EOF &&\n'> 
          <'\n'> <'\t\tRevision-number: 3\n'> <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> 
          <'\t\tPROPS-END\n'> <'\n'> <'\t\tNode-path: postimage\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: change\n'> 
          <'\t\tText-delta: true\n'> <'\t\tProp-content-length: 10\n'> <'\t\tEOF\n'> 
          <'\t\techo Text-content-length: $(wc -c <delta.3) &&\n'> <'\t\techo Content-length: $((10 + $(wc -c <delta.3))) &&\n'> <'\t\techo &&\n'> 
          <'\t\techo PROPS-END &&\n'> <'\t\tcat delta.3 &&\n'> <'\t\techo\n'> <'\t} >deltapartial.dump &&\n'> 
          <'\ttry_dump deltapartial.dump &&\n'> <'\t{\n'> <'\t\tgit rev-list HEAD |\n'> <'\t\tgit diff-tree --root --stdin |\n'> 
          <'\t\tsed "s/$_x40/OBJID/g"\n'> <'\t} >actual &&\n'> <'\ttest_cmp expect actual &&\n'> <'\tgit show HEAD:postimage >actual.3 &&\n'> 
          <'\tgit show HEAD^:postimage >actual.2 &&\n'> <'\tgit show HEAD^^:postimage >actual.1 &&\n'> <'\ttest_cmp expect.1 actual.1 &&\n'> 
          <'\ttest_cmp expect.2 actual.2 &&\n'> <'\ttest_cmp expect.3 actual.3\n'>
        )
      }
    )
    (C {<test_expect_success>} {<PIPE>} {(SQ <'no hang for delta trying to read past end of preimage'>)} 
      {
        (SQ <'\n'> <'\treinit_git &&\n'> <'\t{\n'> <'\t\t# COPY 1\n'> 
          <'\t\tprintf "SVNQ%b%b" "Q\\001\\001\\002Q" "\\001Q" |\n'> <'\t\tq_to_nul\n'> <'\t} >greedy.delta &&\n'> <'\t{\n'> <'\t\tcat <<-\\EOF &&\n'> 
          <'\t\tSVN-fs-dump-format-version: 3\n'> <'\n'> <'\t\tRevision-number: 1\n'> <'\t\tProp-content-length: 10\n'> <'\t\tContent-length: 10\n'> <'\n'> 
          <'\t\tPROPS-END\n'> <'\n'> <'\t\tNode-path: bootstrap\n'> <'\t\tNode-kind: file\n'> <'\t\tNode-action: add\n'> 
          <'\t\tText-delta: true\n'> <'\t\tProp-content-length: 10\n'> <'\t\tEOF\n'> 
          <'\t\techo Text-content-length: $(wc -c <greedy.delta) &&\n'> <'\t\techo Content-length: $((10 + $(wc -c <greedy.delta))) &&\n'> <'\t\techo &&\n'> 
          <'\t\techo PROPS-END &&\n'> <'\t\tcat greedy.delta &&\n'> <'\t\techo\n'> <'\t} >greedydelta.dump &&\n'> 
          <'\ttry_dump greedydelta.dump must_fail might_fail\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'set up svn repo'>)} 
      {
        (SQ <'\n'> <'\tsvnconf=$PWD/svnconf &&\n'> <'\tmkdir -p "$svnconf" &&\n'> <'\n'> <'\tif\n'> 
          <'\t\tsvnadmin -h >/dev/null 2>&1 &&\n'> <'\t\tsvnadmin create simple-svn &&\n'> 
          <'\t\tsvnadmin load simple-svn <"$TEST_DIRECTORY/t9135/svn.dump" &&\n'> <'\t\tsvn export --config-dir "$svnconf" "file://$PWD/simple-svn" simple-svnco\n'> <'\tthen\n'> 
          <'\t\ttest_set_prereq SVNREPO\n'> <'\tfi\n'>
        )
      }
    )
    (C {<test_expect_success>} {<SVNREPO> <Id.Lit_Comma ','> <PIPE>} {(SQ <'t9135/svn.dump'>)} 
      {
        (SQ <'\n'> <'\tmkdir -p simple-git &&\n'> <'\t(\n'> <'\t\tcd simple-git &&\n'> 
          <'\t\treinit_git &&\n'> <'\t\ttry_dump "$TEST_DIRECTORY/t9135/svn.dump"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd simple-svnco &&\n'> 
          <'\t\tgit init &&\n'> <'\t\tgit add . &&\n'> <'\t\tgit fetch ../simple-git master &&\n'> 
          <'\t\tgit diff --exit-code FETCH_HEAD\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)