(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'pull options'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\tmkdir parent &&\n'> <'\t(cd parent && git init &&\n'> 
          <'\t echo one >file && git add file &&\n'> <'\t git commit -m one)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull -q'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedq &&\n'> <'\t(cd clonedq && git init &&\n'> 
          <'\tgit pull -q "../parent" >out 2>err &&\n'> <'\ttest_must_be_empty err &&\n'> <'\ttest_must_be_empty out)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull -q --rebase'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedqrb &&\n'> <'\t(cd clonedqrb && git init &&\n'> 
          <'\tgit pull -q --rebase "../parent" >out 2>err &&\n'> <'\ttest_must_be_empty err &&\n'> <'\ttest_must_be_empty out &&\n'> 
          <'\tgit pull -q --rebase "../parent" >out 2>err &&\n'> <'\ttest_must_be_empty err &&\n'> <'\ttest_must_be_empty out)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull'>)} 
      {
        (SQ <'\n'> <'\tmkdir cloned &&\n'> <'\t(cd cloned && git init &&\n'> 
          <'\tgit pull "../parent" >out 2>err &&\n'> <'\ttest -s err &&\n'> <'\ttest_must_be_empty out)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull --rebase'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedrb &&\n'> <'\t(cd clonedrb && git init &&\n'> 
          <'\tgit pull --rebase "../parent" >out 2>err &&\n'> <'\ttest -s err &&\n'> <'\ttest_must_be_empty out)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull -v'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedv &&\n'> <'\t(cd clonedv && git init &&\n'> 
          <'\tgit pull -v "../parent" >out 2>err &&\n'> <'\ttest -s err &&\n'> <'\ttest_must_be_empty out)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull -v --rebase'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedvrb &&\n'> <'\t(cd clonedvrb && git init &&\n'> 
          <'\tgit pull -v --rebase "../parent" >out 2>err &&\n'> <'\ttest -s err &&\n'> <'\ttest_must_be_empty out)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull -v -q'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedvq &&\n'> <'\t(cd clonedvq && git init &&\n'> 
          <'\tgit pull -v -q "../parent" >out 2>err &&\n'> <'\ttest_must_be_empty out &&\n'> <'\ttest_must_be_empty err)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull -q -v'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedqv &&\n'> <'\t(cd clonedqv && git init &&\n'> 
          <'\tgit pull -q -v "../parent" >out 2>err &&\n'> <'\ttest_must_be_empty out &&\n'> <'\ttest -s err)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull --force'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedoldstyle &&\n'> <'\t(cd clonedoldstyle && git init &&\n'> 
          <'\tcat >>.git/config <<-\\EOF &&\n'> <'\t[remote "one"]\n'> <'\t\turl = ../parent\n'> <'\t\tfetch = refs/heads/master:refs/heads/mirror\n'> 
          <'\t[remote "two"]\n'> <'\t\turl = ../parent\n'> <'\t\tfetch = refs/heads/master:refs/heads/origin\n'> 
          <'\t[branch "master"]\n'> <'\t\tremote = two\n'> <'\t\tmerge = refs/heads/master\n'> <'\tEOF\n'> <'\tgit pull two &&\n'> 
          <'\ttest_commit A &&\n'> <'\tgit branch -f origin &&\n'> <'\tgit pull --all --force\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull --all'>)} 
      {
        (SQ <'\n'> <'\tmkdir clonedmulti &&\n'> <'\t(cd clonedmulti && git init &&\n'> 
          <'\tcat >>.git/config <<-\\EOF &&\n'> <'\t[remote "one"]\n'> <'\t\turl = ../parent\n'> <'\t\tfetch = refs/heads/*:refs/remotes/one/*\n'> 
          <'\t[remote "two"]\n'> <'\t\turl = ../parent\n'> <'\t\tfetch = refs/heads/*:refs/remotes/two/*\n'> <'\t[branch "master"]\n'> 
          <'\t\tremote = one\n'> <'\t\tmerge = refs/heads/master\n'> <'\tEOF\n'> <'\tgit pull --all\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull --dry-run'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm -rf clonedry" &&\n'> <'\tgit init clonedry &&\n'> 
          <'\t(\n'> <'\t\tcd clonedry &&\n'> <'\t\tgit pull --dry-run ../parent &&\n'> 
          <'\t\ttest_path_is_missing .git/FETCH_HEAD &&\n'> <'\t\ttest_path_is_missing .git/refs/heads/master &&\n'> <'\t\ttest_path_is_missing .git/index &&\n'> 
          <'\t\ttest_path_is_missing file\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull --all --dry-run'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm -rf cloneddry" &&\n'> <'\tgit init clonedry &&\n'> 
          <'\t(\n'> <'\t\tcd clonedry &&\n'> <'\t\tgit remote add origin ../parent &&\n'> 
          <'\t\tgit pull --all --dry-run &&\n'> <'\t\ttest_path_is_missing .git/FETCH_HEAD &&\n'> 
          <'\t\ttest_path_is_missing .git/refs/remotes/origin/master &&\n'> <'\t\ttest_path_is_missing .git/index &&\n'> <'\t\ttest_path_is_missing file\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'git pull --allow-unrelated-histories'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm -fr src dst" &&\n'> <'\tgit init src &&\n'> <'\t(\n'> 
          <'\t\tcd src &&\n'> <'\t\ttest_commit one &&\n'> <'\t\ttest_commit two\n'> <'\t) &&\n'> <'\tgit clone src dst &&\n'> 
          <'\t(\n'> <'\t\tcd src &&\n'> <'\t\tgit checkout --orphan side HEAD^ &&\n'> <'\t\ttest_commit three\n'> 
          <'\t) &&\n'> <'\t(\n'> <'\t\tcd dst &&\n'> <'\t\ttest_must_fail git pull ../src side &&\n'> 
          <'\t\tgit pull --allow-unrelated-histories ../src side\n'> <'\t)\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)