(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 over http' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-httpd.sh)})
    (C {(start_httpd)})
    (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:37)
                      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:68))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config --global transfer.fsckObjects true &&\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\tcommit 1 &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tcommit 2 &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tcommit 3 &&\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\tcommit 4 &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgit clone . full &&\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit init full-abc &&\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\tcd full-abc &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\tcommit a &&\n' span_id:82) 
          (Token id:Id.Lit_Chars val:'\tcommit b &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\tcommit c\n' span_id:84) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tgit clone --no-local --depth=2 .git shallow &&\n' span_id:86) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=shallow/.git log --format=%s >actual &&\n'
            span_id: 87
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'4\n' span_id:89) (Token id:Id.Lit_Chars val:'3\n' span_id:90) (Token id:Id.Lit_Chars val:'EOF\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgit clone --no-local --depth=2 full-abc/.git shallow2 &&\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=shallow2/.git log --format=%s >actual &&\n'
            span_id: 94
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'c\n' span_id:96) (Token id:Id.Lit_Chars val:'b\n' span_id:97) (Token id:Id.Lit_Chars val:'EOF\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:99)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push to shallow repo via http' span_id:106))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare --no-local shallow "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:112) 
          (Token
            id: Id.Lit_Chars
            val: '\tcd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 113
          ) (Token id:Id.Lit_Chars val:'\tgit config http.receivepack true\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\t(\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\tcd full &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\tcommit 9 &&\n' span_id:118) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push $HTTPD_URL/smart/repo.git +master:refs/remotes/top/master\n'
            span_id: 119
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\t(\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\tcd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 122
          ) (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:123) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --format=%s top/master >actual &&\n'
            span_id: 124
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'9\n' span_id:126) (Token id:Id.Lit_Chars val:'4\n' span_id:127) (Token id:Id.Lit_Chars val:'3\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'EOF\n' span_id:129) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:131)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push from shallow repo via http' span_id:138))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:142) 
          (Token
            id: Id.Lit_Chars
            val: '\tmv "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" shallow-upstream.git &&\n'
            span_id: 143
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare --no-local full "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:145) 
          (Token
            id: Id.Lit_Chars
            val: '\tcd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 146
          ) (Token id:Id.Lit_Chars val:'\tgit config http.receivepack true\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tcommit 10 &&\n' span_id:149) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push $HTTPD_URL/smart/repo.git +master:refs/remotes/top/master &&\n'
            span_id: 150
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\tcd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 152
          ) (Token id:Id.Lit_Chars val:'\tgit fsck &&\n' span_id:153) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit log --format=%s top/master >actual &&\n'
            span_id: 154
          ) (Token id:Id.Lit_Chars val:'\tcat <<EOF >expect &&\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'10\n' span_id:156) (Token id:Id.Lit_Chars val:'4\n' span_id:157) (Token id:Id.Lit_Chars val:'3\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'2\n' span_id:159) (Token id:Id.Lit_Chars val:'1\n' span_id:160) (Token id:Id.Lit_Chars val:'EOF\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:162) (Token id:Id.Lit_Chars val:'\t)\n' span_id:163)
        )
      }
    )
    (C {(stop_httpd)})
    (C {(test_done)})
  ]
)