Skip to content

Commit 9a2aa22

Browse files
authored
fix to prioritize newly added registry (#6289)
* fix to prioritize newly added registry Signed-off-by: anandrkskd <[email protected]> * update RegistryList func to reverse the list and return []Registry Signed-off-by: anandrkskd <[email protected]> * update the usage of RegistryList Signed-off-by: anandrkskd <[email protected]> * update unit test and mock Signed-off-by: anandrkskd <[email protected]> * fix: lint error and check for empty registry list Signed-off-by: anandrkskd <[email protected]> * add documentation Signed-off-by: anandrkskd <[email protected]> Signed-off-by: anandrkskd <[email protected]>
1 parent 67272fd commit 9a2aa22

File tree

12 files changed

+42
-44
lines changed

12 files changed

+42
-44
lines changed

pkg/init/backend/flags.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (o *FlagsBackend) Validate(flags map[string]string, fs filesystem.Filesyste
5454
return fmt.Errorf("registry %q not found in the list of devfile registries. Please use `odo preference <add/remove> registry` command to configure devfile registries", flags[FLAG_DEVFILE_REGISTRY])
5555
}
5656
registries := o.preferenceClient.RegistryList()
57-
for _, r := range *registries {
57+
for _, r := range registries {
5858
isGithubRegistry, err := registry.IsGithubBasedRegistry(r.URL)
5959
if err != nil {
6060
return err

pkg/init/backend/flags_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ func TestFlagsBackend_Validate(t *testing.T) {
272272
ctrl := gomock.NewController(t)
273273
prefClient := preference.NewMockClient(ctrl)
274274
prefClient.EXPECT().RegistryNameExists(gomock.Any()).Return(tt.registryNameExists).AnyTimes()
275-
prefClient.EXPECT().RegistryList().Return(&tt.registryList).AnyTimes()
275+
prefClient.EXPECT().RegistryList().Return(tt.registryList).AnyTimes()
276276

277277
o := &FlagsBackend{
278278
preferenceClient: prefClient,

pkg/init/init.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ func (o *InitClient) downloadFromRegistry(registryName string, devfile string, d
175175

176176
registries := o.preferenceClient.RegistryList()
177177
var reg preference.Registry
178-
for _, reg = range *registries {
178+
for _, reg = range registries {
179179
if forceRegistry && reg.Name == registryName {
180180
err := o.registryClient.PullStackFromRegistry(reg.URL, devfile, dest, segment.GetRegistryOptions())
181181
if err != nil {

pkg/init/init_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func TestInitClient_downloadFromRegistry(t *testing.T) {
4444
URL: "http://registry1",
4545
},
4646
}
47-
client.EXPECT().RegistryList().Return(&registryList)
47+
client.EXPECT().RegistryList().Return(registryList)
4848
return client
4949
},
5050
registryClient: func(ctrl *gomock.Controller) registry.Client {
@@ -75,7 +75,7 @@ func TestInitClient_downloadFromRegistry(t *testing.T) {
7575
URL: "http://registry1",
7676
},
7777
}
78-
client.EXPECT().RegistryList().Return(&registryList)
78+
client.EXPECT().RegistryList().Return(registryList)
7979
return client
8080
},
8181
registryClient: func(ctrl *gomock.Controller) registry.Client {
@@ -106,7 +106,7 @@ func TestInitClient_downloadFromRegistry(t *testing.T) {
106106
URL: "http://registry1",
107107
},
108108
}
109-
client.EXPECT().RegistryList().Return(&registryList)
109+
client.EXPECT().RegistryList().Return(registryList)
110110
return client
111111
},
112112
registryClient: func(ctrl *gomock.Controller) registry.Client {
@@ -138,7 +138,7 @@ func TestInitClient_downloadFromRegistry(t *testing.T) {
138138
URL: "http://registry1",
139139
},
140140
}
141-
client.EXPECT().RegistryList().Return(&registryList)
141+
client.EXPECT().RegistryList().Return(registryList)
142142
return client
143143
},
144144
registryClient: func(ctrl *gomock.Controller) registry.Client {

pkg/odo/cli/preference/view.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ func (o *ViewOptions) RunForJsonOutput(ctx context.Context) (result interface{},
6666

6767
return api.PreferenceView{
6868
Preferences: preferenceList.Items,
69-
Registries: *registryList,
69+
Registries: registryList,
7070
}, nil
7171
}
7272

73-
func HumanReadableOutput(preferenceList preference.PreferenceList, registryList *[]preference.Registry) {
73+
func HumanReadableOutput(preferenceList preference.PreferenceList, registryList []preference.Registry) {
7474
preferenceT := ui.NewTable()
7575
preferenceT.AppendHeader(table.Row{"PARAMETER", "VALUE"})
7676
preferenceT.SortBy([]table.SortBy{{Name: "PARAMETER", Mode: table.Asc}})
@@ -84,9 +84,8 @@ func HumanReadableOutput(preferenceList preference.PreferenceList, registryList
8484
registryT := ui.NewTable()
8585
registryT.AppendHeader(table.Row{"NAME", "URL", "SECURE"})
8686

87-
// Loop backwards here to ensure the registry display order is correct (display latest newly added registry firstly)
88-
for i := range *registryList {
89-
registry := (*registryList)[i]
87+
for i := range registryList {
88+
registry := registryList[i]
9089
secure := "No"
9190
if registry.Secure {
9291
secure = "Yes"
@@ -97,7 +96,7 @@ func HumanReadableOutput(preferenceList preference.PreferenceList, registryList
9796
log.Info("Preference parameters:")
9897
preferenceT.Render()
9998
log.Info("\nDevfile registries:")
100-
if registryList == nil || len(*registryList) == 0 {
99+
if len(registryList) == 0 {
101100
log.Warning("No devfile registries added to the configuration. Refer to `odo preference add registry -h` to add one")
102101
return
103102
}

pkg/odo/cli/preference/view_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func TestView(t *testing.T) {
8585
},
8686
}
8787
prefClient.EXPECT().NewPreferenceList().Return(preferenceList)
88-
prefClient.EXPECT().RegistryList().Return(&registryList)
88+
prefClient.EXPECT().RegistryList().Return(registryList)
8989

9090
err = opts.Run(context.Background())
9191
if err != nil {

pkg/preference/implem.go

+17-16
Original file line numberDiff line numberDiff line change
@@ -133,19 +133,6 @@ func newPreferenceInfo() (*preferenceInfo, error) {
133133
return nil, err
134134
}
135135

136-
regList := []Registry{}
137-
if c.OdoSettings.RegistryList != nil {
138-
regList = *c.OdoSettings.RegistryList
139-
}
140-
141-
i := 0
142-
j := len(regList) - 1
143-
for i < j {
144-
regList[i], regList[j] = regList[j], regList[i]
145-
i++
146-
j--
147-
}
148-
149136
// TODO: This code block about logging warnings should be removed once users completely shift to odo v3.
150137
// The warning will be printed more than once, and it can be annoying, but it should ensure that the user will change these values.
151138
var requiresChange []string
@@ -437,12 +424,26 @@ func (c *preferenceInfo) ConsentTelemetry() *bool {
437424
return c.OdoSettings.ConsentTelemetry
438425
}
439426

440-
func (c *preferenceInfo) RegistryList() *[]Registry {
441-
return c.OdoSettings.RegistryList
427+
// RegistryList returns the list of registries,
428+
// in reverse order compared to what is declared in the preferences file.
429+
//
430+
// Adding a new registry always adds it to the end of the list in the preferences file,
431+
// but RegistryList intentionally reverses the order to prioritize the most recently added registries.
432+
func (c *preferenceInfo) RegistryList() []Registry {
433+
regList := make([]Registry, len(*c.OdoSettings.RegistryList))
434+
copy(regList, *c.OdoSettings.RegistryList)
435+
i := 0
436+
j := len(regList) - 1
437+
for i < j {
438+
regList[i], regList[j] = regList[j], regList[i]
439+
i++
440+
j--
441+
}
442+
return regList
442443
}
443444

444445
func (c *preferenceInfo) RegistryNameExists(name string) bool {
445-
for _, registry := range *c.RegistryList() {
446+
for _, registry := range *c.OdoSettings.RegistryList {
446447
if registry.Name == name {
447448
return true
448449
}

pkg/preference/mock.go

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/preference/preference.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type Client interface {
2323
RegistryCacheTime() *time.Duration
2424
EphemeralSourceVolume() *bool
2525
ConsentTelemetry() *bool
26-
RegistryList() *[]Registry
26+
RegistryList() []Registry
2727
RegistryNameExists(name string) bool
2828

2929
NewPreferenceList() PreferenceList

pkg/registry/registry.go

+3-5
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,8 @@ func (o RegistryClient) GetDevfileRegistries(registryName string) ([]api.Registr
6060

6161
hasName := len(registryName) != 0
6262
if o.preferenceClient.RegistryList() != nil {
63-
registryList := *o.preferenceClient.RegistryList()
64-
// Loop backwards here to ensure the registry display order is correct (display latest newly added registry firstly)
65-
for i := len(registryList) - 1; i >= 0; i-- {
66-
registry := registryList[i]
63+
registryList := o.preferenceClient.RegistryList()
64+
for _, registry := range registryList {
6765
if hasName {
6866
if registryName == registry.Name {
6967
reg := api.Registry{
@@ -241,7 +239,7 @@ func (o RegistryClient) retrieveDevfileDataFromRegistry(registryName string, dev
241239
// 2. The devfile api library does not support saving in memory
242240
// 3. We need to get the file from the registry and save it to the temporary file
243241
// 4. We need to read the file from the temporary file, unmarshal it and then return the devfile data
244-
for _, reg = range *registries {
242+
for _, reg = range registries {
245243
if reg.Name == registryName {
246244
err = o.PullStackFromRegistry(reg.URL, devfileName, tmpFile, segment.GetRegistryOptions())
247245
if err != nil {

pkg/registry/registry_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ OdoSettings:
4848
registryName: "",
4949
want: []api.Registry{
5050
{
51-
Name: "DefaultDevfileRegistry",
52-
URL: "https://registry.devfile.io",
51+
Name: "CheDevfileRegistry",
52+
URL: "https://che-devfile-registry.openshift.io/",
5353
Secure: false,
5454
},
5555
{
56-
Name: "CheDevfileRegistry",
57-
URL: "https://che-devfile-registry.openshift.io/",
56+
Name: "DefaultDevfileRegistry",
57+
URL: "https://registry.devfile.io",
5858
Secure: false,
5959
},
6060
},
@@ -253,7 +253,7 @@ func TestListDevfileStacks(t *testing.T) {
253253
t.Run(tt.name, func(t *testing.T) {
254254
ctrl := gomock.NewController(t)
255255
prefClient := preference.NewMockClient(ctrl)
256-
prefClient.EXPECT().RegistryList().Return(&[]preference.Registry{
256+
prefClient.EXPECT().RegistryList().Return([]preference.Registry{
257257
{
258258
Name: "TestRegistry",
259259
URL: server.URL,

pkg/registry/utils.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
func IsSecure(prefClient preference.Client, registryName string) bool {
1313
isSecure := false
1414
if prefClient.RegistryList() != nil {
15-
for _, registry := range *prefClient.RegistryList() {
15+
for _, registry := range prefClient.RegistryList() {
1616
if registry.Name == registryName && registry.Secure {
1717
isSecure = true
1818
break

0 commit comments

Comments
 (0)