(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'checkout switching away from an invalid branch'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\techo hello >world &&\n'> <'\tgit add world &&\n'> <'\tgit commit -m initial\n'>)
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout should not start branch from a tree'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git checkout -b newbranch master^{tree}\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'checkout master from invalid HEAD'>)} 
      {(SQ <'\n'> <'\techo $_z40 >.git/HEAD &&\n'> <'\tgit checkout master --\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'checkout notices failure to lock HEAD'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm -f .git/HEAD.lock" &&\n'> <'\t>.git/HEAD.lock &&\n'> 
          <'\ttest_must_fail git checkout -b other\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'create ref directory/file conflict scenario'>)} 
      {
        (SQ <'\n'> <'\tgit update-ref refs/heads/outer/inner master &&\n'> <'\n'> 
          <'\t# do not rely on symbolic-ref to get a known state,\n'> <'\t# as it may use the same code we are testing\n'> <'\treset_to_df () {\n'> 
          <'\t\techo "ref: refs/heads/outer" >.git/HEAD\n'> <'\t}\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout away from d/f HEAD (unpacked, to branch)'>)} 
      {(SQ <'\n'> <'\treset_to_df &&\n'> <'\tgit checkout master\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'checkout away from d/f HEAD (unpacked, to detached)'>)} 
      {(SQ <'\n'> <'\treset_to_df &&\n'> <'\tgit checkout --detach master\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'pack refs'>)} {(SQ <'\n'> <'\tgit pack-refs --all --prune\n'>)})
    (C {(test_expect_success)} {(SQ <'checkout away from d/f HEAD (packed, to branch)'>)} 
      {(SQ <'\n'> <'\treset_to_df &&\n'> <'\tgit checkout master\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'checkout away from d/f HEAD (packed, to detached)'>)} 
      {(SQ <'\n'> <'\treset_to_df &&\n'> <'\tgit checkout --detach master\n'>)}
    )
    (C {(test_done)})
  ]
)