Skip to content

Commit e1ea0d3

Browse files
Sort releases in descending build_id order
1 parent a05d1d9 commit e1ea0d3

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

service/service_list.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
package service
1717

1818
import (
19+
"cmp"
1920
"context"
21+
"slices"
2022

2123
"github.com/arduino/arduino-flasher-cli/internal/updater"
2224
flasher "github.com/arduino/arduino-flasher-cli/rpc/cc/arduino/flasher/v1"
25+
"go.bug.st/f"
2326
)
2427

2528
func (s *flasherServerImpl) List(ctx context.Context, req *flasher.ListRequest) (*flasher.ListResponse, error) {
@@ -30,13 +33,23 @@ func (s *flasherServerImpl) List(ctx context.Context, req *flasher.ListRequest)
3033
return nil, err
3134
}
3235

33-
resp := &flasher.ListResponse{}
34-
for i := len(manifest.Releases) - 1; i >= 0; i-- {
35-
resp.Releases = append(resp.Releases, &flasher.Release{
36-
BuildId: manifest.Releases[i].Version,
37-
Latest: manifest.Releases[i].Version == manifest.Latest.Version,
38-
})
39-
}
36+
releases := f.Map(manifest.Releases, func(r updater.Release) *flasher.Release {
37+
return &flasher.Release{
38+
BuildId: r.Version,
39+
Latest: r.Version == manifest.Latest.Version,
40+
}
41+
})
42+
slices.SortFunc(releases, func(a, b *flasher.Release) int {
43+
if a.Latest {
44+
if b.Latest {
45+
return 0
46+
}
47+
return -1
48+
} else if b.Latest {
49+
return +1
50+
}
51+
return cmp.Compare(b.BuildId, a.BuildId)
52+
})
4053

41-
return resp, nil
54+
return &flasher.ListResponse{Releases: releases}, nil
4255
}

0 commit comments

Comments
 (0)