(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'per-repo forced setting of email address' span_id:18))}
          spids: [16]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup a likely user.useConfigOnly use case' span_id:30))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:34) 
          (Token
            id: Id.Lit_Chars
            val: '\t# we want to make sure a reflog is written, since that needs\n'
            span_id: 35
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# a non-strict ident. So be sure we have an actual commit.\n'
            span_id: 36
          ) (Token id:Id.Lit_Chars val:'\ttest_commit foo &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\n' span_id:38) (Token id:Id.Lit_Chars val:'\tsane_unset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL &&\n' span_id:39) 
          (Token
            id: Id.Lit_Chars
            val: '\tsane_unset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL &&\n'
            span_id: 40
          ) (Token id:Id.Lit_Chars val:'\tgit config user.name "test" &&\n' span_id:41) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --global user.useConfigOnly true\n'
            span_id: 42
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fails committing if clone email is not set' span_id:49))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git commit --allow-empty -m msg\n'
            span_id: 54
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fails committing if clone email is not set, but EMAIL set'
            span_id: 61
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail env EMAIL=test@fail.com git commit --allow-empty -m msg\n'
            span_id: 66
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'succeeds committing if clone email is set' span_id:73))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:77) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config user.email "test@ok.com" &&\n'
            span_id: 78
          ) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m msg\n' span_id:79)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'succeeds cloning if global email is not set' span_id:86))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tgit clone . clone\n' span_id:91)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up rebase scenarios' span_id:98))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:102) 
          (Token
            id: Id.Lit_Chars
            val: '\t# temporarily enable an actual ident for this setup\n'
            span_id: 103
          ) (Token id:Id.Lit_Chars val:'\ttest_config user.email foo@example.com &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\ttest_commit new &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tgit branch side-without-commit HEAD^ &&\n' span_id:106) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -b side-with-commit HEAD^ &&\n'
            span_id: 107
          ) (Token id:Id.Lit_Chars val:'\ttest_commit side\n' span_id:108)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fast-forward rebase does not care about ident' span_id:115))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -B tmp side-without-commit &&\n'
            span_id: 120
          ) (Token id:Id.Lit_Chars val:'\tgit rebase master\n' span_id:121)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'non-fast-forward rebase refuses to write commits'
            span_id: 128
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:132) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rebase --abort || true" &&\n'
            span_id: 133
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -B tmp side-with-commit &&\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase master\n' span_id:135)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fast-forward rebase does not care about ident (interactive)'
            span_id: 142
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -B tmp side-without-commit &&\n'
            span_id: 147
          ) (Token id:Id.Lit_Chars val:'\tgit rebase -i master\n' span_id:148)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'non-fast-forward rebase refuses to write commits (interactive)'
            span_id: 155
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:159) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rebase --abort || true" &&\n'
            span_id: 160
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -B tmp side-with-commit &&\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase -i master\n' span_id:162)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'noop interactive rebase does not care about ident'
            span_id: 169
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -B tmp side-with-commit &&\n'
            span_id: 174
          ) (Token id:Id.Lit_Chars val:'\tgit rebase -i HEAD^\n' span_id:175)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fast-forward rebase does not care about ident (preserve)'
            span_id: 182
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:186) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -B tmp side-without-commit &&\n'
            span_id: 187
          ) (Token id:Id.Lit_Chars val:'\tgit rebase -p master\n' span_id:188)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'non-fast-forward rebase refuses to write commits (preserve)'
            span_id: 195
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rebase --abort || true" &&\n'
            span_id: 200
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -B tmp side-with-commit &&\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase -p master\n' span_id:202)
        )
      }
    )
    (C {(test_done)})
  ]
)