git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] fetch: add a failing test for prunning with overlapping refspecs

From
Carlos Martín Nieto <cmn@elego.de>
Date
Feb 27, 2014, 09:00 UTC
Message-ID
<1393491610-19476-1-git-send-email-cmn@elego.de>
From: Carlos Martín Nieto <cmn@dwim.me>

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

This setup is used by GitHub for Windows, but nobody has noticed this break because it puts the PR refspec in the system config, which makes that one the first. I was alerted to this by someone who had done this setup manually and thus added the PR refspec after the default one.

 t/t5510-fetch.sh | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 1f0f8e6..4949e3d 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -113,6 +113,26 @@ test_expect_success 'fetch --prune with a namespace keeps other namespaces' '
 	git rev-parse origin/master
 '
 
+test_expect_failure 'fetch --prune handles overlapping refspecs' '
+	cd "$D" &&
+	git update-ref refs/pull/42/head master &&
+	git clone . prune-overlapping &&
+	cd prune-overlapping &&
+	git config --add remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* &&
+
+	git fetch --prune origin &&
+	git rev-parse origin/master &&
+	git rev-parse origin/pr/42 &&
+
+	git config --unset-all remote.origin.fetch
+	git config remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* &&
+	git config --add remote.origin.fetch refs/heads/*:refs/remotes/origin/* &&
+
+	git fetch --prune origin &&
+	git rev-parse origin/master &&
+	git rev-parse origin/pr/42
+'
+
 test_expect_success 'fetch --prune --tags does not delete the remote-tracking branches' '
 	cd "$D" &&
 	git clone . prune-tags &&
-- 
1.9.0.rc3.244.g3497008
Next: Carlos Martín Nieto
Message 1 of 11 in “fetch: add a failing test for prunning with overlapping refspecs”
  1. 1/2 fetch: add a failing test for prunning with overlapping refspecsCarlos Martín Nieto, Feb 27, 2014
  2. 2/2 fetch: handle overlaping refspecs on --pruneCarlos Martín Nieto, Feb 27, 2014
  3. Michael HaggertyFeb 27, 2014
  4. Carlos Martín NietoFeb 27, 2014
  5. Junio C HamanoFeb 27, 2014
  6. Junio C HamanoFeb 27, 2014
  7. Carlos Martín NietoFeb 28, 2014
  8. Junio C HamanoFeb 28, 2014
  9. Junio C HamanoMar 24, 2014
  10. Eric SunshineFeb 27, 2014
  11. Eric SunshineFeb 27, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.