1#!/bin/sh 2# 3# Copyright (c) 2010 Erick Mattos 4# 5 6test_description='git checkout --orphan 7 8Main Tests for --orphan functionality.' 9 10GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 11export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 12 13. ./test-lib.sh 14 15TEST_FILE=foo 16 17test_expect_success 'Setup' ' 18 echo "Initial" >"$TEST_FILE" && 19 git add "$TEST_FILE" && 20 git commit -m "First Commit" && 21 test_tick && 22 echo "State 1" >>"$TEST_FILE" && 23 git add "$TEST_FILE" && 24 test_tick && 25 git commit -m "Second Commit" 26' 27 28test_expect_success '--orphan creates a new orphan branch from HEAD' ' 29 git checkout --orphan alpha && 30 test_must_fail git rev-parse --verify HEAD && 31 test "refs/heads/alpha" = "$(git symbolic-ref HEAD)" && 32 test_tick && 33 git commit -m "Third Commit" && 34 test_must_fail git rev-parse --verify HEAD^ && 35 git diff-tree --quiet main alpha 36' 37 38test_expect_success '--orphan creates a new orphan branch from <start_point>' ' 39 git checkout main && 40 git checkout --orphan beta main^ && 41 test_must_fail git rev-parse --verify HEAD && 42 test "refs/heads/beta" = "$(git symbolic-ref HEAD)" && 43 test_tick && 44 git commit -m "Fourth Commit" && 45 test_must_fail git rev-parse --verify HEAD^ && 46 git diff-tree --quiet main^ beta 47' 48 49test_expect_success '--orphan must be rejected with -b' ' 50 git checkout main && 51 test_must_fail git checkout --orphan new -b newer && 52 test refs/heads/main = "$(git symbolic-ref HEAD)" 53' 54 55test_expect_success '--orphan must be rejected with -t' ' 56 git checkout main && 57 test_must_fail git checkout --orphan new -t main && 58 test refs/heads/main = "$(git symbolic-ref HEAD)" 59' 60 61test_expect_success '--orphan ignores branch.autosetupmerge' ' 62 git checkout main && 63 git config branch.autosetupmerge always && 64 git checkout --orphan gamma && 65 test -z "$(git config branch.gamma.merge)" && 66 test refs/heads/gamma = "$(git symbolic-ref HEAD)" && 67 test_must_fail git rev-parse --verify HEAD^ 68' 69 70test_expect_success '--orphan makes reflog by default' ' 71 git checkout main && 72 git config --unset core.logAllRefUpdates && 73 git checkout --orphan delta && 74 test_must_fail git rev-parse --verify delta@{0} && 75 git commit -m Delta && 76 git rev-parse --verify delta@{0} 77' 78 79test_expect_success REFFILES '--orphan does not make reflog when core.logAllRefUpdates = false' ' 80 git checkout main && 81 git config core.logAllRefUpdates false && 82 git checkout --orphan epsilon && 83 test_must_fail git rev-parse --verify epsilon@{0} && 84 git commit -m Epsilon && 85 test_must_fail git rev-parse --verify epsilon@{0} 86' 87 88test_expect_success '--orphan with -l makes reflog when core.logAllRefUpdates = false' ' 89 git checkout main && 90 git checkout -l --orphan zeta && 91 test_must_fail git rev-parse --verify zeta@{0} && 92 git commit -m Zeta && 93 git rev-parse --verify zeta@{0} 94' 95 96test_expect_success 'giving up --orphan not committed when -l and core.logAllRefUpdates = false deletes reflog' ' 97 git checkout main && 98 git checkout -l --orphan eta && 99 test_must_fail git rev-parse --verify eta@{0} && 100 git checkout main && 101 test_must_fail git rev-parse --verify eta@{0} 102' 103 104test_expect_success '--orphan is rejected with an existing name' ' 105 git checkout main && 106 test_must_fail git checkout --orphan main && 107 test refs/heads/main = "$(git symbolic-ref HEAD)" 108' 109 110test_expect_success '--orphan refuses to switch if a merge is needed' ' 111 git checkout main && 112 git reset --hard && 113 echo local >>"$TEST_FILE" && 114 cat "$TEST_FILE" >"$TEST_FILE.saved" && 115 test_must_fail git checkout --orphan new main^ && 116 test refs/heads/main = "$(git symbolic-ref HEAD)" && 117 test_cmp "$TEST_FILE" "$TEST_FILE.saved" && 118 git diff-index --quiet --cached HEAD && 119 git reset --hard 120' 121 122test_expect_success 'cannot --detach on an unborn branch' ' 123 git checkout main && 124 git checkout --orphan new && 125 test_must_fail git checkout --detach 126' 127 128test_done 129