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 &&