Commit cb5bd97a authored by Adnan Abdulhussein's avatar Adnan Abdulhussein Committed by GitHub

Merge pull request #1412 from prydonius/fix-index-order

fix(repo): ensure index generates in the right order
parents ec7d71cc ee7fe7c7
...@@ -94,5 +94,6 @@ func index(dir, url, mergeTo string) error { ...@@ -94,5 +94,6 @@ func index(dir, url, mergeTo string) error {
} }
i.Merge(i2) i.Merge(i2)
} }
i.SortEntries()
return i.WriteFile(out, 0755) return i.WriteFile(out, 0755)
} }
...@@ -38,6 +38,10 @@ func TestRepoIndexCmd(t *testing.T) { ...@@ -38,6 +38,10 @@ func TestRepoIndexCmd(t *testing.T) {
if err := os.Link("testdata/testcharts/compressedchart-0.1.0.tgz", comp); err != nil { if err := os.Link("testdata/testcharts/compressedchart-0.1.0.tgz", comp); err != nil {
t.Fatal(err) t.Fatal(err)
} }
comp2 := filepath.Join(dir, "compressedchart-0.2.0.tgz")
if err := os.Link("testdata/testcharts/compressedchart-0.2.0.tgz", comp2); err != nil {
t.Fatal(err)
}
buf := bytes.NewBuffer(nil) buf := bytes.NewBuffer(nil)
c := newRepoIndexCmd(buf) c := newRepoIndexCmd(buf)
...@@ -57,16 +61,32 @@ func TestRepoIndexCmd(t *testing.T) { ...@@ -57,16 +61,32 @@ func TestRepoIndexCmd(t *testing.T) {
t.Errorf("expected 1 entry, got %d: %#v", len(index.Entries), index.Entries) t.Errorf("expected 1 entry, got %d: %#v", len(index.Entries), index.Entries)
} }
vs := index.Entries["compressedchart"]
if len(vs) != 2 {
t.Errorf("expected 2 versions, got %d: %#v", len(vs), vs)
}
expectedVersion := "0.2.0"
if vs[0].Version != expectedVersion {
t.Errorf("expected %q, got %q", expectedVersion, vs[0].Version)
}
// Test with `--merge` // Test with `--merge`
// Remove first chart. // Remove first two charts.
if err := os.Remove(comp); err != nil { if err := os.Remove(comp); err != nil {
t.Fatal(err) t.Fatal(err)
} }
// Add another chart. if err := os.Remove(comp2); err != nil {
t.Fatal(err)
}
// Add a new chart and a new version of an existing chart
if err := os.Link("testdata/testcharts/reqtest-0.1.0.tgz", filepath.Join(dir, "reqtest-0.1.0.tgz")); err != nil { if err := os.Link("testdata/testcharts/reqtest-0.1.0.tgz", filepath.Join(dir, "reqtest-0.1.0.tgz")); err != nil {
t.Fatal(err) t.Fatal(err)
} }
if err := os.Link("testdata/testcharts/compressedchart-0.3.0.tgz", filepath.Join(dir, "compressedchart-0.3.0.tgz")); err != nil {
t.Fatal(err)
}
c.ParseFlags([]string{"--merge", destIndex}) c.ParseFlags([]string{"--merge", destIndex})
if err := c.RunE(c, []string{dir}); err != nil { if err := c.RunE(c, []string{dir}); err != nil {
...@@ -79,6 +99,16 @@ func TestRepoIndexCmd(t *testing.T) { ...@@ -79,6 +99,16 @@ func TestRepoIndexCmd(t *testing.T) {
} }
if len(index.Entries) != 2 { if len(index.Entries) != 2 {
t.Errorf("expected 2 entry, got %d: %#v", len(index.Entries), index.Entries) t.Errorf("expected 2 entries, got %d: %#v", len(index.Entries), index.Entries)
}
vs = index.Entries["compressedchart"]
if len(vs) != 3 {
t.Errorf("expected 3 versions, got %d: %#v", len(vs), vs)
}
expectedVersion = "0.3.0"
if vs[0].Version != expectedVersion {
t.Errorf("expected %q, got %q", expectedVersion, vs[0].Version)
} }
} }
...@@ -95,6 +95,7 @@ func NewIndexFile() *IndexFile { ...@@ -95,6 +95,7 @@ func NewIndexFile() *IndexFile {
} }
// Add adds a file to the index // Add adds a file to the index
// This can leave the index in an unsorted state
func (i IndexFile) Add(md *chart.Metadata, filename, baseURL, digest string) { func (i IndexFile) Add(md *chart.Metadata, filename, baseURL, digest string) {
u := filename u := filename
if baseURL != "" { if baseURL != "" {
...@@ -176,6 +177,8 @@ func (i IndexFile) WriteFile(dest string, mode os.FileMode) error { ...@@ -176,6 +177,8 @@ func (i IndexFile) WriteFile(dest string, mode os.FileMode) error {
// //
// If one of the entries in the given index does _not_ already exist, it is added. // If one of the entries in the given index does _not_ already exist, it is added.
// In all other cases, the existing record is preserved. // In all other cases, the existing record is preserved.
//
// This can leave the index in an unsorted state
func (i *IndexFile) Merge(f *IndexFile) { func (i *IndexFile) Merge(f *IndexFile) {
for _, cvs := range f.Entries { for _, cvs := range f.Entries {
for _, cv := range cvs { for _, cv := range cvs {
...@@ -202,7 +205,7 @@ type ChartVersion struct { ...@@ -202,7 +205,7 @@ type ChartVersion struct {
// //
// It indexes only charts that have been packaged (*.tgz). // It indexes only charts that have been packaged (*.tgz).
// //
// It writes the results to dir/index.yaml. // The index returned will be in an unsorted state
func IndexDirectory(dir, baseURL string) (*IndexFile, error) { func IndexDirectory(dir, baseURL string) (*IndexFile, error) {
archives, err := filepath.Glob(filepath.Join(dir, "*.tgz")) archives, err := filepath.Glob(filepath.Join(dir, "*.tgz"))
if err != nil { if err != nil {
......
...@@ -197,12 +197,12 @@ func verifyLocalIndex(t *testing.T, i *IndexFile) { ...@@ -197,12 +197,12 @@ func verifyLocalIndex(t *testing.T, i *IndexFile) {
Metadata: &chart.Metadata{ Metadata: &chart.Metadata{
Name: "nginx", Name: "nginx",
Description: "string", Description: "string",
Version: "0.1.0", Version: "0.2.0",
Keywords: []string{"popular", "web server", "proxy"}, Keywords: []string{"popular", "web server", "proxy"},
Home: "https://github.com/something", Home: "https://github.com/something/else",
}, },
URLs: []string{ URLs: []string{
"http://storage.googleapis.com/kubernetes-charts/nginx-0.1.0.tgz", "http://storage.googleapis.com/kubernetes-charts/nginx-0.2.0.tgz",
}, },
Digest: "sha256:1234567890abcdef", Digest: "sha256:1234567890abcdef",
}, },
...@@ -210,12 +210,12 @@ func verifyLocalIndex(t *testing.T, i *IndexFile) { ...@@ -210,12 +210,12 @@ func verifyLocalIndex(t *testing.T, i *IndexFile) {
Metadata: &chart.Metadata{ Metadata: &chart.Metadata{
Name: "nginx", Name: "nginx",
Description: "string", Description: "string",
Version: "0.2.0", Version: "0.1.0",
Keywords: []string{"popular", "web server", "proxy"}, Keywords: []string{"popular", "web server", "proxy"},
Home: "https://github.com/something/else", Home: "https://github.com/something",
}, },
URLs: []string{ URLs: []string{
"http://storage.googleapis.com/kubernetes-charts/nginx-0.2.0.tgz", "http://storage.googleapis.com/kubernetes-charts/nginx-0.1.0.tgz",
}, },
Digest: "sha256:1234567890abcdef", Digest: "sha256:1234567890abcdef",
}, },
......
...@@ -133,7 +133,7 @@ func TestLoadChartRepository(t *testing.T) { ...@@ -133,7 +133,7 @@ func TestLoadChartRepository(t *testing.T) {
t.Errorf("Problem loading chart repository from %s: %v", testRepository, err) t.Errorf("Problem loading chart repository from %s: %v", testRepository, err)
} }
paths := []string{filepath.Join(testRepository, "frobnitz-1.2.3.tgz"), filepath.Join(testRepository, "sprocket-1.2.0.tgz")} paths := []string{filepath.Join(testRepository, "frobnitz-1.2.3.tgz"), filepath.Join(testRepository, "sprocket-1.1.0.tgz"), filepath.Join(testRepository, "sprocket-1.2.0.tgz")}
if cr.RootPath != testRepository { if cr.RootPath != testRepository {
t.Errorf("Expected %s as RootPath but got %s", testRepository, cr.RootPath) t.Errorf("Expected %s as RootPath but got %s", testRepository, cr.RootPath)
...@@ -211,6 +211,12 @@ func verifyIndex(t *testing.T, actual *IndexFile) { ...@@ -211,6 +211,12 @@ func verifyIndex(t *testing.T, actual *IndexFile) {
Version: "1.2.0", Version: "1.2.0",
}, },
}, },
{
Metadata: &chart.Metadata{
Name: "sprocket",
Version: "1.1.0",
},
},
}, },
} }
......
...@@ -2,22 +2,22 @@ apiVersion: v1 ...@@ -2,22 +2,22 @@ apiVersion: v1
entries: entries:
nginx: nginx:
- urls: - urls:
- http://storage.googleapis.com/kubernetes-charts/nginx-0.1.0.tgz - http://storage.googleapis.com/kubernetes-charts/nginx-0.2.0.tgz
name: nginx name: nginx
description: string description: string
version: 0.1.0 version: 0.2.0
home: https://github.com/something home: https://github.com/something/else
digest: "sha256:1234567890abcdef" digest: "sha256:1234567890abcdef"
keywords: keywords:
- popular - popular
- web server - web server
- proxy - proxy
- urls: - urls:
- http://storage.googleapis.com/kubernetes-charts/nginx-0.2.0.tgz - http://storage.googleapis.com/kubernetes-charts/nginx-0.1.0.tgz
name: nginx name: nginx
description: string description: string
version: 0.2.0 version: 0.1.0
home: https://github.com/something/else home: https://github.com/something
digest: "sha256:1234567890abcdef" digest: "sha256:1234567890abcdef"
keywords: keywords:
- popular - popular
......
Markdown is supported
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