On Sat, 11 Oct 2008, Johannes Schindelin wrote: > 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. I think this is the right thing to do. > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > --- > 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; remote.h has a function for getting "the current branch", which would save 5 lines here: struct branch *current_branch = branch_get(NULL); if (!current_branch || is_bare_repository()) return; > + > + for (; ref_map; ref_map = ref_map->next) > + if (ref_map->peer_ref && !strcmp(HEAD, ref_map->peer_ref->name)) !strcmp(current_branch->ref_name, ref_map->peer_ref->name) (untested, and might be off by a "refs/" or something) > + 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) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html