diff --git a/pkg/chart/loader/load.go b/pkg/chart/loader/load.go index df7ef7227..0a52f91c9 100644 --- a/pkg/chart/loader/load.go +++ b/pkg/chart/loader/load.go @@ -74,7 +74,7 @@ type BufferedFile struct { func LoadFiles(files []*BufferedFile) (*chart.Chart, error) { c := new(chart.Chart) subcharts := make(map[string][]*BufferedFile) - subChartsKeys := make([]string, 0) + var subChartsKeys []string // do not rely on assumed ordering of files in the chart and crash // if Chart.yaml was not coming early enough to initialize metadata @@ -155,7 +155,9 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) { fname := strings.TrimPrefix(f.Name, "charts/") cname := strings.SplitN(fname, "/", 2)[0] // map[string] is unsorted - keep an array to keep things sorted - subChartsKeys = append(subChartsKeys, cname) + if !stringInSlice(cname, subChartsKeys) { + subChartsKeys = append(subChartsKeys, cname) + } subcharts[cname] = append(subcharts[cname], &BufferedFile{Name: fname, Data: f.Data, ModTime: f.ModTime}) default: c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data, ModTime: f.ModTime}) @@ -207,3 +209,12 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) { return c, nil } + +func stringInSlice(a string, list []string) bool { + for _, b := range list { + if b == a { + return true + } + } + return false +}