(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/clone from a shallow clone' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: commit
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:28)
                      fd: -1
                      arg_word: {(tracked)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(tracked)})
                (C {(git)} {(commit)} {(-m)} {(DQ ($ Id.VSub_Number '$1'))})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:59))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tcommit 1 &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tcommit 2 &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tcommit 3 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tcommit 4 &&\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --global transfer.fsckObjects true\n'
            span_id: 68
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup shallow clone' span_id:75))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:79) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --no-local --depth=2 .git shallow &&\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\tgit --git-dir=shallow/.git log --format=%s >actual &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:82) (Token id:Id.Lit_Chars val:'4\n' span_id:83) (Token id:Id.Lit_Chars val:'3\n' span_id:84) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:85) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:86)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone from shallow clone' span_id:93))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:97) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --no-local shallow shallow2 &&\n'
            span_id: 98
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\tgit log --format=%s >actual &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'4\n' span_id:104) (Token id:Id.Lit_Chars val:'3\n' span_id:105) (Token id:Id.Lit_Chars val:'EOF\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\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:'fetch from shallow clone' 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:'\tcd shallow &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\tcommit 5\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:'\tcd shallow2 &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\tgit fetch &&\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\tgit log --format=%s origin/master >actual &&\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:129) (Token id:Id.Lit_Chars val:'5\n' span_id:130) (Token id:Id.Lit_Chars val:'4\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'3\n' span_id:132) (Token id:Id.Lit_Chars val:'EOF\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:134) (Token id:Id.Lit_Chars val:'\t)\n' span_id:135)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch --depth from shallow clone' span_id:142))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:147) (Token id:Id.Lit_Chars val:'\tcd shallow &&\n' span_id:148) 
          (Token id:Id.Lit_Chars val:'\tcommit 6\n' span_id:149) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\t(\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\tgit fetch --depth=2 &&\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit log --format=%s origin/master >actual &&\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:156) (Token id:Id.Lit_Chars val:'6\n' span_id:157) (Token id:Id.Lit_Chars val:'5\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:159) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:161)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch --unshallow from shallow clone' span_id:168))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:173) (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\tgit fetch --unshallow &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:176) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --format=%s origin/master >actual &&\n'
            span_id: 177
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'6\n' span_id:179) (Token id:Id.Lit_Chars val:'5\n' span_id:180) (Token id:Id.Lit_Chars val:'4\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'3\n' span_id:182) (Token id:Id.Lit_Chars val:'EOF\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\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: 'fetch something upstream has but hidden by clients shallow boundaries'
            span_id: 192
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) 
          (Token
            id: Id.Lit_Chars
            val: '\t# the blob "1" is available in .git but hidden by the\n'
            span_id: 197
          ) (Token id:Id.Lit_Chars val:'\t# shallow2/.git/shallow and it should be resent\n' span_id:198) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t! git --git-dir=shallow2/.git cat-file blob $(echo 1|git hash-object --stdin) >/dev/null &&\n'
            span_id: 199
          ) (Token id:Id.Lit_Chars val:'\techo 1 >1.t &&\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'\tgit add 1.t &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\tgit commit -m add-1-back &&\n' span_id:202) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:203) (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:204) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fetch ../.git +refs/heads/master:refs/remotes/top/master &&\n'
            span_id: 205
          ) (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:206) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --format=%s top/master >actual &&\n'
            span_id: 207
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:208) 
          (Token id:Id.Lit_Chars val:'add-1-back\n' span_id:209) (Token id:Id.Lit_Chars val:'4\n' span_id:210) (Token id:Id.Lit_Chars val:'3\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:212) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:214) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit --git-dir=shallow2/.git cat-file blob $(echo 1|git hash-object --stdin) >/dev/null\n'
            span_id: 215
          ) (Token id:Id.Lit_Chars val:'\n' span_id:216)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fetch that requires changes in .git/shallow is filtered'
            span_id: 223
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:228) (Token id:Id.Lit_Chars val:'\tcd shallow &&\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\tgit checkout --orphan no-shallow &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\tcommit no-shallow\n' span_id:231) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\tgit init notshallow &&\n' span_id:233) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:234) (Token id:Id.Lit_Chars val:'\tcd notshallow &&\n' span_id:235) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit fetch ../shallow/.git refs/heads/*:refs/remotes/shallow/*&&\n'
            span_id: 236
          ) (Token id:Id.Lit_Chars val:'\tgit for-each-ref --format="%(refname)" >actual.refs &&\n' span_id:237) 
          (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect.refs &&\n' span_id:238) (Token id:Id.Lit_Chars val:'refs/remotes/shallow/no-shallow\n' span_id:239) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:240) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.refs actual.refs &&\n' span_id:241) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --format=%s shallow/no-shallow >actual &&\n'
            span_id: 242
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'no-shallow\n' span_id:244) (Token id:Id.Lit_Chars val:'EOF\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:246) (Token id:Id.Lit_Chars val:'\t)\n' span_id:247)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fetch --update-shallow' span_id:254))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:259) (Token id:Id.Lit_Chars val:'\tcd shallow &&\n' span_id:260) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tcommit 7 &&\n' span_id:262) 
          (Token id:Id.Lit_Chars val:'\tgit tag -m foo heavy-tag HEAD^ &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\tgit tag light-tag HEAD^:tracked\n' span_id:264) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\t(\n' span_id:266) 
          (Token id:Id.Lit_Chars val:'\tcd notshallow &&\n' span_id:267) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/* &&\n'
            span_id: 268
          ) (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit for-each-ref --sort=refname --format="%(refname)" >actual.refs &&\n'
            span_id: 270
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect.refs &&\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'refs/remotes/shallow/master\n' span_id:272) (Token id:Id.Lit_Chars val:'refs/remotes/shallow/no-shallow\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'refs/tags/heavy-tag\n' span_id:274) (Token id:Id.Lit_Chars val:'refs/tags/light-tag\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:276) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.refs actual.refs &&\n' span_id:277) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --format=%s shallow/master >actual &&\n'
            span_id: 278
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:279) 
          (Token id:Id.Lit_Chars val:'7\n' span_id:280) (Token id:Id.Lit_Chars val:'6\n' span_id:281) (Token id:Id.Lit_Chars val:'5\n' span_id:282) 
          (Token id:Id.Lit_Chars val:'4\n' span_id:283) (Token id:Id.Lit_Chars val:'3\n' span_id:284) (Token id:Id.Lit_Chars val:'EOF\n' span_id:285) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:286) (Token id:Id.Lit_Chars val:'\t)\n' span_id:287)
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM) (Id.Lit_Comma ',') (SANITY)} 
      {(SQ (Token id:Id.Lit_Chars val:'shallow fetch from a read-only repo' span_id:298))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\tcp -R .git read-only.git &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\tfind read-only.git -print | xargs chmod -w &&\n' span_id:304) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "find read-only.git -type d -print | xargs chmod +w" &&\n'
            span_id: 305
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --no-local --depth=2 read-only.git from-read-only &&\n'
            span_id: 306
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=from-read-only/.git log --format=%s >actual &&\n'
            span_id: 307
          ) (Token id:Id.Lit_Chars val:'\tcat >expect <<EOF &&\n' span_id:308) 
          (Token id:Id.Lit_Chars val:'add-1-back\n' span_id:309) (Token id:Id.Lit_Chars val:'4\n' span_id:310) (Token id:Id.Lit_Chars val:'EOF\n' span_id:311) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:312)
        )
      }
    )
    (C {(test_done)})
  ]
)