Skip to content

Commit 062cfd0

Browse files
committed
Sort OSFeatures on format
Ensure the formatting output is consistent Signed-off-by: Derek McGowan <derek@mcg.dev>
1 parent eafb2da commit 062cfd0

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

platforms.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ import (
114114
"path"
115115
"regexp"
116116
"runtime"
117+
"slices"
117118
"strconv"
118119
"strings"
119120

@@ -327,8 +328,13 @@ func FormatAll(platform specs.Platform) string {
327328
}
328329

329330
osOptions := platform.OSVersion
330-
for _, feature := range platform.OSFeatures {
331-
osOptions += "+" + feature
331+
features := platform.OSFeatures
332+
if !slices.IsSorted(features) {
333+
features = slices.Clone(features)
334+
slices.Sort(features)
335+
}
336+
if len(features) > 0 {
337+
osOptions += "+" + strings.Join(features, "+")
332338
}
333339
if osOptions != "" {
334340
OSAndVersion := fmt.Sprintf("%s(%s)", platform.OS, osOptions)

platforms_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,18 @@ func TestParseSelector(t *testing.T) {
379379
formatted: path.Join("linux(+gpu+simd)", defaultArch, defaultVariant),
380380
useV2Format: true,
381381
},
382+
{
383+
input: "linux(+unsorted+erofs)",
384+
expected: specs.Platform{
385+
OS: "linux",
386+
OSVersion: "",
387+
OSFeatures: []string{"unsorted", "erofs"},
388+
Architecture: defaultArch,
389+
Variant: defaultVariant,
390+
},
391+
formatted: path.Join("linux(+erofs+unsorted)", defaultArch, defaultVariant),
392+
useV2Format: true,
393+
},
382394
} {
383395
t.Run(testcase.input, func(t *testing.T) {
384396
if testcase.skip {

0 commit comments

Comments
 (0)