threads / patch / 25251

patchbuiltin/fetch: print hash of deleted tag when updating

Subject: [PATCH] builtin/fetch: print hash of deleted tag when updating

## tl;dr

6 messages between Sep 26, 2010 and Oct 10, 2010. Diffs are folded; open one to read it.

replies: 5people: 3as markdown or json

Knittl· Sep 26, 2010, 16:10 UTC · lore
>From b1c2b07aa1f5db25ebdf190aa12ccb66a17f131a Mon Sep 17 00:00:00 2001
From: Daniel Knittl-Frank <knittl89+git@googlemail.com>
Date: Sun, 26 Sep 2010 11:29:16 +0200
Subject: [PATCH] builtin/fetch: print hash of deleted tag when updating

`git fetch --tags` will unconditionally update (and thus overwrite) existing tags, which is especially annoying for annotated and signed tags.

Print the hash of the deleted tag so users can manually recover their tags from such an update.

Signed-off-by: Daniel Knittl-Frank <knittl89+git@googlemail.com>
---
 builtin/fetch.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
Show changes to builtin/fetch.c +3 −2
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 6fc5047..3c2eac4 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -253,9 +253,10 @@ static int update_local_ref(struct ref *ref,
 	    !prefixcmp(ref->name, "refs/tags/")) {
 		int r;
 		r = s_update_ref("updating tag", ref, 0);
-		sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '-',
+		sprintf(display, "%c %-*s %-*s -> %s%s (was %s)", r ? '!' : '-',
 			TRANSPORT_SUMMARY_WIDTH, "[tag update]", REFCOL_WIDTH, remote,
-			pretty_ref, r ? "  (unable to update local ref)" : "");
+			pretty_ref, r ? "  (unable to update local ref)" : "",
+			find_unique_abbrev(ref->old_sha1, DEFAULT_ABBREV));
 		return r;
 	}
-- 
1.7.3.68.gb1c2b


-- 
typed with http://neo-layout.org
myFtPhp -- visit http://myftphp.sf.net -- v. 0.4.7 released!
Junio C Hamano· Sep 26, 2010, 21:41 UTC · re: Knittl · lore

Re: [PATCH] builtin/fetch: print hash of deleted tag when updating

Knittl <knittl89@googlemail.com> writes:
Show 8 quoted lines
> From b1c2b07aa1f5db25ebdf190aa12ccb66a17f131a Mon Sep 17 00:00:00 2001
> From: Daniel Knittl-Frank <knittl89+git@googlemail.com>
> Date: Sun, 26 Sep 2010 11:29:16 +0200
> Subject: [PATCH] builtin/fetch: print hash of deleted tag when updating
>
> `git fetch --tags` will unconditionally update (and thus overwrite)
> existing tags, which is especially annoying for annotated and signed
> tags.

The first question is why s/he is running fetch with --tags if overwriting is unwelcome/annoying. "--tags" is meant to be used when the auto-follow behaviour of normal fetch is not sufficient and the user actively wants to get the latest (potentially updated) ones; would it be possible that you are solving a wrong problem?

Knittl· Sep 27, 2010, 07:09 UTC · re: Junio C Hamano · lore

Re: [PATCH] builtin/fetch: print hash of deleted tag when updating

On Sun, Sep 26, 2010 at 11:41 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 16 quoted lines
> Knittl <knittl89@googlemail.com> writes:
>
>> From b1c2b07aa1f5db25ebdf190aa12ccb66a17f131a Mon Sep 17 00:00:00 2001
>> From: Daniel Knittl-Frank <knittl89+git@googlemail.com>
>> Date: Sun, 26 Sep 2010 11:29:16 +0200
>> Subject: [PATCH] builtin/fetch: print hash of deleted tag when updating
>>
>> `git fetch --tags` will unconditionally update (and thus overwrite)
>> existing tags, which is especially annoying for annotated and signed
>> tags.
>
> The first question is why s/he is running fetch with --tags if overwriting
> is unwelcome/annoying.  "--tags" is meant to be used when the auto-follow
> behaviour of normal fetch is not sufficient and the user actively wants to
> get the latest (potentially updated) ones; would it be possible that you
> are solving a wrong problem?

