1
+#!/bin/sh
2
+
3
+test_description='git refs create'
4
+
5
+. ./test-lib.sh
6
+
7
+setup_repo () {
8
+ git init "$1" &&
9
+ test_commit -C "$1" A &&
10
+ test_commit -C "$1" B
11
+}
12
+
13
+test_ref_matches () {
14
+ git rev-parse "$1" >expect &&
15
+ echo "$2" >actual &&
16
+ test_cmp expect actual
17
+}
18
+
19
+test_expect_success 'create a new reference' '
20
+ test_when_finished "rm -rf repo" &&
21
+ setup_repo repo &&
22
+ (
23
+ cd repo &&
24
+ A=$(git rev-parse A) &&
25
+ git refs create refs/heads/foo $A &&
26
+ test_ref_matches refs/heads/foo "$A"
27
+ )
28
+'
29
+
30
+test_expect_success 'create fails when the reference already exists' '
31
+ test_when_finished "rm -rf repo" &&
32
+ setup_repo repo &&
33
+ (
34
+ cd repo &&
35
+ A=$(git rev-parse A) &&
36
+ B=$(git rev-parse B) &&
37
+ git refs create refs/heads/foo $A &&
38
+ test_must_fail git refs create refs/heads/foo $B 2>err &&
39
+ test_grep "reference already exists" err &&
40
+ test_ref_matches refs/heads/foo "$A"
41
+ )
42
+'
43
+
44
+test_expect_success 'create with null new value fails' '
45
+ test_when_finished "rm -rf repo" &&
46
+ setup_repo repo &&
47
+ (
48
+ cd repo &&
49
+ test_must_fail git refs create refs/heads/foo $ZERO_OID 2>err &&
50
+ test_grep "null new object ID" err &&
51
+ test_must_fail git refs exists refs/heads/foo
52
+ )
53
+'
54
+
55
+test_expect_success 'create with invalid new value fails' '
56
+ test_when_finished "rm -rf repo" &&
57
+ setup_repo repo &&
58
+ (
59
+ cd repo &&
60
+ test_must_fail git refs create refs/heads/foo invalid-oid 2>err &&
61
+ test_grep "invalid object ID" err &&
62
+ test_must_fail git refs exists refs/heads/foo
63
+ )
64
+'
65
+
66
+test_expect_success 'create does not create a reflog by default' '
67
+ test_when_finished "rm -rf repo" &&
68
+ setup_repo repo &&
69
+ (
70
+ cd repo &&
71
+ A=$(git rev-parse A) &&
72
+ git refs create refs/foo $A &&
73
+ test_must_fail git reflog exists refs/foo
74
+ )
75
+'
76
+
77
+test_expect_success 'create creates a reflog with --create-reflog' '
78
+ test_when_finished "rm -rf repo" &&
79
+ setup_repo repo &&
80
+ (
81
+ cd repo &&
82
+ A=$(git rev-parse A) &&
83
+ git refs create --create-reflog refs/foo $A &&
84
+ git reflog exists refs/foo
85
+ )
86
+'
87
+
88
+test_expect_success 'create with message records reason in reflog' '
89
+ test_when_finished "rm -rf repo" &&
90
+ setup_repo repo &&
91
+ (
92
+ cd repo &&
93
+ A=$(git rev-parse A) &&
94
+ git refs create --message="create reason" refs/heads/foo $A &&
95
+ git reflog show refs/heads/foo >actual &&
96
+ test_grep "create reason$" actual
97
+ )
98
+'
99
+
100
+test_expect_success 'create with symref target creates target reference' '
101
+ test_when_finished "rm -rf repo" &&
102
+ setup_repo repo &&
103
+ (
104
+ cd repo &&
105
+ A=$(git rev-parse A) &&
106
+ git symbolic-ref refs/heads/symref refs/heads/target &&
107
+ git refs create refs/heads/symref $A &&
108
+ git reflog exists refs/heads/target
109
+ )
110
+'
111
+
112
+test_expect_success 'create with symref target and --no-deref refuses to create reference' '
113
+ test_when_finished "rm -rf repo" &&
114
+ setup_repo repo &&
115
+ (
116
+ cd repo &&
117
+ A=$(git rev-parse A) &&
118
+ git symbolic-ref refs/heads/symref refs/heads/target &&
119
+ test_must_fail git refs create --no-deref refs/heads/symref $A 2>err &&
120
+ test_grep "dangling symref already exists" err &&
121
+ test_must_fail git reflog exists refs/heads/target
122
+ )
123
+'
124
+
125
+test_expect_success 'create with empty message fails' '
126
+ test_when_finished "rm -rf repo" &&
127
+ setup_repo repo &&
128
+ (
129
+ cd repo &&
130
+ A=$(git rev-parse A) &&
131
+ test_must_fail git refs create --message= refs/heads/foo $A 2>err &&
132
+ test_grep "empty message" err &&
133
+ test_must_fail git refs exists refs/heads/foo
134
+ )
135
+'
136
+
137
+test_expect_success 'create without arguments fails' '
138
+ test_when_finished "rm -rf repo" &&
139
+ setup_repo repo &&
140
+ test_must_fail git -C repo refs create 2>err &&
141
+ test_grep "requires reference name" err
142
+'
143
+
144
+test_expect_success 'create with too many arguments fails' '
145
+ test_when_finished "rm -rf repo" &&
146
+ setup_repo repo &&
147
+ test_must_fail git -C repo refs create refs/heads/foo a b 2>err &&
148
+ test_grep "requires reference name" err
149
+'
150
+
151
+test_done