Commit fe110405 authored by Matt Butcher's avatar Matt Butcher Committed by GitHub
Browse files

Merge pull request #2279 from sstarcher/search_constraint

Search constraint and Install/Upgrade default constraint
parents d4e129d5 7150fc3d
main Release add-codeql dependabot/go_modules/github.com/docker/distribution-2.8.2incompatible dependabot/go_modules/github.com/lib/pq-1.10.9 dependabot/go_modules/github.com/rubenv/sql-migrate-1.4.0 dependabot/go_modules/golang.org/x/crypto-0.9.0 dependabot/go_modules/golang.org/x/term-0.8.0 dependabot/go_modules/k8s.io/klog/v2-2.100.1 dev-v2 feat-v3/event-emitter-lua release-2.10 release-2.11 release-2.12 release-2.13 release-2.14 release-2.15 release-2.16 release-2.17 release-2.4 release-2.5 release-2.6 release-2.7 release-2.8 release-2.9 release-3.0 release-3.1 release-3.10 release-3.11 release-3.12 release-3.2 release-3.3 release-3.4 release-3.5 release-3.6 release-3.6.1 release-3.6.2 release-3.7 release-3.8 release-3.9 release-v3.0.0-beta.4 v3.12.0 v3.12.0-rc.1 v3.12.0-dev.1 v3.11.3 v3.11.2 v3.11.1 v3.11.0 v3.11.0-rc.2 v3.11.0-rc.1 v3.10.3 v3.10.2 v3.10.1 v3.10.0 v3.10.0-rc.1 v3.9.4 v3.9.3 v3.9.2 v3.9.1 v3.9.0 v3.9.0-rc.1 v3.8.2 v3.8.1 v3.8.0 v3.8.0-rc.2 v3.8.0-rc.1 v3.7.2 v3.7.1 v3.7.0 v3.7.0-rc.3 v3.7.0-rc.2 v3.7.0-rc.1 v3.6.3 v3.6.2 v3.6.1 v3.6.0 v3.6.0-rc.1 v3.5.4 v3.5.3 v3.5.2 v3.5.1 v3.5.0 v3.5.0-rc.2 v3.5.0-rc.1 v3.4.2 v3.4.1 v3.4.0 v3.4.0-rc.1 v3.3.4 v3.3.3 v3.3.2 v3.3.1 v3.3.0 v3.3.0-rc.2 v3.3.0-rc.1 v3.2.4 v3.2.3 v3.2.2 v3.2.1 v3.2.0 v3.2.0-rc.1 v3.1.3 v3.1.2 v3.1.1 v3.1.0 v3.1.0-rc.3 v3.1.0-rc.2 v3.1.0-rc.1 v3.0.3 v3.0.2 v3.0.1 v3.0.0 v3.0.0-rc.4 v3.0.0-rc.3 v3.0.0-rc.2 v3.0.0-rc.1 v3.0.0-beta.5 v3.0.0-beta.4 v3.0.0-beta.3 v3.0.0-beta.2 v3.0.0-beta.1 v3.0.0-alpha.2 v3.0.0-alpha.1 v2.17.0 v2.17.0-rc.1 v2.16.12 v2.16.11 v2.16.10 v2.16.9 v2.16.8 v2.16.7 v2.16.6 v2.16.5 v2.16.4 v2.16.3 v2.16.2 v2.16.1 v2.16.0 v2.16.0-rc.2 v2.16.0-rc.1 v2.15.2 v2.15.1 v2.15.0 v2.15.0-rc.2 v2.15.0-rc.1 v2.14.3 v2.14.2 v2.14.1 v2.14.0 v2.14.0-rc.2 v2.14.0-rc.1 v2.13.1 v2.13.1-rc.1 v2.13.0 v2.13.0-rc.2 v2.13.0-rc.1 v2.12.3 v2.12.2 v2.12.1 v2.12.0 v2.12.0-rc.2 v2.12.0-rc.1 v2.11.0 v2.11.0-rc.4 v2.11.0-rc.3 v2.11.0-rc.2 v2.11.0-rc.1 v2.10.0 v2.10.0-rc.3 v2.10.0-rc.2 v2.10.0-rc.1 v2.9.1 v2.9.0 v2.9.0-rc5 v2.9.0-rc4 v2.9.0-rc3 v2.9.0-rc2 v2.9.0-rc1 v2.8.2 v2.8.2-rc1 v2.8.1 v2.8.0 v2.8.0-rc.1 v2.7.2 v2.7.1 v2.7.0 v2.7.0-rc1 v2.6.2 v2.6.1 v2.6.0 v2.5.1 v2.5.0 v2.4.2 v2.4.1 v2.4.0
No related merge requests found
Showing with 62 additions and 18 deletions
+62 -18
...@@ -21,6 +21,7 @@ import ( ...@@ -21,6 +21,7 @@ import (
"io" "io"
"strings" "strings"
"github.com/Masterminds/semver"
"github.com/gosuri/uitable" "github.com/gosuri/uitable"
"github.com/spf13/cobra" "github.com/spf13/cobra"
...@@ -45,6 +46,7 @@ type searchCmd struct { ...@@ -45,6 +46,7 @@ type searchCmd struct {
versions bool versions bool
regexp bool regexp bool
version string
} }
func newSearchCmd(out io.Writer) *cobra.Command { func newSearchCmd(out io.Writer) *cobra.Command {
...@@ -62,6 +64,7 @@ func newSearchCmd(out io.Writer) *cobra.Command { ...@@ -62,6 +64,7 @@ func newSearchCmd(out io.Writer) *cobra.Command {
f := cmd.Flags() f := cmd.Flags()
f.BoolVarP(&sc.regexp, "regexp", "r", false, "use regular expressions for searching") f.BoolVarP(&sc.regexp, "regexp", "r", false, "use regular expressions for searching")
f.BoolVarP(&sc.versions, "versions", "l", false, "show the long listing, with each version of each chart on its own line") f.BoolVarP(&sc.versions, "versions", "l", false, "show the long listing, with each version of each chart on its own line")
f.StringVarP(&sc.version, "version", "v", "", "search using semantic versioning constraints")
return cmd return cmd
} }
...@@ -72,27 +75,47 @@ func (s *searchCmd) run(args []string) error { ...@@ -72,27 +75,47 @@ func (s *searchCmd) run(args []string) error {
return err return err
} }
var res []*search.Result
if len(args) == 0 { if len(args) == 0 {
s.showAllCharts(index) res = index.All()
return nil } else {
q := strings.Join(args, " ")
res, err = index.Search(q, searchMaxScore, s.regexp)
if err != nil {
return nil
}
} }
q := strings.Join(args, " ") search.SortScore(res)
res, err := index.Search(q, searchMaxScore, s.regexp) data, err := s.applyConstraint(res)
if err != nil { if err != nil {
return nil return err
} }
search.SortScore(res)
fmt.Fprintln(s.out, s.formatSearchResults(res)) fmt.Fprintln(s.out, s.formatSearchResults(data))
return nil return nil
} }
func (s *searchCmd) showAllCharts(i *search.Index) { func (s *searchCmd) applyConstraint(res []*search.Result) ([]*search.Result, error) {
res := i.All() if len(s.version) == 0 {
search.SortScore(res) return res, nil
fmt.Fprintln(s.out, s.formatSearchResults(res)) }
constraint, err := semver.NewConstraint(s.version)
if err != nil {
return res, fmt.Errorf("an invalid version/constraint format: %s", err)
}
data := res[:0]
for _, r := range res {
v, err := semver.NewVersion(r.Chart.Version)
if err != nil || constraint.Check(v) {
data = append(data, r)
}
}
return data, nil
} }
func (s *searchCmd) formatSearchResults(res []*search.Result) string { func (s *searchCmd) formatSearchResults(res []*search.Result) string {
......
...@@ -19,8 +19,9 @@ helm search [keyword] ...@@ -19,8 +19,9 @@ helm search [keyword]
### Options ### Options
``` ```
-r, --regexp use regular expressions for searching -r, --regexp use regular expressions for searching
-l, --versions show the long listing, with each version of each chart on its own line -v, --version string search using semantic versioning constraints
-l, --versions show the long listing, with each version of each chart on its own line
``` ```
### Options inherited from parent commands ### Options inherited from parent commands
...@@ -36,4 +37,4 @@ helm search [keyword] ...@@ -36,4 +37,4 @@ helm search [keyword]
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 16-Apr-2017 ###### Auto generated by spf13/cobra on 18-Apr-2017
...@@ -27,6 +27,10 @@ Repositories are managed with 'helm repo' commands. ...@@ -27,6 +27,10 @@ Repositories are managed with 'helm repo' commands.
\fB\-r\fP, \fB\-\-regexp\fP[=false] \fB\-r\fP, \fB\-\-regexp\fP[=false]
use regular expressions for searching use regular expressions for searching
.PP
\fB\-v\fP, \fB\-\-version\fP=""
search using semantic versioning constraints
.PP .PP
\fB\-l\fP, \fB\-\-versions\fP[=false] \fB\-l\fP, \fB\-\-versions\fP[=false]
show the long listing, with each version of each chart on its own line show the long listing, with each version of each chart on its own line
...@@ -61,4 +65,4 @@ Repositories are managed with 'helm repo' commands. ...@@ -61,4 +65,4 @@ Repositories are managed with 'helm repo' commands.
.SH HISTORY .SH HISTORY
.PP .PP
16\-Apr\-2017 Auto generated by spf13/cobra 18\-Apr\-2017 Auto generated by spf13/cobra
...@@ -155,12 +155,25 @@ func (i IndexFile) Get(name, version string) (*ChartVersion, error) { ...@@ -155,12 +155,25 @@ func (i IndexFile) Get(name, version string) (*ChartVersion, error) {
if len(vs) == 0 { if len(vs) == 0 {
return nil, ErrNoChartVersion return nil, ErrNoChartVersion
} }
var constraint *semver.Constraints
if len(version) == 0 { if len(version) == 0 {
return vs[0], nil constraint, _ = semver.NewConstraint("*")
} else {
var err error
constraint, err = semver.NewConstraint(version)
if err != nil {
return nil, err
}
} }
for _, ver := range vs { for _, ver := range vs {
// TODO: Do we need to normalize the version field with the SemVer lib? test, err := semver.NewVersion(ver.Version)
if ver.Version == version { if err != nil {
continue
}
if constraint.Check(test) {
return ver, nil return ver, nil
} }
} }
......
...@@ -1265,6 +1265,9 @@ _helm_search() ...@@ -1265,6 +1265,9 @@ _helm_search()
flags+=("--regexp") flags+=("--regexp")
flags+=("-r") flags+=("-r")
local_nonpersistent_flags+=("--regexp") local_nonpersistent_flags+=("--regexp")
flags+=("--version=")
two_word_flags+=("-v")
local_nonpersistent_flags+=("--version=")
flags+=("--versions") flags+=("--versions")
flags+=("-l") flags+=("-l")
local_nonpersistent_flags+=("--versions") local_nonpersistent_flags+=("--versions")
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment