pull/32388/merge
Ratul Basak 3 days ago committed by GitHub
commit e784299822
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -99,8 +99,8 @@ const (
// List is the action for listing releases. // List is the action for listing releases.
// //
// It provides, for example, the implementation of 'helm list'. // It provides, for example, the implementation of 'helm list'.
// It returns no more than one revision of every release in one specific, or in // It returns the latest revision of every release in one specific, or in all,
// all, namespaces. // namespaces, unless superseded releases are requested.
// To list all the revisions of a specific release, see the History action. // To list all the revisions of a specific release, see the History action.
type List struct { type List struct {
cfg *Configuration cfg *Configuration
@ -117,7 +117,7 @@ type List struct {
ByDate bool ByDate bool
SortReverse bool SortReverse bool
// StateMask accepts a bitmask of states for items to show. // StateMask accepts a bitmask of states for items to show.
// The default is ListDeployed // The default is ListAll.
StateMask ListStates StateMask ListStates
// Limit is the number of items to return per Run() // Limit is the number of items to return per Run()
Limit int Limit int
@ -185,10 +185,11 @@ func (l *List) Run() ([]ri.Releaser, error) {
return nil, err return nil, err
} }
// by definition, superseded releases are never shown if // By definition, superseded releases are never shown if only the latest
// only the latest releases are returned. so if requested statemask // releases are returned. Skip the latest release filter whenever the state
// is _only_ ListSuperseded, skip the latest release filter // mask includes superseded releases, including in combination with other
if l.StateMask != ListSuperseded { // states.
if l.StateMask&ListSuperseded == 0 {
rresults = filterLatestReleases(rresults) rresults = filterLatestReleases(rresults)
} }

@ -249,6 +249,74 @@ func TestList_StateMaskWithStaleRevisions(t *testing.T) {
is.Equal("failed", ac0.Name()) is.Equal("failed", ac0.Name())
} }
func TestList_StateMaskWithSupersededRevisions(t *testing.T) {
tests := []struct {
name string
stateMask ListStates
expected map[int]common.Status
}{
{
name: "superseded only",
stateMask: ListSuperseded,
expected: map[int]common.Status{
1: common.StatusSuperseded,
},
},
{
name: "superseded and deployed",
stateMask: ListSuperseded | ListDeployed,
expected: map[int]common.Status{
1: common.StatusSuperseded,
2: common.StatusDeployed,
},
},
{
name: "all states",
stateMask: ListAll,
expected: map[int]common.Status{
1: common.StatusSuperseded,
2: common.StatusDeployed,
},
},
{
name: "deployed only",
stateMask: ListDeployed,
expected: map[int]common.Status{
2: common.StatusDeployed,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
lister := newListFixture(t)
lister.StateMask = tt.stateMask
oldRelease := namedReleaseStub("release", common.StatusSuperseded)
oldRelease.Namespace = "default"
oldRelease.Version = 1
currentRelease := namedReleaseStub("release", common.StatusDeployed)
currentRelease.Namespace = "default"
currentRelease.Version = 2
for _, rel := range []*release.Release{oldRelease, currentRelease} {
require.NoError(t, lister.cfg.Releases.Create(rel))
}
results, err := lister.Run()
require.NoError(t, err)
actual := make(map[int]common.Status, len(results))
for _, result := range results {
accessor, err := ri.NewAccessor(result)
require.NoError(t, err)
actual[accessor.Version()] = common.Status(accessor.Status())
}
assert.Equal(t, tt.expected, actual)
})
}
}
func makeMeSomeReleasesWithStaleFailure(t *testing.T, store *storage.Storage) { func makeMeSomeReleasesWithStaleFailure(t *testing.T, store *storage.Storage) {
t.Helper() t.Helper()
one := namedReleaseStub("clean", common.StatusDeployed) one := namedReleaseStub("clean", common.StatusDeployed)

@ -280,7 +280,21 @@ func compListReleases(toComplete string, ignoredReleaseNames []string, cfg *acti
var choices []string var choices []string
filteredReleases := filterReleases(releases, ignoredReleaseNames) filteredReleases := filterReleases(releases, ignoredReleaseNames)
// Completions are release names, so keep only the latest revision of each
// release even though ListAll also returns superseded revisions.
latestReleases := make([]*release.Release, 0, len(filteredReleases))
indices := make(map[string]int, len(filteredReleases))
for _, rel := range filteredReleases { for _, rel := range filteredReleases {
if index, ok := indices[rel.Name]; ok {
if rel.Version > latestReleases[index].Version {
latestReleases[index] = rel
}
continue
}
indices[rel.Name] = len(latestReleases)
latestReleases = append(latestReleases, rel)
}
for _, rel := range latestReleases {
choices = append(choices, choices = append(choices,
fmt.Sprintf("%s\t%s-%s -> %s", rel.Name, rel.Chart.Metadata.Name, rel.Chart.Metadata.Version, rel.Info.Status.String())) fmt.Sprintf("%s\t%s-%s -> %s", rel.Name, rel.Chart.Metadata.Name, rel.Chart.Metadata.Version, rel.Info.Status.String()))
} }

@ -222,6 +222,11 @@ func TestListCmd(t *testing.T) {
cmd: "list --superseded", cmd: "list --superseded",
golden: "output/list-superseded.txt", golden: "output/list-superseded.txt",
rels: releaseFixture, rels: releaseFixture,
}, {
name: "list deployed and superseded releases",
cmd: "list --deployed --superseded",
golden: "output/list-deployed-superseded.txt",
rels: releaseFixture,
}, { }, {
name: "list uninstalled releases", name: "list uninstalled releases",
cmd: "list --uninstalled", cmd: "list --uninstalled",

@ -4,6 +4,7 @@ hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chi
rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1 rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1
thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1 thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1
starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1 starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1
starlord default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
groot default 1 2016-01-16 00:00:01 +0000 UTC uninstalled chickadee-1.0.0 0.0.1 groot default 1 2016-01-16 00:00:01 +0000 UTC uninstalled chickadee-1.0.0 0.0.1
gamora default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1 gamora default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
drax default 1 2016-01-16 00:00:01 +0000 UTC uninstalling chickadee-1.0.0 0.0.1 drax default 1 2016-01-16 00:00:01 +0000 UTC uninstalling chickadee-1.0.0 0.0.1

@ -2,6 +2,7 @@ NAME NAMESPACE REVISION UPDATED STATUS CHA
drax default 1 2016-01-16 00:00:01 +0000 UTC uninstalling chickadee-1.0.0 0.0.1 drax default 1 2016-01-16 00:00:01 +0000 UTC uninstalling chickadee-1.0.0 0.0.1
gamora default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1 gamora default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
groot default 1 2016-01-16 00:00:01 +0000 UTC uninstalled chickadee-1.0.0 0.0.1 groot default 1 2016-01-16 00:00:01 +0000 UTC uninstalled chickadee-1.0.0 0.0.1
starlord default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1 starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1
thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1 thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1
rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1 rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1

@ -4,5 +4,6 @@ groot default 1 2016-01-16 00:00:01 +0000 UTC uninstalled chickadee-1.
hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1 hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1
iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1 iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1
rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1 rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1
starlord default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1 starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1
thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1 thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1

@ -4,5 +4,6 @@ groot default 1 2016-01-16 00:00:01 +0000 UTC uninstalled chi
hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1 hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1
iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1 iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1
rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1 rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1
starlord default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1 starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1
thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1 thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1

@ -1,6 +1,7 @@
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1 thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1
starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1 starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1
starlord default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1 rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1
iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1 iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1
hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1 hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1

@ -1 +1 @@
["drax","gamora","groot","hummingbird","iguana","rocket","starlord","thanos"] ["drax","gamora","groot","hummingbird","iguana","rocket","starlord","starlord","thanos"]

@ -5,4 +5,5 @@
- iguana - iguana
- rocket - rocket
- starlord - starlord
- starlord
- thanos - thanos

@ -5,4 +5,5 @@ hummingbird
iguana iguana
rocket rocket
starlord starlord
starlord
thanos thanos

@ -5,5 +5,6 @@ groot default 1 2016-01-16 00:00:01 +0000 UTC uninstalled chi
hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1 hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1
iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1 iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1
rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1 rocket default 1 2016-01-16 00:00:02 +0000 UTC failed chickadee-1.0.0 0.0.1
starlord default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1 starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1
thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1 thanos default 1 2016-01-16 00:00:01 +0000 UTC pending-install chickadee-1.0.0 0.0.1

@ -0,0 +1,6 @@
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
gamora default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
hummingbird default 1 2016-01-16 00:00:03 +0000 UTC deployed chickadee-1.0.0 0.0.1
iguana default 2 2016-01-16 00:00:04 +0000 UTC deployed chickadee-1.0.0 0.0.1
starlord default 1 2016-01-16 00:00:01 +0000 UTC superseded chickadee-1.0.0 0.0.1
starlord default 2 2016-01-16 00:00:01 +0000 UTC deployed chickadee-1.0.0 0.0.1
Loading…
Cancel
Save