(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_id:Redir_Great fd:-1 arg_word:{(exp)} spids:[109])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("To dst\n") 
                (
"!\trefs/heads/master:refs/heads/test\t[remote rejected] (missing necessary objects)\n"
                )
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [112]
        )
      ]
    )
    (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_id:Redir_Great fd:-1 arg_word:{(exp)} spids:[160])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("To dst\n") 
                ("!\trefs/heads/master:refs/heads/test\t[remote rejected] (unpacker error)\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [163]
        )
      ]
    )
    (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_id:Redir_Great fd:-1 arg_word:{(bogus-commit)} spids:[210])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("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")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [213]
        )
      ]
    )
    (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)})
  ]
)