fetch: add a failing test for prunning with overlapping refspecs
When a remote has multiple fetch refspecs and these overlap in the target namespace, fetch may prune a remote-tracking branch which still exists in the remote. The test uses a popular form of this, by putting pull requests as stored in a popular hosting platform alongside "real" remote-tracking branches. The fetch command makes a decision of whether to prune based on the first matching refspec, which in this case is insufficient, as it covers the pull request names. This pair of refspecs does work as expected if the more "specific" refspec is the first in the list. Signed-off-by: Carlos Martín Nieto <cmn@elego.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Carlos Martín Nieto committed
Feb 27, 2014 at 10:00 UTC
f377e7a37c1b28359a228cf5bb43161a8a22b385
1 file changed
+20
t/t5510-fetch.sh
+20
@@ -113,6 +113,26 @@ test_expect_success 'fetch --prune with a namespace keeps other namespaces' '
113
git rev-parse origin/master
114
'
115
116
+test_expect_failure 'fetch --prune handles overlapping refspecs' '
117
+ cd "$D" &&
118
+ git update-ref refs/pull/42/head master &&
119
+ git clone . prune-overlapping &&
120
+ cd prune-overlapping &&
121
+ git config --add remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* &&
122
+
123
+ git fetch --prune origin &&
124
+ git rev-parse origin/master &&
125
+ git rev-parse origin/pr/42 &&
126
+
127
+ git config --unset-all remote.origin.fetch
128
+ git config remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* &&
129
+ git config --add remote.origin.fetch refs/heads/*:refs/remotes/origin/* &&
130
+
131
+ git fetch --prune origin &&
132
+ git rev-parse origin/master &&
133
+ git rev-parse origin/pr/42
134
+'
135
+
136
test_expect_success 'fetch --prune --tags does not delete the remote-tracking branches' '
137
cd "$D" &&
138
git clone . prune-tags &&