t / t2011-checkout-invalid-head.shon commit Merge branch 'bp/checkout-new-branch-optim' (5ad3550)
   1#!/bin/sh
   2
   3test_description='checkout switching away from an invalid branch'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        echo hello >world &&
   9        git add world &&
  10        git commit -m initial
  11'
  12
  13test_expect_success 'checkout should not start branch from a tree' '
  14        test_must_fail git checkout -b newbranch master^{tree}
  15'
  16
  17test_expect_success 'checkout master from invalid HEAD' '
  18        echo $ZERO_OID >.git/HEAD &&
  19        git checkout master --
  20'
  21
  22test_expect_success 'checkout notices failure to lock HEAD' '
  23        test_when_finished "rm -f .git/HEAD.lock" &&
  24        >.git/HEAD.lock &&
  25        test_must_fail git checkout -b other
  26'
  27
  28test_expect_success 'create ref directory/file conflict scenario' '
  29        git update-ref refs/heads/outer/inner master &&
  30
  31        # do not rely on symbolic-ref to get a known state,
  32        # as it may use the same code we are testing
  33        reset_to_df () {
  34                echo "ref: refs/heads/outer" >.git/HEAD
  35        }
  36'
  37
  38test_expect_success 'checkout away from d/f HEAD (unpacked, to branch)' '
  39        reset_to_df &&
  40        git checkout master
  41'
  42
  43test_expect_success 'checkout away from d/f HEAD (unpacked, to detached)' '
  44        reset_to_df &&
  45        git checkout --detach master
  46'
  47
  48test_expect_success 'pack refs' '
  49        git pack-refs --all --prune
  50'
  51
  52test_expect_success 'checkout away from d/f HEAD (packed, to branch)' '
  53        reset_to_df &&
  54        git checkout master
  55'
  56
  57test_expect_success 'checkout away from d/f HEAD (packed, to detached)' '
  58        reset_to_df &&
  59        git checkout --detach master
  60'
  61test_done