(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git blame textconv support'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: find_blame
      body: (BraceGroup children:[(C {(sed)} {(-e)} {(SQ <'s/^[^(]*//'>)})] spids:[18])
      spids: [14 17]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(helper)} spids:[34])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('#!/bin/sh\n') 
              (
'grep -q \'^bin: \' "$1" || { echo "E: $1 is not \\"binary\\" file" 1>&2; exit 1; }\n'
              ) ('"$PERL_PATH" -p -e \'s/^bin: /converted: /\' "$1"\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: T
          spids: [37]
        )
      ]
    )
    (C {(chmod)} {(Lit_Other '+') (x)} {(helper)})
    (C {(test_expect_success)} {(SQ <'setup '>)} 
      {
        (SQ <'\n'> <'\techo "bin: test number 0" >zero.bin &&\n'> 
          <'\techo "bin: test 1" >one.bin &&\n'> <'\techo "bin: test number 2" >two.bin &&\n'> <'\ttest_ln_s_add one.bin symlink.bin &&\n'> 
          <'\tgit add . &&\n'> <'\tGIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&\n'> 
          <'\techo "bin: test 1 version 2" >one.bin &&\n'> <'\techo "bin: test number 2 version 2" >>two.bin &&\n'> <'\trm -f symlink.bin &&\n'> 
          <'\ttest_ln_s_add two.bin symlink.bin &&\n'> <'\tGIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[74])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: {(DQ ('(Number2 2010-01-01 20:00:00 +0000 1) bin: test 1 version 2\n'))}
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [77]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'no filter specified'>)} 
      {
        (SQ <'\n'> <'\tgit blame one.bin >blame &&\n'> <'\tfind_blame Number2 <blame >result &&\n'> 
          <'\ttest_cmp expected result\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup textconv filters'>)} 
      {
        (SQ <'\n'> <'\techo "*.bin diff=test" >.gitattributes &&\n'> 
          <'\techo "zero.bin eol=crlf" >>.gitattributes &&\n'> <'\tgit config diff.test.textconv ./helper &&\n'> <'\tgit config diff.test.cachetextconv false\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'blame with --no-textconv'>)} 
      {
        (SQ <'\n'> <'\tgit blame --no-textconv one.bin >blame &&\n'> 
          <'\tfind_blame <blame> result &&\n'> <'\ttest_cmp expected result\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[128])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: {(DQ ('(Number2 2010-01-01 20:00:00 +0000 1) converted: test 1 version 2\n'))}
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [131]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'basic blame on last commit'>)} 
      {
        (SQ <'\n'> <'\tgit blame one.bin >blame &&\n'> <'\tfind_blame  <blame >result &&\n'> 
          <'\ttest_cmp expected result\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[153])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {
              (DQ ('(Number1 2010-01-01 18:00:00 +0000 1) converted: test number 2\n') 
                ('(Number2 2010-01-01 20:00:00 +0000 2) converted: test number 2 version 2\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [156]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'blame --textconv going through revisions'>)} 
      {
        (SQ <'\n'> <'\tgit blame --textconv two.bin >blame &&\n'> <'\tfind_blame <blame >result &&\n'> 
          <'\ttest_cmp expected result\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'blame --textconv with local changes'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "git checkout zero.bin" &&\n'> 
          <'\tprintf "bin: updated number 0\\015" >zero.bin &&\n'> <'\tgit blame --textconv zero.bin >blame &&\n'> 
          <'\texpect="(Not Committed Yet ....-..-.. ..:..:.. +0000 1)" &&\n'> <'\texpect="$expect converted: updated number 0" &&\n'> 
          <'\texpr "$(find_blame <blame)" : "^$expect"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup +cachetextconv'>)} 
      {(SQ <'\n'> <'\tgit config diff.test.cachetextconv true\n'>)}
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected_one)} spids:[208])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: {(DQ ('(Number2 2010-01-01 20:00:00 +0000 1) converted: test 1 version 2\n'))}
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [211]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'blame --textconv works with textconvcache'>)} 
      {
        (SQ <'\n'> <'\tgit blame --textconv two.bin >blame &&\n'> <'\tfind_blame <blame >result &&\n'> 
          <'\ttest_cmp expected result &&\n'> <'\tgit blame --textconv one.bin >blame &&\n'> <'\tfind_blame  <blame >result &&\n'> 
          <'\ttest_cmp expected_one result\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup -cachetextconv'>)} 
      {(SQ <'\n'> <'\tgit config diff.test.cachetextconv false\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'make a new commit'>)} 
      {
        (SQ <'\n'> <'\techo "bin: test number 2 version 3" >>two.bin &&\n'> 
          <'\tGIT_AUTHOR_NAME=Number3 git commit -a -m Third --date="2010-01-01 22:00:00"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'blame from previous revision'>)} 
      {
        (SQ <'\n'> <'\tgit blame HEAD^ two.bin >blame &&\n'> <'\tfind_blame <blame >result &&\n'> 
          <'\ttest_cmp expected result\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:16777215 arg_word:{(expected)} spids:[275])
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: {(DQ ('(Number2 2010-01-01 20:00:00 +0000 1) two.bin\n'))}
          do_expansion: True
          here_end: EOF
          was_filled: T
          spids: [278]
        )
      ]
    )
    (C {(test_expect_success)} {(SYMLINKS)} {(SQ <'blame with --no-textconv (on symlink)'>)} 
      {
        (SQ <'\n'> <'\tgit blame --no-textconv symlink.bin >blame &&\n'> 
          <'\tfind_blame <blame >result &&\n'> <'\ttest_cmp expected result\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} {(SQ <'blame --textconv (on symlink)'>)} 
      {
        (SQ <'\n'> <'\tgit blame --textconv symlink.bin >blame &&\n'> 
          <'\tfind_blame <blame >result &&\n'> <'\ttest_cmp expected result\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'make another new commit'>)} 
      {
        (SQ <'\n'> <'\tcat >three.bin <<\\EOF &&\n'> <'bin: test number 2\n'> 
          <'bin: test number 2 version 2\n'> <'bin: test number 2 version 3\n'> <'bin: test number 3\n'> <'EOF\n'> <'\tgit add three.bin &&\n'> 
          <'\tGIT_AUTHOR_NAME=Number4 git commit -a -m Fourth --date="2010-01-01 23:00:00"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'blame on last commit (-C -C, symlink)'>)} 
      {
        (SQ <'\n'> <'\tgit blame -C -C three.bin >blame &&\n'> <'\tfind_blame <blame >result &&\n'> 
          <'\tcat >expected <<\\EOF &&\n'> <'(Number1 2010-01-01 18:00:00 +0000 1) converted: test number 2\n'> 
          <'(Number2 2010-01-01 20:00:00 +0000 2) converted: test number 2 version 2\n'> <'(Number3 2010-01-01 22:00:00 +0000 3) converted: test number 2 version 3\n'> 
          <'(Number4 2010-01-01 23:00:00 +0000 4) converted: test number 3\n'> <'EOF\n'> <'\ttest_cmp expected result\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)