(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:unpack-objects span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token id:Id.Lit_Chars val:'\tmkdir pub.git &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\tGIT_DIR=pub.git git init --bare &&\n' span_id:22) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_DIR=pub.git git config receive.fsckobjects true &&\n'
            span_id: 23
          ) (Token id:Id.Lit_Chars val:'\tmkdir work &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:25) (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\t\tgit config push.default matching &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir -p gar/bage &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\t\t\tcd gar/bage &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\t\t\tgit init &&\n' span_id:32) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit config push.default matching &&\n'
            span_id: 33
          ) (Token id:Id.Lit_Chars val:'\t\t\t>junk &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add junk &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "Initial junk"\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:38) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Initial superproject"\n'
            span_id: 39
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:40)
        )
      }
    )
    (C {(test_expect_success)} {(push)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id:Id.Lit_Chars val:'\t(\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\t\tgit push ../pub.git master\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:53)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push if submodule has no remote' span_id:60))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:64) (Token id:Id.Lit_Chars val:'\t(\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\t\t>junk2 &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\t\tgit add junk2 &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Second junk"\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\t(\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:73) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Second commit for gar/bage" &&\n'
            span_id: 74
          ) (Token id:Id.Lit_Chars val:'\t\tgit push --recurse-submodules=check ../pub.git master\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:76)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push fails if submodule commit not on remote' span_id:83))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) (Token id:Id.Lit_Chars val:'\t(\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\t\tcd work/gar &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\t\tgit clone --bare bage ../../submodule.git &&\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\t\tcd bage &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\t\tgit remote add origin ../../../submodule.git &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\t\t>junk3 &&\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\t\tgit add junk3 &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Third junk"\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\t(\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:100) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Third commit for gar/bage" &&\n'
            span_id: 101
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# the push should fail with --recurse-submodules=check\n'
            span_id: 102
          ) (Token id:Id.Lit_Chars val:'\t\t# on the command line...\n' span_id:103) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git push --recurse-submodules=check ../pub.git master &&\n'
            span_id: 104
          ) (Token id:Id.Lit_Chars val:'\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# ...or if specified in the configuration..\n'
            span_id: 106
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git -c push.recurseSubmodules=check push ../pub.git master\n'
            span_id: 107
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:108)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push succeeds after commit was pushed to remote' span_id:115))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:120) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\t\tgit push origin master\n' span_id:122) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\t(\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\t\tgit push --recurse-submodules=check ../pub.git master\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:127)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'push succeeds if submodule commit not on remote but using on-demand on command line'
            span_id: 134
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:138) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:139) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:140) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t>recurse-on-demand-on-command-line &&\n'
            span_id: 141
          ) (Token id:Id.Lit_Chars val:'\t\tgit add recurse-on-demand-on-command-line &&\n' span_id:142) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse on-demand on command line junk"\n'
            span_id: 143
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\t(\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:147) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse on-demand on command line for gar/bage" &&\n'
            span_id: 148
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push --recurse-submodules=on-demand ../pub.git master &&\n'
            span_id: 149
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit got there\n' span_id:150) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master &&\n' span_id:152) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Check that the submodule commit got there too\n'
            span_id: 153
          ) (Token id:Id.Lit_Chars val:'\t\tcd gar/bage &&\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff --quiet origin/master master\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:156)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'push succeeds if submodule commit not on remote but using on-demand from config'
            span_id: 163
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\t\t>recurse-on-demand-from-config &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\tgit add recurse-on-demand-from-config &&\n' span_id:171) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse on-demand from config junk"\n'
            span_id: 172
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\t(\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:176) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse on-demand from config for gar/bage" &&\n'
            span_id: 177
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit -c push.recurseSubmodules=on-demand push ../pub.git master &&\n'
            span_id: 178
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit got there\n' span_id:179) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:180) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master &&\n' span_id:181) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Check that the submodule commit got there too\n'
            span_id: 182
          ) (Token id:Id.Lit_Chars val:'\t\tcd gar/bage &&\n' span_id:183) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff --quiet origin/master master\n'
            span_id: 184
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:185)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'push recurse-submodules on command line overrides config'
            span_id: 192
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:197) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:198) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t>recurse-check-on-command-line-overriding-config &&\n'
            span_id: 199
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit add recurse-check-on-command-line-overriding-config &&\n'
            span_id: 200
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse on command-line overriding config junk"\n'
            span_id: 201
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\t(\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:205) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse on command-line overriding config for gar/bage" &&\n'
            span_id: 206
          ) (Token id:Id.Lit_Chars val:'\n' span_id:207) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Ensure that we can override on-demand in the config\n'
            span_id: 208
          ) (Token id:Id.Lit_Chars val:'\t\t# to just check submodules\n' span_id:209) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\ttest_must_fail git -c push.recurseSubmodules=on-demand push --recurse-submodules=check ../pub.git master &&\n'
            span_id: 210
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit did not get there\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master^ &&\n' span_id:213) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Check that the submodule commit did not get there\n'
            span_id: 214
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master^) &&\n'
            span_id: 215
          ) (Token id:Id.Lit_Chars val:'\n' span_id:216) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Ensure that we can override check in the config to\n'
            span_id: 217
          ) (Token id:Id.Lit_Chars val:'\t\t# disable submodule recursion entirely\n' span_id:218) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master^) &&\n'
            span_id: 219
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -c push.recurseSubmodules=on-demand push --recurse-submodules=no ../pub.git master &&\n'
            span_id: 220
          ) (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:221) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff --quiet FETCH_HEAD master &&\n'
            span_id: 222
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master^) &&\n'
            span_id: 223
          ) (Token id:Id.Lit_Chars val:'\n' span_id:224) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Ensure that we can override check in the config to\n'
            span_id: 225
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# disable submodule recursion entirely (alternative form)\n'
            span_id: 226
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -c push.recurseSubmodules=on-demand push --no-recurse-submodules ../pub.git master &&\n'
            span_id: 227
          ) (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:228) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff --quiet FETCH_HEAD master &&\n'
            span_id: 229
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master^) &&\n'
            span_id: 230
          ) (Token id:Id.Lit_Chars val:'\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Ensure that we can override check in the config to\n'
            span_id: 232
          ) (Token id:Id.Lit_Chars val:'\t\t# push the submodule too\n' span_id:233) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -c push.recurseSubmodules=check push --recurse-submodules=on-demand ../pub.git master &&\n'
            span_id: 234
          ) (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:235) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff --quiet FETCH_HEAD master &&\n'
            span_id: 236
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master)\n'
            span_id: 237
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:238)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'push recurse-submodules last one wins on command line'
            span_id: 245
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:250) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:251) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t>recurse-check-on-command-line-overriding-earlier-command-line &&\n'
            span_id: 252
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit add recurse-check-on-command-line-overriding-earlier-command-line &&\n'
            span_id: 253
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse on command-line overridiing earlier command-line junk"\n'
            span_id: 254
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\t(\n' span_id:256) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:257) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:258) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse on command-line overriding earlier command-line for gar/bage" &&\n'
            span_id: 259
          ) (Token id:Id.Lit_Chars val:'\n' span_id:260) 
          (Token id:Id.Lit_Chars val:'\t\t# should result in "check"\n' span_id:261) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\ttest_must_fail git push --recurse-submodules=on-demand --recurse-submodules=check ../pub.git master &&\n'
            span_id: 262
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit did not get there\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master^ &&\n' span_id:265) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Check that the submodule commit did not get there\n'
            span_id: 266
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master^) &&\n'
            span_id: 267
          ) (Token id:Id.Lit_Chars val:'\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\t\t# should result in "no"\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit push --recurse-submodules=on-demand --recurse-submodules=no ../pub.git master &&\n'
            span_id: 270
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit did get there\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master &&\n' span_id:273) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Check that the submodule commit did not get there\n'
            span_id: 274
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master^) &&\n'
            span_id: 275
          ) (Token id:Id.Lit_Chars val:'\n' span_id:276) 
          (Token id:Id.Lit_Chars val:'\t\t# should result in "no"\n' span_id:277) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit push --recurse-submodules=on-demand --no-recurse-submodules ../pub.git master &&\n'
            span_id: 278
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the submodule commit did not get there\n' span_id:279) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master^) &&\n'
            span_id: 280
          ) (Token id:Id.Lit_Chars val:'\n' span_id:281) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# But the options in the other order should push the submodule\n'
            span_id: 282
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit push --recurse-submodules=check --recurse-submodules=on-demand ../pub.git master &&\n'
            span_id: 283
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the submodule commit did get there\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:285) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t(cd gar/bage && git diff --quiet origin/master master)\n'
            span_id: 286
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:287)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'push succeeds if submodule commit not on remote using on-demand from cmdline overriding config'
            span_id: 294
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:299) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:300) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t>recurse-on-demand-on-command-line-overriding-config &&\n'
            span_id: 301
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit add recurse-on-demand-on-command-line-overriding-config &&\n'
            span_id: 302
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse on-demand on command-line overriding config junk"\n'
            span_id: 303
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\t(\n' span_id:305) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:306) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:307) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse on-demand on command-line overriding config for gar/bage" &&\n'
            span_id: 308
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -c push.recurseSubmodules=check push --recurse-submodules=on-demand ../pub.git master &&\n'
            span_id: 309
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit got there\n' span_id:310) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:311) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master &&\n' span_id:312) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# Check that the submodule commit got there\n'
            span_id: 313
          ) (Token id:Id.Lit_Chars val:'\t\tcd gar/bage &&\n' span_id:314) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit diff --quiet origin/master master\n'
            span_id: 315
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:316)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'push succeeds if submodule commit disabling recursion from cmdline overriding config'
            span_id: 323
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:327) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:328) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:329) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t>recurse-disable-on-command-line-overriding-config &&\n'
            span_id: 330
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit add recurse-disable-on-command-line-overriding-config &&\n'
            span_id: 331
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Recurse disable on command-line overriding config junk"\n'
            span_id: 332
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:333) (Token id:Id.Lit_Chars val:'\t(\n' span_id:334) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:335) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:336) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse disable on command-line overriding config for gar/bage" &&\n'
            span_id: 337
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -c push.recurseSubmodules=check push --recurse-submodules=no ../pub.git master &&\n'
            span_id: 338
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit got there\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master &&\n' span_id:341) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# But that the submodule commit did not\n'
            span_id: 342
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t( cd gar/bage && git diff --quiet origin/master master^ ) &&\n'
            span_id: 343
          ) (Token id:Id.Lit_Chars val:'\t\t# Now push it to avoid confusing future tests\n' span_id:344) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push --recurse-submodules=on-demand ../pub.git master\n'
            span_id: 345
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:346)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'push succeeds if submodule commit disabling recursion from cmdline (alternative form) overriding config'
            span_id: 353
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:357) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:358) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:359) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t>recurse-disable-on-command-line-alt-overriding-config &&\n'
            span_id: 360
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit add recurse-disable-on-command-line-alt-overriding-config &&\n'
            span_id: 361
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse disable on command-line alternative overriding config junk"\n'
            span_id: 362
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\t(\n' span_id:364) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:366) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse disable on command-line alternative overriding config for gar/bage" &&\n'
            span_id: 367
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit -c push.recurseSubmodules=check push --no-recurse-submodules ../pub.git master &&\n'
            span_id: 368
          ) (Token id:Id.Lit_Chars val:'\t\t# Check that the supermodule commit got there\n' span_id:369) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch ../pub.git &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\t\tgit diff --quiet FETCH_HEAD master &&\n' span_id:371) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# But that the submodule commit did not\n'
            span_id: 372
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t( cd gar/bage && git diff --quiet origin/master master^ ) &&\n'
            span_id: 373
          ) (Token id:Id.Lit_Chars val:'\t\t# Now push it to avoid confusing future tests\n' span_id:374) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push --recurse-submodules=on-demand ../pub.git master\n'
            span_id: 375
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:376)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'push fails if recurse submodules option passed as yes'
            span_id: 383
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:387) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:388) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:389) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t>recurse-push-fails-if-recurse-submodules-passed-as-yes &&\n'
            span_id: 390
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit add recurse-push-fails-if-recurse-submodules-passed-as-yes &&\n'
            span_id: 391
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse push fails if recurse submodules option passed as yes"\n'
            span_id: 392
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\t(\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:396) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t\tgit commit -m "Recurse push fails if recurse submodules option passed as yes for gar/bage" &&\n'
            span_id: 397
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git push --recurse-submodules=yes ../pub.git master &&\n'
            span_id: 398
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git -c push.recurseSubmodules=yes push ../pub.git master &&\n'
            span_id: 399
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push --recurse-submodules=on-demand ../pub.git master\n'
            span_id: 400
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:401)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'push fails when commit on multiple branches if one branch has no remote'
            span_id: 408
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:412) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:413) (Token id:Id.Lit_Chars val:'\t\tcd work/gar/bage &&\n' span_id:414) 
          (Token id:Id.Lit_Chars val:'\t\t>junk4 &&\n' span_id:415) (Token id:Id.Lit_Chars val:'\t\tgit add junk4 &&\n' span_id:416) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Fourth junk"\n' span_id:417) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:418) (Token id:Id.Lit_Chars val:'\t(\n' span_id:419) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:420) (Token id:Id.Lit_Chars val:'\t\tgit branch branch2 &&\n' span_id:421) 
          (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Fourth commit for gar/bage" &&\n' span_id:423) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout branch2 &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:425) 
          (Token id:Id.Lit_Chars val:'\t\t\tcd gar/bage &&\n' span_id:426) (Token id:Id.Lit_Chars val:'\t\t\tgit checkout HEAD~1\n' span_id:427) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\t\t>junk1 &&\n' span_id:429) 
          (Token id:Id.Lit_Chars val:'\t\tgit add junk1 &&\n' span_id:430) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "First junk" &&\n' span_id:431) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git push --recurse-submodules=check ../pub.git\n'
            span_id: 432
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:433)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'push succeeds if submodule has no remote and is on the first superproject commit'
            span_id: 440
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\tgit init --bare a &&\n' span_id:445) (Token id:Id.Lit_Chars val:'\tgit clone a a1 &&\n' span_id:446) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:447) (Token id:Id.Lit_Chars val:'\t\tcd a1 &&\n' span_id:448) 
          (Token id:Id.Lit_Chars val:'\t\tgit init b\n' span_id:449) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:450) 
          (Token id:Id.Lit_Chars val:'\t\t\tcd b &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\t\t\t>junk &&\n' span_id:452) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add junk &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "initial"\n' span_id:454) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\t\tgit add b &&\n' span_id:456) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "added submodule" &&\n'
            span_id: 457
          ) (Token id:Id.Lit_Chars val:'\t\tgit push --recurse-submodule=check origin master\n' span_id:458) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:459)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push unpushed submodules when not needed' span_id:466))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:470) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:471) (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:472) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:473) (Token id:Id.Lit_Chars val:'\t\t\tcd gar/bage &&\n' span_id:474) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit checkout master &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\t\t\t>junk5 &&\n' span_id:476) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add junk5 &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "Fifth junk" &&\n' span_id:478) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit push &&\n' span_id:479) (Token id:Id.Lit_Chars val:'\t\t\tgit rev-parse origin/master >../../../expected\n' span_id:480) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:481) (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:482) 
          (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Fifth commit for gar/bage" &&\n' span_id:484) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push --recurse-submodules=on-demand ../pub.git master\n'
            span_id: 485
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\t(\n' span_id:487) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule.git &&\n' span_id:488) (Token id:Id.Lit_Chars val:'\t\tgit rev-parse master >../actual\n' span_id:489) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:490) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:491)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push unpushed submodules when not needed 2' span_id:498))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:502) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:503) (Token id:Id.Lit_Chars val:'\t\tcd submodule.git &&\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'\t\tgit rev-parse master >../expected\n' span_id:505) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:506) (Token id:Id.Lit_Chars val:'\t(\n' span_id:507) 
          (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:508) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:509) 
          (Token id:Id.Lit_Chars val:'\t\t\tcd gar/bage &&\n' span_id:510) (Token id:Id.Lit_Chars val:'\t\t\t>junk6 &&\n' span_id:511) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add junk6 &&\n' span_id:512) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "Sixth junk"\n' span_id:513) 
          (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:514) (Token id:Id.Lit_Chars val:'\t\t>junk2 &&\n' span_id:515) 
          (Token id:Id.Lit_Chars val:'\t\tgit add junk2 &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Second junk for work" &&\n' span_id:517) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push --recurse-submodules=on-demand ../pub.git master\n'
            span_id: 518
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:519) (Token id:Id.Lit_Chars val:'\t(\n' span_id:520) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule.git &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\t\tgit rev-parse master >../actual\n' span_id:522) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:523) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:524)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push unpushed submodules recursively' span_id:531))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:535) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:536) (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:537) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:538) (Token id:Id.Lit_Chars val:'\t\t\tcd gar/bage &&\n' span_id:539) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit checkout master &&\n' span_id:540) (Token id:Id.Lit_Chars val:'\t\t\t> junk7 &&\n' span_id:541) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit add junk7 &&\n' span_id:542) (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "Seventh junk" &&\n' span_id:543) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit rev-parse master >../../../expected\n'
            span_id: 544
          ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:545) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout master &&\n' span_id:546) (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:547) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit -m "Seventh commit for gar/bage" &&\n'
            span_id: 548
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit push --recurse-submodules=on-demand ../pub.git master\n'
            span_id: 549
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\t(\n' span_id:551) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule.git &&\n' span_id:552) (Token id:Id.Lit_Chars val:'\t\tgit rev-parse master >../actual\n' span_id:553) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:554) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:555)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push unpushable submodule recursively fails' span_id:562))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:566) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:567) (Token id:Id.Lit_Chars val:'\t\tcd work &&\n' span_id:568) 
          (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:569) (Token id:Id.Lit_Chars val:'\t\t\tcd gar/bage &&\n' span_id:570) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit rev-parse origin/master >../../../expected &&\n'
            span_id: 571
          ) (Token id:Id.Lit_Chars val:'\t\t\tgit checkout master~0 &&\n' span_id:572) 
          (Token id:Id.Lit_Chars val:'\t\t\t> junk8 &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\t\t\tgit add junk8 &&\n' span_id:574) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit commit -m "Eighth junk"\n' span_id:575) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:576) 
          (Token id:Id.Lit_Chars val:'\t\tgit add gar/bage &&\n' span_id:577) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "Eighth commit for gar/bage" &&\n' span_id:578) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git push --recurse-submodules=on-demand ../pub.git master\n'
            span_id: 579
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:580) (Token id:Id.Lit_Chars val:'\t(\n' span_id:581) 
          (Token id:Id.Lit_Chars val:'\t\tcd submodule.git &&\n' span_id:582) (Token id:Id.Lit_Chars val:'\t\tgit rev-parse master >../actual\n' span_id:583) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:584) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:585)
        )
      }
    )
    (C {(test_done)})
  ]
)