(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'per-repo forced setting of email address'>)}
          spids: [16]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <'setup a likely user.useConfigOnly use case'>)} 
      {
        (SQ <'\n'> <'\t# we want to make sure a reflog is written, since that needs\n'> 
          <'\t# a non-strict ident. So be sure we have an actual commit.\n'> <'\ttest_commit foo &&\n'> <'\n'> <'\tsane_unset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&\n'> 
          <'\tsane_unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL &&\n'> <'\tgit config user.name "test" &&\n'> <'\tgit config --global user.useConfigOnly true\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'fails committing if clone email is not set'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git commit --allow-empty -m msg\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'fails committing if clone email is not set, but EMAIL set'>)} 
      {(SQ <'\n'> <'\ttest_must_fail env EMAIL=test@fail.com git commit --allow-empty -m msg\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'succeeds committing if clone email is set'>)} 
      {
        (SQ <'\n'> <'\ttest_config user.email "test@ok.com" &&\n'> 
          <'\tgit commit --allow-empty -m msg\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'succeeds cloning if global email is not set'>)} 
      {(SQ <'\n'> <'\tgit clone . clone\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'set up rebase scenarios'>)} 
      {
        (SQ <'\n'> <'\t# temporarily enable an actual ident for this setup\n'> 
          <'\ttest_config user.email foo@example.com &&\n'> <'\ttest_commit new &&\n'> <'\tgit branch side-without-commit HEAD^ &&\n'> 
          <'\tgit checkout -b side-with-commit HEAD^ &&\n'> <'\ttest_commit side\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'fast-forward rebase does not care about ident'>)} 
      {(SQ <'\n'> <'\tgit checkout -B tmp side-without-commit &&\n'> <'\tgit rebase master\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'non-fast-forward rebase refuses to write commits'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "git rebase --abort || true" &&\n'> 
          <'\tgit checkout -B tmp side-with-commit &&\n'> <'\ttest_must_fail git rebase master\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'fast-forward rebase does not care about ident (interactive)'>)} 
      {(SQ <'\n'> <'\tgit checkout -B tmp side-without-commit &&\n'> <'\tgit rebase -i master\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'non-fast-forward rebase refuses to write commits (interactive)'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "git rebase --abort || true" &&\n'> 
          <'\tgit checkout -B tmp side-with-commit &&\n'> <'\ttest_must_fail git rebase -i master\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'noop interactive rebase does not care about ident'>)} 
      {(SQ <'\n'> <'\tgit checkout -B tmp side-with-commit &&\n'> <'\tgit rebase -i HEAD^\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'fast-forward rebase does not care about ident (preserve)'>)} 
      {(SQ <'\n'> <'\tgit checkout -B tmp side-without-commit &&\n'> <'\tgit rebase -p master\n'>)}
    )
    (C {<test_expect_success>} {(SQ <'non-fast-forward rebase refuses to write commits (preserve)'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "git rebase --abort || true" &&\n'> 
          <'\tgit checkout -B tmp side-with-commit &&\n'> <'\ttest_must_fail git rebase -p master\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)