git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 2/3] Make "git-remote prune" delete refs according to fetch specs
@ 2008-06-01  3:58 Shawn O. Pearce
  0 siblings, 0 replies; only message in thread
From: Shawn O. Pearce @ 2008-06-01  3:58 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

A remote may be configured to fetch into tracking branches that
do not match the remote name.  For example a user may have created
extra remotes that will fetch to the same tracking branch namespace,
but from different URLs:

  [remote "origin"]
	url = git://git.kernel.org/pub/scm/git/git.git
    fetch = refs/heads/*:refs/remotes/origin/*

  [remote "alt"]
	url = git://repo.or.cz/alt-git.git
    fetch = refs/heads/*:refs/remotes/origin/*

When running `git remote prune alt` we expect stale branches to
be removed from "refs/remotes/origin/*" and not from the unused
namespace of "refs/remotes/alt/*".

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 builtin-remote.c  |   21 ++-------------------
 t/t5505-remote.sh |   18 ++++++++++++++++++
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/builtin-remote.c b/builtin-remote.c
index c76fe2e..e5cfc88 100644
--- a/builtin-remote.c
+++ b/builtin-remote.c
@@ -419,27 +419,10 @@ static int show_or_prune(int argc, const char **argv, int prune)
 					states.remote->name);
 
 		if (prune) {
-			struct strbuf buf;
-			int prefix_len;
-
-			strbuf_init(&buf, 0);
-			if (states.remote->fetch_refspec_nr == 1 &&
-					states.remote->fetch->pattern &&
-					!strcmp(states.remote->fetch->src,
-						states.remote->fetch->dst))
-				/* handle --mirror remote */
-				strbuf_addstr(&buf, "refs/heads/");
-			else
-				strbuf_addf(&buf, "refs/remotes/%s/", *argv);
-			prefix_len = buf.len;
-
 			for (i = 0; i < states.stale.nr; i++) {
-				strbuf_setlen(&buf, prefix_len);
-				strbuf_addstr(&buf, states.stale.items[i].path);
-				result |= delete_ref(buf.buf, NULL);
+				const char *refname = states.stale.items[i].util;
+				result |= delete_ref(refname, NULL);
 			}
-
-			strbuf_release(&buf);
 			goto cleanup_states;
 		}
 
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index a37b6f5..0d7ed1f 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -164,6 +164,24 @@ test_expect_success 'add --mirror && prune' '
 	 git rev-parse --verify refs/heads/side)
 '
 
+test_expect_success 'add alt && prune' '
+	(mkdir alttst &&
+	 cd alttst &&
+	 git init &&
+	 git remote add -f origin ../one &&
+	 git config remote.alt.url ../one &&
+	 git config remote.alt.fetch "+refs/heads/*:refs/remotes/origin/*") &&
+	(cd one &&
+	 git branch -m side side2) &&
+	(cd alttst &&
+	 git rev-parse --verify refs/remotes/origin/side &&
+	 ! git rev-parse --verify refs/remotes/origin/side2 &&
+	 git fetch alt &&
+	 git remote prune alt &&
+	 ! git rev-parse --verify refs/remotes/origin/side &&
+	 git rev-parse --verify refs/remotes/origin/side2)
+'
+
 cat > one/expect << EOF
   apis/master
   apis/side
-- 
1.5.6.rc0.158.g7c7a1

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2008-06-01  3:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-06-01  3:58 [PATCH 2/3] Make "git-remote prune" delete refs according to fetch specs Shawn O. Pearce

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).