(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'check svn dumpfile importer'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: reinit_git
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(Pipeline children:[(C {(test_declared_prereq)} {(PIPE)})] negated:T)]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ('reinit_git: need to declare PIPE prerequisite'))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(4)} spids:[37])]
                    )
                    (ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {(127)}
                    )
                  ]
                  spids: [16777215 32]
                )
              ]
              spids: [16777215 50]
            )
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(rm)} {(-fr)} {(.git)})
                (C {(rm)} {(-f)} {(stream)} {(backflow)})
                (C {(git)} {(init)})
                (C {(mkfifo)} {(stream)} {(backflow)})
              ]
            )
          ]
          spids: [20]
        )
      spids: [15 19]
    )
    (FuncDef
      name: try_dump
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:input)
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [97]
                    )
                  ]
                  spids: [97]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:maybe_fail_svnfe)
                      op: Equal
                      rhs: 
                        {
                          (BracedVarSub
                            token: <VSub_Number 2>
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: {(test_) ($ VSub_Number '$2')}
                              )
                            spids: [104 109]
                          )
                        }
                      spids: [103]
                    )
                  ]
                  spids: [103]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:maybe_fail_fi)
                      op: Equal
                      rhs: 
                        {
                          (BracedVarSub
                            token: <VSub_Number 3>
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: {(test_) ($ VSub_Number '$3')}
                              )
                            spids: [115 120]
                          )
                        }
                      spids: [114]
                    )
                  ]
                  spids: [114]
                )
                (BraceGroup
                  children: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [
                            {($ VSub_Name '$maybe_fail_svnfe')}
                            {(test-svn-fe)}
                            {(DQ ($ VSub_Name '$input'))}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(stream)}
                              spids: [137]
                            )
                            (Redir
                              op_id: Redir_Less
                              fd: 3
                              arg_word: {(backflow)}
                              spids: [140]
                            )
                          ]
                        )
                      terminator: <Op_Amp '&'>
                    )
                  ]
                  spids: [126]
                )
                (SimpleCommand
                  words: [
                    {($ VSub_Name '$maybe_fail_fi')}
                    {(git)}
                    {(fast-import)}
                    {(--cat-blob-fd) (Lit_Other '=') (3)}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Less
                      fd: 16777215
                      arg_word: {(stream)}
                      spids: [161]
                    )
                    (Redir
                      op_id: Redir_Great
                      fd: 3
                      arg_word: {(backflow)}
                      spids: [164]
                    )
                  ]
                )
                (C {(wait)} {($ VSub_Bang '$!')})
              ]
            )
          ]
          spids: [94]
        )
      spids: [89 93]
    )
    (FuncDef
      name: properties
      body: 
        (BraceGroup
          children: [
            (While
              cond: [(C {(test)} {(DQ ($ VSub_Pound '$#'))} {(-ne)} {(0)})]
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DPipe]
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:property)
                              op: Equal
                              rhs: {(DQ ($ VSub_Number '$1'))}
                              spids: [201]
                            )
                          ]
                          spids: [201]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:value)
                              op: Equal
                              rhs: {(DQ ($ VSub_Number '$2'))}
                              spids: [209]
                            )
                          ]
                          spids: [209]
                        )
                        (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} 
                          {
                            (DQ ('K ') 
                              (BracedVarSub
                                token: <VSub_Name property>
                                prefix_op: VSub_Pound
                                spids: [227 230]
                              )
                            )
                          }
                        )
                        (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$property'))})
                        (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} 
                          {
                            (DQ ('V ') 
                              (BracedVarSub
                                token: <VSub_Name value>
                                prefix_op: VSub_Pound
                                spids: [261 264]
                              )
                            )
                          }
                        )
                        (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$value'))})
                        (C {(shift)} {(2)})
                        (ControlFlow
                          token: <ControlFlow_Return return>
                          arg_word: {(1)}
                        )
                      ]
                    )
                  ]
                  spids: [198 297]
                )
            )
          ]
          spids: [182]
        )
      spids: [177 181]
    )
    (FuncDef
      name: text_no_props
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:text)
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1') ('\n'))}
                      spids: [310]
                    )
                  ]
                  spids: [310]
                )
                (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ('Prop-content-length: 10'))})
                (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} 
                  {
                    (DQ ('Text-content-length: ') 
                      (BracedVarSub
                        token: <VSub_Name text>
                        prefix_op: VSub_Pound
                        spids: [344 347]
                      )
                    )
                  }
                )
                (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} 
                  {
                    (DQ ('Content-length: ') 
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: 
                              (ArithWord
                                w: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name text>
                                      prefix_op: VSub_Pound
                                      spids: [364 367]
                                    )
                                  }
                              )
                            right: (ArithWord w:{(Lit_Digits 10)})
                          )
                        spids: [363 373]
                      )
                    )
                  }
                )
                (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ )} {(DQ (PROPS-END))})
                (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_Name '$text'))})
              ]
            )
          ]
          spids: [307]
        )
      spids: [302 306]
    )
    (SimpleCommand
      redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(empty)} spids:[412])]
    )
    (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) (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)})
  ]
)