Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasilii Iakliushin <viakliushin@gitlab.com>2022-02-09 13:25:35 +0300
committerVasilii Iakliushin <viakliushin@gitlab.com>2022-08-11 15:08:59 +0300
commit7750e95b0c1642eba9e325cf2dffbdd25b37c928 (patch)
tree4f8d151bcb86c0abe5d78b489b5dba35d5ab6247 /internal
parent434f167e9c0c9390b0c6a7e158872e3529f27bf8 (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.go76
-rw-r--r--internal/gitaly/service/ref/refs.go2
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)
}