(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:'tracking branch update checks for git push' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\techo 1 >file &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m 1 &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tgit branch b1 &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tgit branch b2 &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit branch b3 &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\tgit clone . aa &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit checkout b1 &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\techo b1 >>file &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tgit commit -a -m b1 &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tgit checkout b2 &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\techo b2 >>file &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m b2\n' span_id:35)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prepare pushable branches' span_id:42))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\tcd aa &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\tb1=$(git rev-parse origin/b1) &&\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\tb2=$(git rev-parse origin/b2) &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit checkout -b b1 origin/b1 &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\techo aa-b1 >>file &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\tgit commit -a -m aa-b1 &&\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b b2 origin/b2 &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\techo aa-b2 >>file &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m aa-b2 &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\techo aa-master >>file &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\tgit commit -a -m aa-master\n' span_id:58)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'mixed-success push returns error' span_id:65))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git push origin :\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check tracking branches updated correctly after push'
            span_id: 77
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse origin/master)" = "$(git rev-parse master)"\n'
            span_id: 82
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check tracking branches not updated for failed refs'
            span_id: 89
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse origin/b1)" = "$b1" &&\n'
            span_id: 94
          ) (Token id:Id.Lit_Chars val:'\ttest "$(git rev-parse origin/b2)" = "$b2"\n' span_id:95)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'deleted branches have their tracking branches removed'
            span_id: 102
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tgit push origin :b1 &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\ttest "$(git rev-parse origin/b1)" = "origin/b1"\n' span_id:108)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'already deleted tracking branches ignored' span_id:115))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tgit branch -d -r origin/b3 &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\tgit push origin :b3 >output 2>&1 &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\t! grep error output\n' span_id:122)
        )
      }
    )
    (C {(test_done)})
  ]
)