(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'basic tests for fast-export --anonymize'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <'setup simple repo'>)} 
      {
        (SQ <'\n'> <'\ttest_commit base &&\n'> <'\ttest_commit foo &&\n'> 
          <'\tgit checkout -b other HEAD^ &&\n'> <'\tmkdir subdir &&\n'> <'\ttest_commit subdir/bar &&\n'> <'\ttest_commit subdir/xyzzy &&\n'> 
          <'\tgit tag -m "annotated tag" mytag\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'export anonymized stream'>)} 
      {(SQ <'\n'> <'\tgit fast-export --anonymize --all >stream\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'stream omits path names'>)} 
      {
        (SQ <'\n'> <'\t! grep base stream &&\n'> <'\t! grep foo stream &&\n'> 
          <'\t! grep subdir stream &&\n'> <'\t! grep bar stream &&\n'> <'\t! grep xyzzy stream\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'stream allows master as refname'>)} 
      {(SQ <'\n'> <'\tgrep master stream\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'stream omits other refnames'>)} 
      {(SQ <'\n'> <'\t! grep other stream &&\n'> <'\t! grep mytag stream\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'stream omits identities'>)} 
      {
        (SQ <'\n'> <'\t! grep "$GIT_COMMITTER_NAME" stream &&\n'> 
          <'\t! grep "$GIT_COMMITTER_EMAIL" stream &&\n'> <'\t! grep "$GIT_AUTHOR_NAME" stream &&\n'> <'\t! grep "$GIT_AUTHOR_EMAIL" stream\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'stream omits tag message'>)} 
      {(SQ <'\n'> <'\t! grep "annotated tag" stream\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'import stream to new repository'>)} 
      {(SQ <'\n'> <'\tgit init new &&\n'> <'\tcd new &&\n'> <'\tgit fast-import <../stream\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'result has two branches'>)} 
      {
        (SQ <'\n'> <'\tgit for-each-ref --format="%(refname)" refs/heads >branches &&\n'> 
          <'\ttest_line_count = 2 branches &&\n'> <'\tother_branch=$(grep -v refs/heads/master branches)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'repo has original shape and timestamps'>)} 
      {
        (SQ <'\n'> <'\tshape () {\n'> <'\t\tgit log --format="%m %ct" --left-right --boundary "$@"\n'> 
          <'\t} &&\n'> <'\t(cd .. && shape master...other) >expect &&\n'> <'\tshape master...$other_branch >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'root tree has original shape'>)} 
      {
        (SQ <'\n'> <'\t# the output entries are not necessarily in the same\n'> 
          <'\t# order, but we know at least that we will have one tree\n'> <'\t# and one blob, so just check the sorted order\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tblob\n'> 
          <'\ttree\n'> <'\tEOF\n'> <'\tgit ls-tree $other_branch >root &&\n'> <'\tcut -d" " -f2 <root | sort >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'paths in subdir ended up in one tree'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tblob\n'> <'\tblob\n'> <'\tEOF\n'> 
          <'\ttree=$(grep tree root | cut -f2) &&\n'> <'\tgit ls-tree $other_branch:$tree >tree &&\n'> <'\tcut -d" " -f2 <tree >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'tag points to branch tip'>)} 
      {
        (SQ <'\n'> <'\tgit rev-parse $other_branch >expect &&\n'> 
          <'\tgit for-each-ref --format="%(*objectname)" | grep . >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'idents are shared'>)} 
      {
        (SQ <'\n'> <'\tgit log --all --format="%an <%ae>" >authors &&\n'> 
          <'\tsort -u authors >unique &&\n'> <'\ttest_line_count = 1 unique &&\n'> <'\tgit log --all --format="%cn <%ce>" >committers &&\n'> 
          <'\tsort -u committers >unique &&\n'> <'\ttest_line_count = 1 unique &&\n'> <'\t! test_cmp authors committers\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)