mirror of
https://github.com/helm/helm.git
synced 2026-08-08 09:01:25 +00:00
fix list not showing multiple releases with same name in different namespaces (#6756)
Signed-off-by: Karuppiah Natarajan <karuppiah7890@gmail.com>
This commit is contained in:
committed by
Martin Hickey
parent
0f94af1f3a
commit
bfd8250803
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
package action
|
||||
|
||||
import (
|
||||
"path"
|
||||
"regexp"
|
||||
|
||||
"helm.sh/helm/v3/pkg/release"
|
||||
@@ -218,27 +219,23 @@ func (l *List) sort(rels []*release.Release) {
|
||||
}
|
||||
|
||||
// filterList returns a list scrubbed of old releases.
|
||||
func filterList(rels []*release.Release) []*release.Release {
|
||||
idx := map[string]int{}
|
||||
func filterList(releases []*release.Release) []*release.Release {
|
||||
latestReleases := make(map[string]*release.Release)
|
||||
|
||||
for _, r := range rels {
|
||||
name, version := r.Name, r.Version
|
||||
if max, ok := idx[name]; ok {
|
||||
// check if we have a greater version already
|
||||
if max > version {
|
||||
continue
|
||||
}
|
||||
for _, rls := range releases {
|
||||
name, namespace := rls.Name, rls.Namespace
|
||||
key := path.Join(namespace, name)
|
||||
if latestRelease, exists := latestReleases[key]; exists && latestRelease.Version > rls.Version {
|
||||
continue
|
||||
}
|
||||
idx[name] = version
|
||||
latestReleases[key] = rls
|
||||
}
|
||||
|
||||
uniq := make([]*release.Release, 0, len(idx))
|
||||
for _, r := range rels {
|
||||
if idx[r.Name] == r.Version {
|
||||
uniq = append(uniq, r)
|
||||
}
|
||||
var list = make([]*release.Release, 0, len(latestReleases))
|
||||
for _, rls := range latestReleases {
|
||||
list = append(list, rls)
|
||||
}
|
||||
return uniq
|
||||
return list
|
||||
}
|
||||
|
||||
// setStateMask calculates the state mask based on parameters.
|
||||
|
||||
@@ -159,6 +159,7 @@ func TestList_LimitOffsetOutOfBounds(t *testing.T) {
|
||||
is.NoError(err)
|
||||
is.Len(list, 2)
|
||||
}
|
||||
|
||||
func TestList_StateMask(t *testing.T) {
|
||||
is := assert.New(t)
|
||||
lister := newListFixture(t)
|
||||
@@ -166,7 +167,8 @@ func TestList_StateMask(t *testing.T) {
|
||||
one, err := lister.cfg.Releases.Get("one", 1)
|
||||
is.NoError(err)
|
||||
one.SetStatus(release.StatusUninstalled, "uninstalled")
|
||||
lister.cfg.Releases.Update(one)
|
||||
err = lister.cfg.Releases.Update(one)
|
||||
is.NoError(err)
|
||||
|
||||
res, err := lister.Run()
|
||||
is.NoError(err)
|
||||
@@ -222,11 +224,6 @@ func makeMeSomeReleases(store *storage.Storage, t *testing.T) {
|
||||
three.Name = "three"
|
||||
three.Namespace = "default"
|
||||
three.Version = 3
|
||||
four := releaseStub()
|
||||
four.Name = "four"
|
||||
four.Namespace = "default"
|
||||
four.Version = 4
|
||||
four.Info.Status = release.StatusSuperseded
|
||||
|
||||
for _, rel := range []*release.Release{one, two, three} {
|
||||
if err := store.Create(rel); err != nil {
|
||||
@@ -238,3 +235,29 @@ func makeMeSomeReleases(store *storage.Storage, t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, all, 3, "sanity test: three items added")
|
||||
}
|
||||
|
||||
func TestFilterList(t *testing.T) {
|
||||
one := releaseStub()
|
||||
one.Name = "one"
|
||||
one.Namespace = "default"
|
||||
one.Version = 1
|
||||
two := releaseStub()
|
||||
two.Name = "two"
|
||||
two.Namespace = "default"
|
||||
two.Version = 1
|
||||
anotherOldOne := releaseStub()
|
||||
anotherOldOne.Name = "one"
|
||||
anotherOldOne.Namespace = "testing"
|
||||
anotherOldOne.Version = 1
|
||||
anotherOne := releaseStub()
|
||||
anotherOne.Name = "one"
|
||||
anotherOne.Namespace = "testing"
|
||||
anotherOne.Version = 2
|
||||
|
||||
list := []*release.Release{one, two, anotherOne}
|
||||
expectedFilteredList := []*release.Release{one, two, anotherOne}
|
||||
|
||||
filteredList := filterList(list)
|
||||
|
||||
assert.ElementsMatch(t, expectedFilteredList, filteredList)
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ func TestConfigMapGet(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUNcompressedConfigMapGet(t *testing.T) {
|
||||
func TestUncompressedConfigMapGet(t *testing.T) {
|
||||
vers := 1
|
||||
name := "smug-pigeon"
|
||||
namespace := "default"
|
||||
|
||||
Reference in New Issue
Block a user