Merge branch 'sb/rev-parse-show-superproject-root'
[git] / t / t5610-clone-detached.sh
1 #!/bin/sh
2
3 test_description='test cloning a repository with detached HEAD'
4 . ./test-lib.sh
5
6 head_is_detached() {
7         git --git-dir=$1/.git rev-parse --verify HEAD &&
8         test_must_fail git --git-dir=$1/.git symbolic-ref HEAD
9 }
10
11 test_expect_success 'setup' '
12         echo one >file &&
13         git add file &&
14         git commit -m one &&
15         echo two >file &&
16         git commit -a -m two &&
17         git tag two &&
18         echo three >file &&
19         git commit -a -m three
20 '
21
22 test_expect_success 'clone repo (detached HEAD points to branch)' '
23         git checkout master^0 &&
24         git clone "file://$PWD" detached-branch
25 '
26 test_expect_success 'cloned HEAD matches' '
27         echo three >expect &&
28         git --git-dir=detached-branch/.git log -1 --format=%s >actual &&
29         test_cmp expect actual
30 '
31 test_expect_failure 'cloned HEAD is detached' '
32         head_is_detached detached-branch
33 '
34
35 test_expect_success 'clone repo (detached HEAD points to tag)' '
36         git checkout two^0 &&
37         git clone "file://$PWD" detached-tag
38 '
39 test_expect_success 'cloned HEAD matches' '
40         echo two >expect &&
41         git --git-dir=detached-tag/.git log -1 --format=%s >actual &&
42         test_cmp expect actual
43 '
44 test_expect_success 'cloned HEAD is detached' '
45         head_is_detached detached-tag
46 '
47
48 test_expect_success 'clone repo (detached HEAD points to history)' '
49         git checkout two^ &&
50         git clone "file://$PWD" detached-history
51 '
52 test_expect_success 'cloned HEAD matches' '
53         echo one >expect &&
54         git --git-dir=detached-history/.git log -1 --format=%s >actual &&
55         test_cmp expect actual
56 '
57 test_expect_success 'cloned HEAD is detached' '
58         head_is_detached detached-history
59 '
60
61 test_expect_success 'clone repo (orphan detached HEAD)' '
62         git checkout master^0 &&
63         echo four >file &&
64         git commit -a -m four &&
65         git clone "file://$PWD" detached-orphan
66 '
67 test_expect_success 'cloned HEAD matches' '
68         echo four >expect &&
69         git --git-dir=detached-orphan/.git log -1 --format=%s >actual &&
70         test_cmp expect actual
71 '
72 test_expect_success 'cloned HEAD is detached' '
73         head_is_detached detached-orphan
74 '
75
76 test_done