git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fetch: refuse to fetch into the current branch in a non-bare repository
@ 2008-10-11 11:38 Johannes Schindelin
  2008-10-11 21:44 ` Junio C Hamano
                   ` (2 more replies)
  0 siblings, 3 replies; 24+ messages in thread
From: Johannes Schindelin @ 2008-10-11 11:38 UTC (permalink / raw)
  To: git, gitster, spearce


Some confusing tutorials suggest that it would be a good idea to call
something like this:

	git pull origin master:master

While it might make sense to store what you want to merge, it typically
is plain wrong.  Especially so when the current branch is "master".

Be at least a little bit helpful by refusing to fetch something into
the current branch.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 builtin-fetch.c   |   20 ++++++++++++++++++++
 t/t5505-remote.sh |    2 +-
 t/t5510-fetch.sh  |    6 ++++++
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/builtin-fetch.c b/builtin-fetch.c
index ee93d3a..d701550 100644
--- a/builtin-fetch.c
+++ b/builtin-fetch.c
@@ -534,6 +534,25 @@ static void find_non_local_tags(struct transport *transport,
 	string_list_clear(&new_refs, 0);
 }
 
+static void check_ref_map(struct ref *ref_map)
+{
+	int flag;
+	unsigned char sha1[20];
+	const char *HEAD;
+
+	if (is_bare_repository())
+		return;
+
+	HEAD = resolve_ref("HEAD", sha1, 1, &flag);
+
+	if (!HEAD || !(flag & REF_ISSYMREF))
+		return;
+
+	for (; ref_map; ref_map = ref_map->next)
+		if (ref_map->peer_ref && !strcmp(HEAD, ref_map->peer_ref->name))
+			die("Refusing to fetch into current branch");
+}
+
 static int do_fetch(struct transport *transport,
 		    struct refspec *refs, int ref_count)
 {
@@ -558,6 +577,7 @@ static int do_fetch(struct transport *transport,
 	}
 
 	ref_map = get_ref_map(transport, refs, ref_count, tags, &autotags);
+	check_ref_map(ref_map);
 
 	for (rm = ref_map; rm; rm = rm->next) {
 		if (rm->peer_ref)
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index c449663..0103e1a 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -188,7 +188,7 @@ test_expect_success 'prune --dry-run' '
 test_expect_success 'add --mirror && prune' '
 	(mkdir mirror &&
 	 cd mirror &&
-	 git init &&
+	 git init --bare &&
 	 git remote add --mirror -f origin ../one) &&
 	(cd one &&
 	 git branch -m side2 side) &&
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 9aae496..cd8b550 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -323,4 +323,10 @@ test_expect_success 'auto tag following fetches minimum' '
 	)
 '
 
+test_expect_success 'refuse to fetch into the current branch' '
+
+	test_must_fail git fetch . side:master
+
+'
+
 test_done
-- 
1.6.0.2.749.g0cc32

^ permalink raw reply related	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2008-10-14 22:55 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-11 11:38 [PATCH] fetch: refuse to fetch into the current branch in a non-bare repository Johannes Schindelin
2008-10-11 21:44 ` Junio C Hamano
2008-10-12 18:47   ` Shawn O. Pearce
2008-10-13  9:28     ` Johannes Schindelin
2008-10-12 18:52 ` Shawn O. Pearce
2008-10-12 20:37 ` Daniel Barkalow
2008-10-13  9:36   ` [PATCH v2] Fix fetch/pull when run without --update-head-ok Johannes Schindelin
2008-10-13 14:09     ` Shawn O. Pearce
2008-10-13 17:57       ` Johannes Schindelin
2008-10-13 14:23     ` Junio C Hamano
2008-10-13 17:30       ` Junio C Hamano
2008-10-13 18:12       ` Johannes Schindelin
2008-10-13 20:05         ` Daniel Barkalow
2008-10-14  9:49           ` Johannes Schindelin
2008-10-14 15:02             ` Shawn O. Pearce
2008-10-14 16:04               ` Daniel Barkalow
2008-10-14 16:15               ` Johannes Schindelin
2008-10-14 15:57             ` Daniel Barkalow
2008-10-14 16:17               ` Johannes Schindelin
2008-10-14 16:52                 ` Daniel Barkalow
2008-10-14 17:02                   ` Daniel Barkalow
2008-10-14 22:07                     ` Junio C Hamano
2008-10-14 22:53                       ` [PATCH] pull: allow "git pull origin $something:$current_branch" into an unborn branch Junio C Hamano
2008-10-13 17:08     ` [PATCH v2] Fix fetch/pull when run without --update-head-ok Daniel Barkalow

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 NNTP newsgroup(s).