(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:'fetch/receive strict mode' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:19) 
          (Token id:Id.Lit_Chars val:'\techo hello >greetings &&\n' span_id:20) (Token id:Id.Lit_Chars val:'\tgit add greetings &&\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m greetings &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\n' span_id:23) 
          (Token
            id: Id.Lit_Chars
            val: '\tS=$(git rev-parse :greetings | sed -e "s|^..|&/|") &&\n'
            span_id: 24
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tX=$(echo bye | git hash-object -w --stdin | sed -e "s|^..|&/|") &&\n'
            span_id: 25
          ) (Token id:Id.Lit_Chars val:'\tmv -f .git/objects/$X .git/objects/$S &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\n' span_id:27) (Token id:Id.Lit_Chars val:'\ttest_must_fail git fsck\n' span_id:28)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fetch without strict' span_id:35))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:42) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:43) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config fetch.fsckobjects false &&\n'
            span_id: 44
          ) (Token id:Id.Lit_Chars val:'\t\tgit config transfer.fsckobjects false &&\n' span_id:45) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git fetch ../.git master\n'
            span_id: 46
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:47)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch with !fetch.fsckobjects' span_id:54))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:61) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:62) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config fetch.fsckobjects false &&\n'
            span_id: 63
          ) (Token id:Id.Lit_Chars val:'\t\tgit config transfer.fsckobjects true &&\n' span_id:64) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git fetch ../.git master\n'
            span_id: 65
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:66)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch with fetch.fsckobjects' span_id:73))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:80) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config fetch.fsckobjects true &&\n'
            span_id: 82
          ) (Token id:Id.Lit_Chars val:'\t\tgit config transfer.fsckobjects false &&\n' span_id:83) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git fetch ../.git master\n'
            span_id: 84
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:85)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch with transfer.fsckobjects' span_id:92))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:100) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config transfer.fsckobjects true &&\n'
            span_id: 101
          ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git fetch ../.git master\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:103)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:109) fd:-1 arg_word:{(exp)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:112)
          fd: -1
          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 (Token id:Id.Lit_Chars val:'push without strict' span_id:123))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:130) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:131) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config fetch.fsckobjects false &&\n'
            span_id: 132
          ) (Token id:Id.Lit_Chars val:'\t\tgit config transfer.fsckobjects false\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'
            span_id: 135
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp exp act\n' span_id:136)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push with !receive.fsckobjects' span_id:143))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:150) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config receive.fsckobjects false &&\n'
            span_id: 152
          ) (Token id:Id.Lit_Chars val:'\t\tgit config transfer.fsckobjects true\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp exp act\n' span_id:156)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:162) fd:-1 arg_word:{(exp)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:165)
          fd: -1
          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 (Token id:Id.Lit_Chars val:'push with receive.fsckobjects' span_id:176))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:183) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:184) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config receive.fsckobjects true &&\n'
            span_id: 185
          ) (Token id:Id.Lit_Chars val:'\t\tgit config transfer.fsckobjects false\n' span_id:186) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:187) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'
            span_id: 188
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp exp act\n' span_id:189)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push with transfer.fsckobjects' span_id:196))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:202) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:203) (Token id:Id.Lit_Chars val:'\t\tcd dst &&\n' span_id:204) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit config transfer.fsckobjects true\n'
            span_id: 205
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:206) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git push --porcelain dst master:refs/heads/test >act &&\n'
            span_id: 207
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp exp act\n' span_id:208)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:214)
          fd: -1
          arg_word: {(bogus-commit)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:217)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push with receive.fsck.skipList' span_id:233))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:237) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit="$(git hash-object -t commit -w --stdin <bogus-commit)" &&\n'
            span_id: 238
          ) (Token id:Id.Lit_Chars val:'\tgit push . $commit:refs/heads/bogus &&\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:240) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:241) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=dst/.git config receive.fsckObjects true &&\n'
            span_id: 242
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git push --porcelain dst bogus &&\n' span_id:243) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=dst/.git config receive.fsck.skipList SKIP &&\n'
            span_id: 244
          ) (Token id:Id.Lit_Chars val:'\techo $commit >dst/.git/SKIP &&\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\tgit push --porcelain dst bogus\n' span_id:246)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push with receive.fsck.missingEmail=warn' span_id:253))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:257) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit="$(git hash-object -t commit -w --stdin <bogus-commit)" &&\n'
            span_id: 258
          ) (Token id:Id.Lit_Chars val:'\tgit push . $commit:refs/heads/bogus &&\n' span_id:259) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:261) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=dst/.git config receive.fsckobjects true &&\n'
            span_id: 262
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git push --porcelain dst bogus &&\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\tgit --git-dir=dst/.git config \\\n' span_id:264) (Token id:Id.Lit_Chars val:'\t\treceive.fsck.missingEmail warn &&\n' span_id:265) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push --porcelain dst bogus >act 2>&1 &&\n'
            span_id: 266
          ) (Token id:Id.Lit_Chars val:'\tgrep "missingEmail" act &&\n' span_id:267) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=dst/.git branch -D bogus &&\n'
            span_id: 268
          ) (Token id:Id.Lit_Chars val:'\tgit --git-dir=dst/.git config --add \\\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: '\t\treceive.fsck.missingEmail ignore &&\n'
            span_id: 270
          ) (Token id:Id.Lit_Chars val:'\tgit --git-dir=dst/.git config --add \\\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\t\treceive.fsck.badDate warn &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\tgit push --porcelain dst bogus >act 2>&1 &&\n' span_id:273) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail grep "missingEmail" act\n'
            span_id: 274
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'receive.fsck.unterminatedHeader=warn triggers error'
            span_id: 283
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:287) 
          (Token id:Id.Lit_Chars val:'\trm -rf dst &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit init dst &&\n' span_id:289) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=dst/.git config receive.fsckobjects true &&\n'
            span_id: 290
          ) (Token id:Id.Lit_Chars val:'\tgit --git-dir=dst/.git config \\\n' span_id:291) 
          (Token
            id: Id.Lit_Chars
            val: '\t\treceive.fsck.unterminatedheader warn &&\n'
            span_id: 292
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git push --porcelain dst HEAD >act 2>&1 &&\n'
            span_id: 293
          ) (Token id:Id.Lit_Chars val:'\tgrep "Cannot demote unterminatedheader" act\n' span_id:294)
        )
      }
    )
    (C {(test_done)})
  ]
)