* [PATCH] t7004: check existence of correct tag
@ 2019-11-13 19:39 Martin Ågren
2019-11-14 6:35 ` Jeff King
0 siblings, 1 reply; 3+ messages in thread
From: Martin Ågren @ 2019-11-13 19:39 UTC (permalink / raw)
To: git
We try to delete the non-existing tag "anothertag", but for the
verifications, we check that the tag "myhead" doesn't exist. "myhead"
isn't used in this test except for this checking. Comparing to the test
two tests earlier, it looks like a copy-paste mistake.
Perhaps it's overkill to check that `git tag -d` didn't decide to
*create* a tag. But since we're trying to be this careful, let's
actually check the correct tag. While we're doing this, let's use a more
descriptive tag name instead -- "nonexistingtag" should be obvious.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
This is a resend of
https://public-inbox.org/git/20190808125330.3104954-1-martin.agren@gmail.com/
t/t7004-tag.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index 80eb13d94e..e4cf605907 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -227,10 +227,10 @@ test_expect_success \
test_expect_success \
'trying to delete two tags, existing and not, should fail in the 2nd' '
tag_exists mytag &&
- ! tag_exists myhead &&
- test_must_fail git tag -d mytag anothertag &&
+ ! tag_exists nonexistingtag &&
+ test_must_fail git tag -d mytag nonexistingtag &&
! tag_exists mytag &&
- ! tag_exists myhead
+ ! tag_exists nonexistingtag
'
test_expect_success 'trying to delete an already deleted tag should fail' \
--
2.24.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] t7004: check existence of correct tag
2019-11-13 19:39 [PATCH] t7004: check existence of correct tag Martin Ågren
@ 2019-11-14 6:35 ` Jeff King
0 siblings, 0 replies; 3+ messages in thread
From: Jeff King @ 2019-11-14 6:35 UTC (permalink / raw)
To: Martin Ågren; +Cc: git
On Wed, Nov 13, 2019 at 08:39:02PM +0100, Martin Ågren wrote:
> We try to delete the non-existing tag "anothertag", but for the
> verifications, we check that the tag "myhead" doesn't exist. "myhead"
> isn't used in this test except for this checking. Comparing to the test
> two tests earlier, it looks like a copy-paste mistake.
Thanks, the description and patch look good to me.
> Perhaps it's overkill to check that `git tag -d` didn't decide to
> *create* a tag. But since we're trying to be this careful, let's
> actually check the correct tag. While we're doing this, let's use a more
> descriptive tag name instead -- "nonexistingtag" should be obvious.
Yes, that would be a spectacular bug indeed. :)
I think it's fine to keep it in, though, as it communicates the
expectations pretty clearly.
-Peff
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] delete multiple tags in a single transaction
@ 2019-08-08 12:47 Martin Ågren
2019-08-08 12:53 ` [PATCH] t7004: check existence of correct tag Martin Ågren
0 siblings, 1 reply; 3+ messages in thread
From: Martin Ågren @ 2019-08-08 12:47 UTC (permalink / raw)
To: Phil Hord; +Cc: Git Mailing List
On Thu, 8 Aug 2019 at 06:09, Phil Hord <phil.hord@gmail.com> wrote:
> I have a repo with 24,000 tags, most of which are not useful to any
> developers. Having this many refs slows down many operations that
> would otherwise be very fast. Removing these tags when they've been
> accidentally fetched again takes about 30 minutes using delete_ref.
>
> git tag -l feature/* | xargs git tag -d
>
> Removing the same tags using delete_refs takes less than 5 seconds.
This looks worthwhile pursuing...
> -static int delete_tag(const char *name, const char *ref,
> - const struct object_id *oid, const void *cb_data)
> +struct tag_args {
> + char *oid_abbrev;
> + char *refname;
> +};
> +
> +static int make_string_list(const char *name, const char *ref,
> + const struct object_id *oid, void *cb_data)
> {
> - if (delete_ref(NULL, ref, oid, 0))
> - return 1;
This provides `oid` for verifying that the tag actually points at that
particular oid before deleting. As far as I can tell, `oid` is no longer
used like that in the post-image. I'm not sure it matters, since we just
looked it up, but that might be worth mentioning, perhaps.
> - printf(_("Deleted tag '%s' (was %s)\n"), name,
> - find_unique_abbrev(oid, DEFAULT_ABBREV));
> + struct string_list *ref_list = cb_data;
> + struct tag_args *info = xmalloc(sizeof(struct tag_args));
> +
> + string_list_append(ref_list, ref);
> +
> + info->oid_abbrev = xstrdup(find_unique_abbrev(oid, DEFAULT_ABBREV));
> + info->refname = xstrdup(name);
> + ref_list->items[ref_list->nr - 1].util = info;
> return 0;
> }
>
> +static int delete_tags(const char **argv)
> +{
> + int result;
> + struct string_list ref_list = STRING_LIST_INIT_DUP;
> + struct string_list_item *ref_list_item;
> +
> + result = for_each_tag_name(argv, make_string_list, (void *) &ref_list);
If any tag is non-existing (or some other error happens here), we don't
continue to the actual deleting. That breaks t7004 which has a test for
removing an existing and a non-existing tag -- it wants the existing one
to be removed and the non-existing one not to interfere.
> + if (!result)
> + result = delete_refs(NULL, &ref_list, REF_NO_DEREF);
So this should perhaps be something more like an unconditional
result |= delete_refs(...);
That makes the test suite happy, but perhaps only short-term ... See
below...
> + for_each_string_list_item(ref_list_item, &ref_list) {
> + struct tag_args * info = ref_list_item->util;
> + if (!result)
> + printf(_("Deleted tag '%s' (was %s)\n"), info->refname,
> + info->oid_abbrev);
Change this conditional here, too, methinks. You'd need to separate
errors from looking up tags from errors about deleting refs, so having a
single "result" is probably not sufficient.
Probably worth inspecting the output of that `git tag -d` a bit in
t7004, to make sure we just claim to delete one tag, and have errors.
Your patch reshuffles the error and success messages (for certain
usages). I think that's ok, but might be worth mentioning.
I'm not too familiar with the refs API, so take this with a grain of
salt...
> + free(info->oid_abbrev);
> + free(info->refname);
> + free(info);
> + }
> + string_list_clear(&ref_list, 0);
> + return result;
> +}
Martin
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] t7004: check existence of correct tag
2019-08-08 12:47 [PATCH 1/1] delete multiple tags in a single transaction Martin Ågren
@ 2019-08-08 12:53 ` Martin Ågren
0 siblings, 0 replies; 3+ messages in thread
From: Martin Ågren @ 2019-08-08 12:53 UTC (permalink / raw)
To: Phil Hord; +Cc: git
We try to delete the non-existing tag "anothertag", but for the
verifications, we check that the tag "myhead" doesn't exist. "myhead"
isn't used in this test except for this checking. Comparing to the test
two tests earlier, it looks like a copy-paste mistake.
Perhaps it's overkill to check that `git tag -d` didn't decide to
*create* a tag. But since we're trying to be this careful, let's
actually check the correct tag. While we're doing this, let's use a more
descriptive tag name instead -- "nonexistingtag" should be obvious.
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
---
> Probably worth inspecting the output of that `git tag -d` a bit in
> t7004, to make sure we just claim to delete one tag, and have errors.
Here's something I noticed while looking into this test. If you do
expand on this test, feel free to pick this up, either as a preparatory
patch or squash it into your "expand test" patch (if you do one). If
you don't pick this up at all, I'll pursue it separately, later.
Martin
t/t7004-tag.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index 80eb13d94e..e4cf605907 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -227,10 +227,10 @@ test_expect_success \
test_expect_success \
'trying to delete two tags, existing and not, should fail in the 2nd' '
tag_exists mytag &&
- ! tag_exists myhead &&
- test_must_fail git tag -d mytag anothertag &&
+ ! tag_exists nonexistingtag &&
+ test_must_fail git tag -d mytag nonexistingtag &&
! tag_exists mytag &&
- ! tag_exists myhead
+ ! tag_exists nonexistingtag
'
test_expect_success 'trying to delete an already deleted tag should fail' \
--
2.23.0.rc0.30.g51cf315870
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-11-14 6:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-13 19:39 [PATCH] t7004: check existence of correct tag Martin Ågren
2019-11-14 6:35 ` Jeff King
-- strict thread matches above, loose matches on Subject: below --
2019-08-08 12:47 [PATCH 1/1] delete multiple tags in a single transaction Martin Ågren
2019-08-08 12:53 ` [PATCH] t7004: check existence of correct tag Martin Ågren
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).