|  | #!/bin/sh | 
|  |  | 
|  | test_description='checkout from unborn branch' | 
|  | . ./test-lib.sh | 
|  |  | 
|  | test_expect_success 'setup' ' | 
|  | mkdir parent && | 
|  | (cd parent && | 
|  | git init && | 
|  | echo content >file && | 
|  | git add file && | 
|  | git commit -m base | 
|  | ) && | 
|  | git fetch parent master:origin | 
|  | ' | 
|  |  | 
|  | test_expect_success 'checkout from unborn preserves untracked files' ' | 
|  | echo precious >expect && | 
|  | echo precious >file && | 
|  | test_must_fail git checkout -b new origin && | 
|  | test_cmp expect file | 
|  | ' | 
|  |  | 
|  | test_expect_success 'checkout from unborn preserves index contents' ' | 
|  | echo precious >expect && | 
|  | echo precious >file && | 
|  | git add file && | 
|  | test_must_fail git checkout -b new origin && | 
|  | test_cmp expect file && | 
|  | git show :file >file && | 
|  | test_cmp expect file | 
|  | ' | 
|  |  | 
|  | test_expect_success 'checkout from unborn merges identical index contents' ' | 
|  | echo content >file && | 
|  | git add file && | 
|  | git checkout -b new origin | 
|  | ' | 
|  |  | 
|  | test_expect_success 'checking out another branch from unborn state' ' | 
|  | git checkout --orphan newroot && | 
|  | git checkout -b anothername && | 
|  | test_must_fail git show-ref --verify refs/heads/newroot && | 
|  | git symbolic-ref HEAD >actual && | 
|  | echo refs/heads/anothername >expect && | 
|  | test_cmp expect actual | 
|  | ' | 
|  |  | 
|  | test_expect_success 'checking out in a newly created repo' ' | 
|  | test_create_repo empty && | 
|  | ( | 
|  | cd empty && | 
|  | git symbolic-ref HEAD >expect && | 
|  | test_must_fail git checkout && | 
|  | git symbolic-ref HEAD >actual && | 
|  | test_cmp expect actual | 
|  | ) | 
|  | ' | 
|  |  | 
|  | test_done |