(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'fetch/receive strict mode'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {<setup>} 
      {
        (SQ <'\n'> <'\techo hello >greetings &&\n'> <'\tgit add greetings &&\n'> 
          <'\tgit commit -m greetings &&\n'> <'\n'> <'\tS=$(git rev-parse :greetings | sed -e "s|^..|&/|") &&\n'> 
          <'\tX=$(echo bye | git hash-object -w --stdin | sed -e "s|^..|&/|") &&\n'> <'\tmv -f .git/objects/$X .git/objects/$S &&\n'> <'\n'> <'\ttest_must_fail git fsck\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'fetch without strict'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config fetch.fsckobjects false &&\n'> <'\t\tgit config transfer.fsckobjects false &&\n'> <'\t\ttest_must_fail git fetch ../.git master\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'fetch with !fetch.fsckobjects'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config fetch.fsckobjects false &&\n'> <'\t\tgit config transfer.fsckobjects true &&\n'> <'\t\ttest_must_fail git fetch ../.git master\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'fetch with fetch.fsckobjects'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config fetch.fsckobjects true &&\n'> <'\t\tgit config transfer.fsckobjects false &&\n'> <'\t\ttest_must_fail git fetch ../.git master\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'fetch with transfer.fsckobjects'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config transfer.fsckobjects true &&\n'> <'\t\ttest_must_fail git fetch ../.git master\n'> <'\t)\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<exp>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 118
              stdin_parts: [
                <'To dst\n'>
                <
'!\trefs/heads/master:refs/heads/test\t[remote rejected] (missing necessary objects)\n'
                >
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'push without strict'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config fetch.fsckobjects false &&\n'> <'\t\tgit config transfer.fsckobjects false\n'> <'\t) &&\n'> 
          <'\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'> <'\ttest_cmp exp act\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'push with !receive.fsckobjects'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config receive.fsckobjects false &&\n'> <'\t\tgit config transfer.fsckobjects true\n'> <'\t) &&\n'> 
          <'\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'> <'\ttest_cmp exp act\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<exp>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 171
              stdin_parts: [
                <'To dst\n'>
                <'!\trefs/heads/master:refs/heads/test\t[remote rejected] (unpacker error)\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'push with receive.fsckobjects'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config receive.fsckobjects true &&\n'> <'\t\tgit config transfer.fsckobjects false\n'> <'\t) &&\n'> 
          <'\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'> <'\ttest_cmp exp act\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'push with transfer.fsckobjects'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> 
          <'\t\tgit config transfer.fsckobjects true\n'> <'\t) &&\n'> <'\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'> 
          <'\ttest_cmp exp act\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<bogus-commit>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 228
              stdin_parts: [
                <'tree '>
                ($ Id.VSub_DollarName '$EMPTY_TREE')
                <'\n'>
                <'author Bugs Bunny 1234567890 +0000\n'>
                <'committer Bugs Bunny <bugs@bun.ni> 1234567890 +0000\n'>
                <'\n'>
                <'This commit object intentionally broken\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'push with receive.fsck.skipList'>)} 
      {
        (SQ <'\n'> <'\tcommit="$(git hash-object -t commit -w --stdin <bogus-commit)" &&\n'> 
          <'\tgit push . $commit:refs/heads/bogus &&\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> 
          <'\tgit --git-dir=dst/.git config receive.fsckObjects true &&\n'> <'\ttest_must_fail git push --porcelain dst bogus &&\n'> 
          <'\tgit --git-dir=dst/.git config receive.fsck.skipList SKIP &&\n'> <'\techo $commit >dst/.git/SKIP &&\n'> <'\tgit push --porcelain dst bogus\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'push with receive.fsck.missingEmail=warn'>)} 
      {
        (SQ <'\n'> <'\tcommit="$(git hash-object -t commit -w --stdin <bogus-commit)" &&\n'> 
          <'\tgit push . $commit:refs/heads/bogus &&\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> 
          <'\tgit --git-dir=dst/.git config receive.fsckobjects true &&\n'> <'\ttest_must_fail git push --porcelain dst bogus &&\n'> <'\tgit --git-dir=dst/.git config \\\n'> 
          <'\t\treceive.fsck.missingEmail warn &&\n'> <'\tgit push --porcelain dst bogus >act 2>&1 &&\n'> <'\tgrep "missingEmail" act &&\n'> 
          <'\tgit --git-dir=dst/.git branch -D bogus &&\n'> <'\tgit --git-dir=dst/.git config --add \\\n'> <'\t\treceive.fsck.missingEmail ignore &&\n'> 
          <'\tgit --git-dir=dst/.git config --add \\\n'> <'\t\treceive.fsck.badDate warn &&\n'> <'\tgit push --porcelain dst bogus >act 2>&1 &&\n'> 
          <'\ttest_must_fail grep "missingEmail" act\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'receive.fsck.unterminatedHeader=warn triggers error'>)} 
      {
        (SQ <'\n'> <'\trm -rf dst &&\n'> <'\tgit init dst &&\n'> 
          <'\tgit --git-dir=dst/.git config receive.fsckobjects true &&\n'> <'\tgit --git-dir=dst/.git config \\\n'> <'\t\treceive.fsck.unterminatedheader warn &&\n'> 
          <'\ttest_must_fail git push --porcelain dst HEAD >act 2>&1 &&\n'> <'\tgrep "Cannot demote unterminatedheader" act\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)