yes, i know that tags are only overwritten with `git fetch --tags` and not during normal fetch operations. nevertheless, manually looking at tags and find the ones which would be overwritten is cumbersome and errorprone.

imho this patch doesn't hurt, only adding "(was $HASH)" -- and in case a user decides, that he suddenly wants to keep one of his (updated) tags, he can recover them quickly by echoing the hash into .git/refs/tags/new-name-for-my-tag. otherwise the use would have to run git fsck and find dangling hashes.

again, i'm not changing behavior of `git fetch --tags`, i'm simply providing additional output to help you recover your own tags. case: possibly conflicting tags and you want to 'merge' your tags with upstream tags.

if you deem it unnecessary, ok, nothing i can do about that ;)
-- 
typed with http://neo-layout.org
myFtPhp -- visit http://myftphp.sf.net -- v. 0.4.7 released!
Peter Kjellerstedt· Sep 27, 2010, 11:37 UTC · re: Junio C Hamano · lore

RE: [PATCH] builtin/fetch: print hash of deleted tag when updating

Show 22 quoted lines
> -----Original Message-----
> From: git-owner@vger.kernel.org [mailto:git-owner@vger.kernel.org] On
> Behalf Of Junio C Hamano
> Sent: den 26 september 2010 23:42
> To: Knittl
> Cc: git@vger.kernel.org
> Subject: Re: [PATCH] builtin/fetch: print hash of deleted tag when
> updating
> 
> Knittl <knittl89@googlemail.com> writes:
> 
> > From b1c2b07aa1f5db25ebdf190aa12ccb66a17f131a Mon Sep 17 00:00:00 2001
> > From: Daniel Knittl-Frank <knittl89+git@googlemail.com>
> > Date: Sun, 26 Sep 2010 11:29:16 +0200
> > Subject: [PATCH] builtin/fetch: print hash of deleted tag when updating
> >
> > `git fetch --tags` will unconditionally update (and thus overwrite)
> > existing tags, which is especially annoying for annotated and signed
> > tags.
> 
> The first question is why s/he is running fetch with --tags if overwriting
> is unwelcome/annoying.

Maybe because the user is a git newbie who has just started to learn her first git commands and found --tags in the manual page, thinking "oh, nice, this will make sure I get all tags". Or because she added it to remote.<name>.tagopt without knowing that it would overwrite tags in this way.

> "--tags" is meant to be used when the auto-follow
> behaviour of normal fetch is not sufficient and the user actively wants to
> get the latest (potentially updated) ones;

If that (i.e., potentially updated) is the intention, it is not mentioned in the manual page for fetch. Further, reading "On Re-tagging" in the manual page for git tag, it says "Git does not (and it should not) change tags behind users back" (which I agree with) but it seems contrary to what --tags does...

Shouldn't this behavior of --tags require --force to keep in line with what is described in git tag's manual page? If not, a big warning sign is needed in the manual page description of --tags.

> would it be possible that you are solving a wrong problem?

Since git reflog does not support showing how a tag has changed, I think something like Daniel's patch is a good idea, as the alternative is to use git fsck and start digging...

//Peter
Junio C Hamano· Sep 27, 2010, 16:38 UTC · re: Peter Kjellerstedt · lore

Re: [PATCH] builtin/fetch: print hash of deleted tag when updating

Peter Kjellerstedt <peter.kjellerstedt@axis.com> writes:
> Shouldn't this behavior of --tags require --force to keep in line 
> with what is described in git tag's manual page?
Sounds sensible, if nobody is already relying on this behaviour.
Knittl· Oct 10, 2010, 13:17 UTC · re: Junio C Hamano · lore

Re: [PATCH] builtin/fetch: print hash of deleted tag when updating

On Mon, Sep 27, 2010 at 6:38 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 6 quoted lines
> Peter Kjellerstedt <peter.kjellerstedt@axis.com> writes:
>
>> Shouldn't this behavior of --tags require --force to keep in line
>> with what is described in git tag's manual page?
>
> Sounds sensible, if nobody is already relying on this behaviour.
any updates on this one?

even if we require the --force option it wouldn't hurt if we displayed the old hash, does it?

-- 
typed with http://neo-layout.org
myFtPhp -- visit http://myftphp.sf.net -- v. 0.4.7 released!

← back to recent threads