]>
Commit | Line | Data |
---|---|---|
24bc1a12 CB |
1 | #!/bin/sh |
2 | ||
3 | test_description='"git fetch/pull --set-upstream" basic tests.' | |
028cb644 | 4 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
334afbc7 JS |
5 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
6 | ||
24bc1a12 CB |
7 | . ./test-lib.sh |
8 | ||
9 | check_config () { | |
10 | printf "%s\n" "$2" "$3" >"expect.$1" && | |
11 | { | |
12 | git config "branch.$1.remote" && git config "branch.$1.merge" | |
13 | } >"actual.$1" && | |
14 | test_cmp "expect.$1" "actual.$1" | |
15 | } | |
16 | ||
17 | check_config_missing () { | |
18 | test_expect_code 1 git config "branch.$1.remote" && | |
19 | test_expect_code 1 git config "branch.$1.merge" | |
20 | } | |
21 | ||
22 | clear_config () { | |
23 | for branch in "$@"; do | |
24 | test_might_fail git config --unset-all "branch.$branch.remote" | |
25 | test_might_fail git config --unset-all "branch.$branch.merge" | |
26 | done | |
27 | } | |
28 | ||
29 | ensure_fresh_upstream () { | |
30 | rm -rf parent && git init --bare parent | |
31 | } | |
32 | ||
33 | test_expect_success 'setup bare parent fetch' ' | |
34 | ensure_fresh_upstream && | |
35 | git remote add upstream parent | |
36 | ' | |
37 | ||
028cb644 | 38 | test_expect_success 'setup commit on main and other fetch' ' |
24bc1a12 | 39 | test_commit one && |
028cb644 | 40 | git push upstream main && |
24bc1a12 CB |
41 | git checkout -b other && |
42 | test_commit two && | |
43 | git push upstream other | |
44 | ' | |
45 | ||
46 | # tests for fetch --set-upstream | |
47 | ||
48 | test_expect_success 'fetch --set-upstream does not set upstream w/o branch' ' | |
028cb644 JS |
49 | clear_config main other && |
50 | git checkout main && | |
24bc1a12 | 51 | git fetch --set-upstream upstream && |
028cb644 | 52 | check_config_missing main && |
24bc1a12 CB |
53 | check_config_missing other |
54 | ' | |
55 | ||
028cb644 JS |
56 | test_expect_success 'fetch --set-upstream upstream main sets branch main but not other' ' |
57 | clear_config main other && | |
58 | git fetch --set-upstream upstream main && | |
59 | check_config main upstream refs/heads/main && | |
24bc1a12 CB |
60 | check_config_missing other |
61 | ' | |
62 | ||
63 | test_expect_success 'fetch --set-upstream upstream other sets branch other' ' | |
028cb644 | 64 | clear_config main other && |
24bc1a12 | 65 | git fetch --set-upstream upstream other && |
028cb644 | 66 | check_config main upstream refs/heads/other && |
24bc1a12 CB |
67 | check_config_missing other |
68 | ' | |
69 | ||
028cb644 | 70 | test_expect_success 'fetch --set-upstream main:other does not set the branch other2' ' |
24bc1a12 | 71 | clear_config other2 && |
028cb644 | 72 | git fetch --set-upstream upstream main:other2 && |
24bc1a12 CB |
73 | check_config_missing other2 |
74 | ' | |
75 | ||
76 | test_expect_success 'fetch --set-upstream http://nosuchdomain.example.com fails with invalid url' ' | |
028cb644 | 77 | # main explicitly not cleared, we check that it is not touched from previous value |
24bc1a12 CB |
78 | clear_config other other2 && |
79 | test_must_fail git fetch --set-upstream http://nosuchdomain.example.com && | |
028cb644 | 80 | check_config main upstream refs/heads/other && |
24bc1a12 CB |
81 | check_config_missing other && |
82 | check_config_missing other2 | |
83 | ' | |
84 | ||
85 | test_expect_success 'fetch --set-upstream with valid URL sets upstream to URL' ' | |
86 | clear_config other other2 && | |
c76b84a1 | 87 | url="file://$PWD" && |
24bc1a12 | 88 | git fetch --set-upstream "$url" && |
028cb644 | 89 | check_config main "$url" HEAD && |
24bc1a12 CB |
90 | check_config_missing other && |
91 | check_config_missing other2 | |
92 | ' | |
93 | ||
94 | # tests for pull --set-upstream | |
95 | ||
96 | test_expect_success 'setup bare parent pull' ' | |
97 | git remote rm upstream && | |
98 | ensure_fresh_upstream && | |
99 | git remote add upstream parent | |
100 | ' | |
101 | ||
028cb644 | 102 | test_expect_success 'setup commit on main and other pull' ' |
24bc1a12 | 103 | test_commit three && |
028cb644 | 104 | git push --tags upstream main && |
24bc1a12 CB |
105 | test_commit four && |
106 | git push upstream other | |
107 | ' | |
108 | ||
028cb644 JS |
109 | test_expect_success 'pull --set-upstream upstream main sets branch main but not other' ' |
110 | clear_config main other && | |
031e2f7a | 111 | git pull --no-rebase --set-upstream upstream main && |
028cb644 | 112 | check_config main upstream refs/heads/main && |
24bc1a12 CB |
113 | check_config_missing other |
114 | ' | |
115 | ||
028cb644 | 116 | test_expect_success 'pull --set-upstream main:other2 does not set the branch other2' ' |
24bc1a12 | 117 | clear_config other2 && |
031e2f7a | 118 | git pull --no-rebase --set-upstream upstream main:other2 && |
24bc1a12 CB |
119 | check_config_missing other2 |
120 | ' | |
121 | ||
028cb644 JS |
122 | test_expect_success 'pull --set-upstream upstream other sets branch main' ' |
123 | clear_config main other && | |
031e2f7a | 124 | git pull --no-rebase --set-upstream upstream other && |
028cb644 | 125 | check_config main upstream refs/heads/other && |
24bc1a12 CB |
126 | check_config_missing other |
127 | ' | |
128 | ||
129 | test_expect_success 'pull --set-upstream upstream tag does not set the tag' ' | |
130 | clear_config three && | |
031e2f7a | 131 | git pull --no-rebase --tags --set-upstream upstream three && |
24bc1a12 CB |
132 | check_config_missing three |
133 | ' | |
134 | ||
135 | test_expect_success 'pull --set-upstream http://nosuchdomain.example.com fails with invalid url' ' | |
028cb644 | 136 | # main explicitly not cleared, we check that it is not touched from previous value |
24bc1a12 CB |
137 | clear_config other other2 three && |
138 | test_must_fail git pull --set-upstream http://nosuchdomain.example.com && | |
028cb644 | 139 | check_config main upstream refs/heads/other && |
24bc1a12 CB |
140 | check_config_missing other && |
141 | check_config_missing other2 && | |
142 | check_config_missing three | |
143 | ' | |
144 | ||
145 | test_expect_success 'pull --set-upstream upstream HEAD sets branch HEAD' ' | |
028cb644 | 146 | clear_config main other && |
031e2f7a | 147 | git pull --no-rebase --set-upstream upstream HEAD && |
028cb644 | 148 | check_config main upstream HEAD && |
24bc1a12 | 149 | git checkout other && |
031e2f7a | 150 | git pull --no-rebase --set-upstream upstream HEAD && |
24bc1a12 CB |
151 | check_config other upstream HEAD |
152 | ' | |
153 | ||
154 | test_expect_success 'pull --set-upstream upstream with more than one branch does nothing' ' | |
028cb644 | 155 | clear_config main three && |
031e2f7a | 156 | git pull --no-rebase --set-upstream upstream main three && |
028cb644 | 157 | check_config_missing main && |
24bc1a12 CB |
158 | check_config_missing three |
159 | ' | |
160 | ||
161 | test_expect_success 'pull --set-upstream with valid URL sets upstream to URL' ' | |
028cb644 JS |
162 | clear_config main other other2 && |
163 | git checkout main && | |
c76b84a1 | 164 | url="file://$PWD" && |
24bc1a12 | 165 | git pull --set-upstream "$url" && |
028cb644 | 166 | check_config main "$url" HEAD && |
24bc1a12 CB |
167 | check_config_missing other && |
168 | check_config_missing other2 | |
169 | ' | |
170 | ||
171 | test_expect_success 'pull --set-upstream with valid URL and branch sets branch' ' | |
028cb644 JS |
172 | clear_config main other other2 && |
173 | git checkout main && | |
c76b84a1 | 174 | url="file://$PWD" && |
028cb644 JS |
175 | git pull --set-upstream "$url" main && |
176 | check_config main "$url" refs/heads/main && | |
24bc1a12 CB |
177 | check_config_missing other && |
178 | check_config_missing other2 | |
179 | ' | |
180 | ||
181 | test_done |