Re: [BUG?] git fetch -p -t prunes all non-tag refs

3 messages, 3 authors, 2016-06-15 · open the first message on its own page

Re: [BUG?] git fetch -p -t prunes all non-tag refs

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:52:07

Ben Boeckel [off-list ref] writes:
When the --prune and --tags options are given to git fetch together, all
non-tag refs are pruned because only tags are looked at and when pruning
it appears as if the branches have disappeared and are therefore deleted
locally.
I would call that a bug, and it is not limited to the use of "--tags". For
example, I suspect that

    $ git fetch --prune origin refs/heads/master:refs/remotes/origin/master

would prune remote tracking branches for "origin" other than "master".

Re: [BUG?] git fetch -p -t prunes all non-tag refs

From: Ben Boeckel <hidden>
Date: 2016-06-15 22:52:07

On Mon, Sep 26, 2011 at 15:30:33 -0700, Junio C Hamano wrote:
I would call that a bug, and it is not limited to the use of "--tags". For
example, I suspect that

    $ git fetch --prune origin refs/heads/master:refs/remotes/origin/master

would prune remote tracking branches for "origin" other than "master".
Indeed it does. Given that, should --prune be an error when a refspec is
given or when in combination with --tags?

--Ben

Re: [BUG?] git fetch -p -t prunes all non-tag refs

From: Carlos Martín Nieto <hidden>
Date: 2016-06-15 22:52:07

On Mon, 2011-09-26 at 15:30 -0700, Junio C Hamano wrote:
Ben Boeckel [off-list ref] writes:
quoted
When the --prune and --tags options are given to git fetch together, all
non-tag refs are pruned because only tags are looked at and when pruning
it appears as if the branches have disappeared and are therefore deleted
locally.
I would call that a bug, and it is not limited to the use of "--tags". For
example, I suspect that

    $ git fetch --prune origin refs/heads/master:refs/remotes/origin/master

would prune remote tracking branches for "origin" other than "master".
This should fix it (in a way). Let's agree that it's a bad idea and
complain to the user. Looking at the surrounding code, I can't find
anything obvious that would break, and `git fetch --prune --multiple a
b` is allowed.

Patch on top of maint.
--- 8< ---
Subject: [PATCH] fetch: disallow --prune in combination with tags or refspecs

Pruning shouldn't be used when other options limit the references that
should be taken into account. For example

    git fetch --prune --tags origin
    git fetch --prune origin refs/heads/*:refs/remotes/*

Both these commands would remove references which do still exist in
the remote.

Print an error and exit if prune is selected at the same time as
either tags are selected or a refspec is given.

Signed-off-by: Carlos Martín Nieto <redacted>
---
 builtin/fetch.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index e422ced..158b20a 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -967,6 +967,9 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
 			if (!add_remote_or_group(argv[i], &list))
 				die(_("No such remote or remote group: %s"), argv[i]);
 		result = fetch_multiple(&list);
+	} else if (prune && (argc == 2 || tags != TAGS_DEFAULT)) {
+		/* The if (multiple) is above so we don't report multiple remotes as an error */
+		die(_("Pruning and limiting refs is not compatible"));
 	} else {
 		/* Single remote or group */
 		(void) add_remote_or_group(argv[0], &list);
-- 
1.7.5.2.354.g349bf


Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help