* [PATCH] tag: --force is quiet about new tags
@ 2013-03-12 23:13 Phil Hord
2013-03-13 3:33 ` Junio C Hamano
0 siblings, 1 reply; 4+ messages in thread
From: Phil Hord @ 2013-03-12 23:13 UTC (permalink / raw)
To: git; +Cc: phil.hord, Michael J Gruber, Junio C Hamano, Phil Hord
git tag --force is used to replace an existing tag with
a new reference. Git helpfully tells the user the old
ref when this happens. But if the tag name is new and does
not exist, git tells the user the old ref anyway (000000).
Teach git to ignore --force if the tag is new. Add a test
for this and also to ensure --force can replace tags at all.
Signed-off-by: Phil Hord <hordp@cisco.com>
---
builtin/tag.c | 2 +-
t/t7004-tag.sh | 12 ++++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/builtin/tag.c b/builtin/tag.c
index f826688..af3af3f 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -582,7 +582,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
die(_("%s: cannot lock the ref"), ref.buf);
if (write_ref_sha1(lock, object, NULL) < 0)
die(_("%s: cannot update the ref"), ref.buf);
- if (force && hashcmp(prev, object))
+ if (force && !is_null_sha1(prev) && hashcmp(prev, object))
printf(_("Updated tag '%s' (was %s)\n"), tag, find_unique_abbrev(prev, DEFAULT_ABBREV));
strbuf_release(&buf);
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index f5a79b1..c8d6e9f 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -104,6 +104,18 @@ test_expect_success 'creating a tag using HEAD directly should succeed' '
tag_exists myhead
'
+test_expect_success '--force can create a tag with the name of one existing' '
+ tag_exists mytag &&
+ git tag --force mytag &&
+ tag_exists mytag'
+
+test_expect_success '--force is moot with a non-existing tag name' '
+ git tag newtag >expect &&
+ git tag --force forcetag >actual &&
+ test_cmp expect actual
+'
+git tag -d newtag forcetag
+
# deleting tags:
test_expect_success 'trying to delete an unknown tag should fail' '
--
1.8.2.rc3.394.g2617418.dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] tag: --force is quiet about new tags
2013-03-12 23:13 [PATCH] tag: --force is quiet about new tags Phil Hord
@ 2013-03-13 3:33 ` Junio C Hamano
2013-03-13 4:21 ` Phil Hord
0 siblings, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2013-03-13 3:33 UTC (permalink / raw)
To: Phil Hord; +Cc: git, phil.hord, Michael J Gruber
Phil Hord <hordp@cisco.com> writes:
> git tag --force is used to replace an existing tag with
> a new reference. Git helpfully tells the user the old
> ref when this happens. But if the tag name is new and does
> not exist, git tells the user the old ref anyway (000000).
>
> Teach git to ignore --force if the tag is new. Add a test
> for this and also to ensure --force can replace tags at all.
>
> Signed-off-by: Phil Hord <hordp@cisco.com>
> ---
I think we would still want to allow the operation to go through,
even when the --force option is given, to create a new tag. I agree
that the message should not say "Updated". So teaching Git not to
issue the "Updated" message makes perfect sense. It is somewhat
misleading to say we are teaching Git to ignore the option, though.
Thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] tag: --force is quiet about new tags
2013-03-13 3:33 ` Junio C Hamano
@ 2013-03-13 4:21 ` Phil Hord
2013-03-13 9:16 ` Michael J Gruber
0 siblings, 1 reply; 4+ messages in thread
From: Phil Hord @ 2013-03-13 4:21 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Phil Hord, git@vger.kernel.org, Michael J Gruber
On Tue, Mar 12, 2013 at 11:33 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Phil Hord <hordp@cisco.com> writes:
>
>> git tag --force is used to replace an existing tag with
>> a new reference. Git helpfully tells the user the old
>> ref when this happens. But if the tag name is new and does
>> not exist, git tells the user the old ref anyway (000000).
>>
>> Teach git to ignore --force if the tag is new. Add a test
>> for this and also to ensure --force can replace tags at all.
>>
>> Signed-off-by: Phil Hord <hordp@cisco.com>
>> ---
>
> I think we would still want to allow the operation to go through,
> even when the --force option is given, to create a new tag. I agree
> that the message should not say "Updated". So teaching Git not to
> issue the "Updated" message makes perfect sense. It is somewhat
> misleading to say we are teaching Git to ignore the option, though.
>
> Thanks.
My phrasing was too ambiguous. What you described is exactly what the
patch does. --force is superfluous when the tag does not already
exist. It is only checked in two places, and one of those is to
decide whether to print the "Updated" message. How's this?
Teach 'git tag --force' to suppress the update message if
the tag is new. Add a test for this and also to ensure
--force can replace tags at all.
Phil
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] tag: --force is quiet about new tags
2013-03-13 4:21 ` Phil Hord
@ 2013-03-13 9:16 ` Michael J Gruber
0 siblings, 0 replies; 4+ messages in thread
From: Michael J Gruber @ 2013-03-13 9:16 UTC (permalink / raw)
To: Phil Hord; +Cc: Junio C Hamano, Phil Hord, git@vger.kernel.org
Phil Hord venit, vidit, dixit 13.03.2013 05:21:
> On Tue, Mar 12, 2013 at 11:33 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> Phil Hord <hordp@cisco.com> writes:
>>
>>> git tag --force is used to replace an existing tag with
>>> a new reference. Git helpfully tells the user the old
>>> ref when this happens. But if the tag name is new and does
>>> not exist, git tells the user the old ref anyway (000000).
>>>
>>> Teach git to ignore --force if the tag is new. Add a test
>>> for this and also to ensure --force can replace tags at all.
>>>
>>> Signed-off-by: Phil Hord <hordp@cisco.com>
>>> ---
>>
>> I think we would still want to allow the operation to go through,
>> even when the --force option is given, to create a new tag. I agree
>> that the message should not say "Updated". So teaching Git not to
>> issue the "Updated" message makes perfect sense. It is somewhat
>> misleading to say we are teaching Git to ignore the option, though.
>>
>> Thanks.
>
> My phrasing was too ambiguous. What you described is exactly what the
> patch does. --force is superfluous when the tag does not already
> exist. It is only checked in two places, and one of those is to
> decide whether to print the "Updated" message. How's this?
>
> Teach 'git tag --force' to suppress the update message if
> the tag is new. Add a test for this and also to ensure
> --force can replace tags at all.
>
> Phil
Looks good to me, both the patch and the (updated) commit message.
Michael
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-03-13 9:17 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-12 23:13 [PATCH] tag: --force is quiet about new tags Phil Hord
2013-03-13 3:33 ` Junio C Hamano
2013-03-13 4:21 ` Phil Hord
2013-03-13 9:16 ` Michael J Gruber
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).