Keep the subcharts sorted

Signed-off-by: frenchben <me+git@frenchben.com>
pull/10178/head
frenchben 4 years ago
parent 771bdeeffc
commit 29620aa5c3

@ -74,6 +74,7 @@ type BufferedFile struct {
func LoadFiles(files []*BufferedFile) (*chart.Chart, error) { func LoadFiles(files []*BufferedFile) (*chart.Chart, error) {
c := new(chart.Chart) c := new(chart.Chart)
subcharts := make(map[string][]*BufferedFile) subcharts := make(map[string][]*BufferedFile)
subChartsKeys := make([]string, 0)
// do not rely on assumed ordering of files in the chart and crash // do not rely on assumed ordering of files in the chart and crash
// if Chart.yaml was not coming early enough to initialize metadata // if Chart.yaml was not coming early enough to initialize metadata
@ -96,6 +97,7 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) {
} }
} }
for _, f := range files { for _, f := range files {
// fmt.Printf("Checking file: %s\n", f.Name)
switch { switch {
case f.Name == "Chart.yaml": case f.Name == "Chart.yaml":
// already processed // already processed
@ -139,22 +141,24 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) {
c.Metadata = new(chart.Metadata) c.Metadata = new(chart.Metadata)
} }
if c.Metadata.APIVersion == chart.APIVersionV1 { if c.Metadata.APIVersion == chart.APIVersionV1 {
c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data}) c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data, ModTime: f.ModTime})
} }
case strings.HasPrefix(f.Name, "templates/"): case strings.HasPrefix(f.Name, "templates/"):
c.Templates = append(c.Templates, &chart.File{Name: f.Name, Data: f.Data}) c.Templates = append(c.Templates, &chart.File{Name: f.Name, Data: f.Data, ModTime: f.ModTime})
case strings.HasPrefix(f.Name, "charts/"): case strings.HasPrefix(f.Name, "charts/"):
if filepath.Ext(f.Name) == ".prov" { if filepath.Ext(f.Name) == ".prov" {
c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data}) c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data, ModTime: f.ModTime})
continue continue
} }
fname := strings.TrimPrefix(f.Name, "charts/") fname := strings.TrimPrefix(f.Name, "charts/")
cname := strings.SplitN(fname, "/", 2)[0] cname := strings.SplitN(fname, "/", 2)[0]
subcharts[cname] = append(subcharts[cname], &BufferedFile{Name: fname, Data: f.Data}) // map[string] is unsorted - keep an array to keep things sorted
subChartsKeys = append(subChartsKeys, cname)
subcharts[cname] = append(subcharts[cname], &BufferedFile{Name: fname, Data: f.Data, ModTime: f.ModTime})
default: default:
c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data}) c.Files = append(c.Files, &chart.File{Name: f.Name, Data: f.Data, ModTime: f.ModTime})
} }
} }
@ -166,7 +170,8 @@ func LoadFiles(files []*BufferedFile) (*chart.Chart, error) {
return c, err return c, err
} }
for n, files := range subcharts { for _, n := range subChartsKeys {
files := subcharts[n]
var sc *chart.Chart var sc *chart.Chart
var err error var err error
switch { switch {

Loading…
Cancel
Save