(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:'push from/to 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: '\tgit config --global transfer.fsckObjects true &&\n'
            span_id: 64
          ) (Token id:Id.Lit_Chars val:'\tcommit 1 &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tcommit 2 &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tcommit 3 &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tcommit 4 &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit clone . full &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgit init full-abc &&\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tcd full-abc &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\tcommit a &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\tcommit b &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\tcommit c\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\tgit clone --no-local --depth=2 .git shallow &&\n' span_id:77) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=shallow/.git log --format=%s >actual &&\n'
            span_id: 78
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'4\n' span_id:80) (Token id:Id.Lit_Chars val:'3\n' span_id:81) (Token id:Id.Lit_Chars val:'EOF\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\tgit clone --no-local --depth=2 full-abc/.git shallow2 &&\n' span_id:84) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=shallow2/.git log --format=%s >actual &&\n'
            span_id: 85
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'c\n' span_id:87) (Token id:Id.Lit_Chars val:'b\n' span_id:88) (Token id:Id.Lit_Chars val:'EOF\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:90)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'push from shallow clone' span_id:97))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:102) (Token id:Id.Lit_Chars val:'\tcd shallow &&\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\tcommit 5 &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit push ../.git +master:refs/remotes/shallow/master\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tgit log --format=%s shallow/master >actual &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'5\n' span_id:110) (Token id:Id.Lit_Chars val:'4\n' span_id:111) (Token id:Id.Lit_Chars val:'3\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'2\n' span_id:113) (Token id:Id.Lit_Chars val:'1\n' span_id:114) (Token id:Id.Lit_Chars val:'EOF\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:116)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push from shallow clone, with grafted roots' span_id:123))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:128) (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:129) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git push ../.git +master:refs/remotes/shallow2/master 2>err &&\n'
            span_id: 130
          ) (Token id:Id.Lit_Chars val:'\tgrep "shallow2/master.*shallow update not allowed" err\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse shallow2/master &&\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\tgit fsck\n' span_id:134)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'add new shallow root with receive.updateshallow on'
            span_id: 141
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:145) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config receive.shallowupdate true &&\n'
            span_id: 146
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tgit push ../.git +master:refs/remotes/shallow2/master\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit log --format=%s shallow2/master >actual &&\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'c\n' span_id:154) (Token id:Id.Lit_Chars val:'b\n' span_id:155) (Token id:Id.Lit_Chars val:'EOF\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:157)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push from shallow to shallow' span_id:164))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:169) (Token id:Id.Lit_Chars val:'\tcd shallow &&\n' span_id:170) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=../shallow2/.git config receive.shallowupdate true &&\n'
            span_id: 171
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push ../shallow2/.git +master:refs/remotes/shallow/master &&\n'
            span_id: 172
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=../shallow2/.git config receive.shallowupdate false\n'
            span_id: 173
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\t(\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\tgit log --format=%s shallow/master >actual &&\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\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:'push from full to shallow' span_id:192))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) 
          (Token
            id: Id.Lit_Chars
            val: 
'\t! git --git-dir=shallow2/.git cat-file blob $(echo 1|git hash-object --stdin) &&\n'
            span_id: 197
          ) (Token id:Id.Lit_Chars val:'\tcommit 1 &&\n' span_id:198) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push shallow2/.git +master:refs/remotes/top/master &&\n'
            span_id: 199
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'\tcd shallow2 &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\tgit log --format=%s top/master >actual &&\n' span_id:202) 
          (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:204) 
          (Token id:Id.Lit_Chars val:'1\n' span_id:205) (Token id:Id.Lit_Chars val:'4\n' span_id:206) (Token id:Id.Lit_Chars val:'3\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:208) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:209) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file blob $(echo 1|git hash-object --stdin) >/dev/null\n'
            span_id: 210
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:211)
        )
      }
    )
    (C {(test_done)})
  ]
)