diff options
author | Vasilii Iakliushin <viakliushin@gitlab.com> | 2022-02-09 13:25:35 +0300 |
---|---|---|
committer | Vasilii Iakliushin <viakliushin@gitlab.com> | 2022-08-11 15:08:59 +0300 |
commit | 7750e95b0c1642eba9e325cf2dffbdd25b37c928 (patch) | |
tree | 4f8d151bcb86c0abe5d78b489b5dba35d5ab6247 /internal | |
parent | 434f167e9c0c9390b0c6a7e158872e3529f27bf8 (diff) |
Use semantic sort for tags
Contributes to https://gitlab.com/gitlab-org/gitlab/-/issues/17801
**Problem**
Default sort by name for tags often does not produce the expected
result.
```
v1.1.0
v1.10.0
v1.2.0
```
**Solution**
Use semantic sort for tag names
```
v1.1.0
v1.2.0
v1.10.0
```
Changelog: changed
Diffstat (limited to 'internal')
-rw-r--r-- | internal/gitaly/service/ref/find_all_tags_test.go | 76 | ||||
-rw-r--r-- | internal/gitaly/service/ref/refs.go | 2 |
2 files changed, 56 insertions, 22 deletions
diff --git a/internal/gitaly/service/ref/find_all_tags_test.go b/internal/gitaly/service/ref/find_all_tags_test.go index d270ad956..e3b9042d1 100644 --- a/internal/gitaly/service/ref/find_all_tags_test.go +++ b/internal/gitaly/service/ref/find_all_tags_test.go @@ -583,45 +583,77 @@ func TestFindAllTags_sorted(t *testing.T) { require.NoError(t, repo.ExecAndWait(ctx, git.SubCmd{ Name: "tag", - Args: []string{"not-annotated", headCommit.Id}, + Args: []string{"v1.2.0", headCommit.Id}, + }, git.WithDisabledHooks())) + + require.NoError(t, repo.ExecAndWait(ctx, git.SubCmd{ + Name: "tag", + Args: []string{"v1.10.0", headCommit.Id}, }, git.WithDisabledHooks())) for _, tc := range []struct { desc string sortBy *gitalypb.FindAllTagsRequest_SortBy - exp []string + exp map[string]string }{ { desc: "by name", sortBy: &gitalypb.FindAllTagsRequest_SortBy{Key: gitalypb.FindAllTagsRequest_SortBy_REFNAME}, - exp: []string{ - annotatedTagID.String(), - headCommit.Id, - "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", - "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", - "8f03acbcd11c53d9c9468078f32a2622005a4841", + exp: map[string]string{ + "annotated": annotatedTagID.String(), + "v1.0.0": "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", + "v1.1.0": "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", + "v1.1.1": "8f03acbcd11c53d9c9468078f32a2622005a4841", + "v1.10.0": headCommit.Id, + "v1.2.0": headCommit.Id, + }, + }, + { + desc: "by semantic name in ascending order", + sortBy: &gitalypb.FindAllTagsRequest_SortBy{Key: gitalypb.FindAllTagsRequest_SortBy_VERSION_REFNAME, Direction: gitalypb.SortDirection_ASCENDING}, + exp: map[string]string{ + "annotated": annotatedTagID.String(), + "v1.0.0": "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", + "v1.1.0": "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", + "v1.1.1": "8f03acbcd11c53d9c9468078f32a2622005a4841", + "v1.2.0": headCommit.Id, + "v1.10.0": headCommit.Id, + }, + }, + { + desc: "by semantic name in descending order", + sortBy: &gitalypb.FindAllTagsRequest_SortBy{Key: gitalypb.FindAllTagsRequest_SortBy_VERSION_REFNAME, Direction: gitalypb.SortDirection_DESCENDING}, + exp: map[string]string{ + "v1.10.0": headCommit.Id, + "v1.2.0": headCommit.Id, + "v1.1.1": "8f03acbcd11c53d9c9468078f32a2622005a4841", + "v1.1.0": "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", + "v1.0.0": "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", + "annotated": annotatedTagID.String(), }, }, { desc: "by updated in ascending order", sortBy: &gitalypb.FindAllTagsRequest_SortBy{Key: gitalypb.FindAllTagsRequest_SortBy_CREATORDATE, Direction: gitalypb.SortDirection_ASCENDING}, - exp: []string{ - "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", - "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", - headCommit.Id, - "8f03acbcd11c53d9c9468078f32a2622005a4841", - annotatedTagID.String(), + exp: map[string]string{ + "v1.0.0": "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", + "v1.1.0": "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", + "v1.10.0": headCommit.Id, + "v1.2.0": headCommit.Id, + "v1.1.1": "8f03acbcd11c53d9c9468078f32a2622005a4841", + "annotated": annotatedTagID.String(), }, }, { desc: "by updated in descending order", sortBy: &gitalypb.FindAllTagsRequest_SortBy{Key: gitalypb.FindAllTagsRequest_SortBy_CREATORDATE, Direction: gitalypb.SortDirection_DESCENDING}, - exp: []string{ - annotatedTagID.String(), - "8f03acbcd11c53d9c9468078f32a2622005a4841", - headCommit.Id, - "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", - "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", + exp: map[string]string{ + "annotated": annotatedTagID.String(), + "v1.1.0": "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b", + "v1.10.0": headCommit.Id, + "v1.2.0": headCommit.Id, + "v1.1.1": "8f03acbcd11c53d9c9468078f32a2622005a4841", + "v1.0.0": "f4e6814c3e4e7a0de82a9e7cd20c626cc963a2f8", }, }, } { @@ -632,7 +664,7 @@ func TestFindAllTags_sorted(t *testing.T) { }) require.NoError(t, err) - var tags []string + tags := make(map[string]string) for { r, err := c.Recv() if err == io.EOF { @@ -640,7 +672,7 @@ func TestFindAllTags_sorted(t *testing.T) { } require.NoError(t, err) for _, tag := range r.GetTags() { - tags = append(tags, tag.Id) + tags[string(tag.Name)] = tag.Id } } diff --git a/internal/gitaly/service/ref/refs.go b/internal/gitaly/service/ref/refs.go index 0e1f13eb6..ca67ce8ed 100644 --- a/internal/gitaly/service/ref/refs.go +++ b/internal/gitaly/service/ref/refs.go @@ -234,6 +234,8 @@ func getTagSortField(sortBy *gitalypb.FindAllTagsRequest_SortBy) (string, error) key = "refname" case gitalypb.FindAllTagsRequest_SortBy_CREATORDATE: key = "creatordate" + case gitalypb.FindAllTagsRequest_SortBy_VERSION_REFNAME: + key = "version:refname" default: return "", fmt.Errorf("unsupported sorting key: %s", sortBy.Key) } |