Skip to content

Commit cf29b51

Browse files
authored
fix: only return version starting with number when no filter is supplied (#2120)
1 parent d3f1f6e commit cf29b51

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

internal/versions/versions.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -253,13 +253,19 @@ func Latest(plugin plugins.Plugin, query string) (version string, err error) {
253253
return version, err
254254
}
255255

256-
allVersions, err := AllVersionsFiltered(plugin, query)
256+
allVersions, err := AllVersions(plugin)
257257
if err != nil {
258258
return version, err
259259
}
260260

261-
versions := filterOutByRegex(allVersions, numericStartFilterRegex, true)
262-
versions = filterOutByRegex(versions, latestFilterRegex, false)
261+
versions := filterByRegex(allVersions, latestFilterRegex, false)
262+
263+
// If no query specified by user default to selecting version with numeric start
264+
if query == "" {
265+
versions = filterByRegex(versions, numericStartFilterRegex, true)
266+
} else {
267+
versions = filterByExactMatch(versions, query)
268+
}
263269

264270
if len(versions) < 1 {
265271
return version, errors.New(noLatestVersionErrMsg)
@@ -284,17 +290,6 @@ func AllVersions(plugin plugins.Plugin) (versions []string, err error) {
284290
return versions, err
285291
}
286292

287-
// AllVersionsFiltered returns a list of existing versions that match a regex
288-
// query provided by the user.
289-
func AllVersionsFiltered(plugin plugins.Plugin, query string) (versions []string, err error) {
290-
all, err := AllVersions(plugin)
291-
if err != nil {
292-
return versions, err
293-
}
294-
295-
return filterByExactMatch(all, query), err
296-
}
297-
298293
// Uninstall uninstalls a specific tool version. It invokes pre and
299294
// post-uninstall hooks if set, and runs the plugin's uninstall callback if
300295
// defined.
@@ -349,7 +344,7 @@ func filterByExactMatch(allVersions []string, pattern string) (versions []string
349344
return versions
350345
}
351346

352-
func filterOutByRegex(allVersions []string, pattern string, keepMatch bool) (versions []string) {
347+
func filterByRegex(allVersions []string, pattern string, keepMatch bool) (versions []string) {
353348
regex, _ := regexp.Compile(pattern)
354349
for _, version := range allVersions {
355350
match := regex.MatchString(version)

internal/versions/versions_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,25 @@ func TestLatest(t *testing.T) {
372372
assert.Nil(t, err)
373373
assert.Equal(t, "4.0.0", version)
374374
})
375+
376+
t.Run("when given no query returns latest version of plugin starting with number", func(t *testing.T) {
377+
pluginName := "no-latest-non-numeric-versions"
378+
pluginDir, err := repotest.InstallPlugin("dummy_plugin", conf.DataDir, pluginName)
379+
assert.Nil(t, err)
380+
plugin := plugins.New(conf, pluginName)
381+
382+
// Replace list-all script so it returns some non-numeric versions
383+
listAllScript := filepath.Join(pluginDir, "bin", "list-all")
384+
err = os.WriteFile(listAllScript, []byte("#!/usr/bin/env bash\necho foobar 3.4.5 1.2.3-dev foobar2"), 0o777)
385+
assert.Nil(t, err)
386+
latestScript := filepath.Join(pluginDir, "bin", "latest-stable")
387+
err = os.Remove(latestScript)
388+
assert.Nil(t, err)
389+
390+
version, err := Latest(plugin, "")
391+
assert.Nil(t, err)
392+
assert.Equal(t, "3.4.5", version)
393+
})
375394
}
376395

377396
func TestLatestWithSamples(t *testing.T) {

0 commit comments

Comments
 (0)