Right now we stream tags if we are not sorting. If we are sorting, we save them in a list and print them at the end. Let's abstract this decision into a function to make it easier to add more cases where we use the list. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/tag.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/builtin/tag.c b/builtin/tag.c index 2adfc3d..3ef2fab 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -225,6 +225,11 @@ static void print_tag(const char *refname, const unsigned char *sha1, } } +static int filter_can_stream(struct tag_filter *filter) +{ + return !filter->sort; +} + static int show_reference(const char *refname, const unsigned char *sha1, int flag, void *cb_data) { @@ -244,7 +249,7 @@ static int show_reference(const char *refname, const unsigned char *sha1, if (points_at.nr && !match_points_at(refname, sha1)) return 0; - if (filter->sort) + if (!filter_can_stream(filter)) string_list_append(&filter->tags, refname)->util = hashdup(sha1); else print_tag(refname, sha1, filter->lines); @@ -273,11 +278,11 @@ static int list_tags(const char **patterns, int lines, filter.tags.strdup_strings = 1; for_each_tag_ref(show_reference, (void *) &filter); - if (sort) { + if ((sort & SORT_MASK) == VERCMP_SORT) + qsort(filter.tags.items, filter.tags.nr, + sizeof(struct string_list_item), sort_by_version); + if (!filter_can_stream(&filter)) { int i; - if ((sort & SORT_MASK) == VERCMP_SORT) - qsort(filter.tags.items, filter.tags.nr, - sizeof(struct string_list_item), sort_by_version); if (sort & REVERSE_SORT) for (i = filter.tags.nr - 1; i >= 0; i--) { struct string_list_item *it = &filter.tags.items[i]; -- 2.0.0.566.gfe3e6b2 -- 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