(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'fetch/receive strict mode'>)}
          spids: [4]
        )
      ]
      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'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(exp)})
        (HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          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'
            )
          ]
        )
      ]
    )
    (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'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(exp)})
        (HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          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')
          ]
        )
      ]
    )
    (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'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(bogus-commit)})
        (HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          here_begin: {(EOF)}
          here_end_span_id: 228
          stdin_parts: [
            ('tree ')
            ($ VSub_Name '$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')
          ]
        )
      ]
    )
    (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)})
  ]
)