(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'tracking branch update checks for git push'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\techo 1 >file &&\n'> <'\tgit add file &&\n'> <'\tgit commit -m 1 &&\n'> 
          <'\tgit branch b1 &&\n'> <'\tgit branch b2 &&\n'> <'\tgit branch b3 &&\n'> <'\tgit clone . aa &&\n'> <'\tgit checkout b1 &&\n'> 
          <'\techo b1 >>file &&\n'> <'\tgit commit -a -m b1 &&\n'> <'\tgit checkout b2 &&\n'> <'\techo b2 >>file &&\n'> 
          <'\tgit commit -a -m b2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'prepare pushable branches'>)} 
      {
        (SQ <'\n'> <'\tcd aa &&\n'> <'\tb1=$(git rev-parse origin/b1) &&\n'> 
          <'\tb2=$(git rev-parse origin/b2) &&\n'> <'\tgit checkout -b b1 origin/b1 &&\n'> <'\techo aa-b1 >>file &&\n'> <'\tgit commit -a -m aa-b1 &&\n'> 
          <'\tgit checkout -b b2 origin/b2 &&\n'> <'\techo aa-b2 >>file &&\n'> <'\tgit commit -a -m aa-b2 &&\n'> <'\tgit checkout master &&\n'> 
          <'\techo aa-master >>file &&\n'> <'\tgit commit -a -m aa-master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'mixed-success push returns error'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git push origin :\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'check tracking branches updated correctly after push'>)} 
      {(SQ <'\n'> <'\ttest "$(git rev-parse origin/master)" = "$(git rev-parse master)"\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'check tracking branches not updated for failed refs'>)} 
      {
        (SQ <'\n'> <'\ttest "$(git rev-parse origin/b1)" = "$b1" &&\n'> 
          <'\ttest "$(git rev-parse origin/b2)" = "$b2"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'deleted branches have their tracking branches removed'>)} 
      {
        (SQ <'\n'> <'\tgit push origin :b1 &&\n'> 
          <'\ttest "$(git rev-parse origin/b1)" = "origin/b1"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'already deleted tracking branches ignored'>)} 
      {
        (SQ <'\n'> <'\tgit branch -d -r origin/b3 &&\n'> <'\tgit push origin :b3 >output 2>&1 &&\n'> 
          <'\t! grep error output\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)