mirror of https://github.com/helm/helm
Merge pull request #2157 from jchauncey/hook-weights
feat(hooks): Adds weighted hookspull/2215/head
commit
9665db7d16
@ -0,0 +1,53 @@
|
||||
/*
|
||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package tiller
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"k8s.io/helm/pkg/proto/hapi/release"
|
||||
)
|
||||
|
||||
// sortByHookWeight does an in-place sort of hooks by their supplied weight.
|
||||
func sortByHookWeight(hooks []*release.Hook) []*release.Hook {
|
||||
hs := newHookWeightSorter(hooks)
|
||||
sort.Sort(hs)
|
||||
return hs.hooks
|
||||
}
|
||||
|
||||
type hookWeightSorter struct {
|
||||
hooks []*release.Hook
|
||||
}
|
||||
|
||||
func newHookWeightSorter(h []*release.Hook) *hookWeightSorter {
|
||||
return &hookWeightSorter{
|
||||
hooks: h,
|
||||
}
|
||||
}
|
||||
|
||||
func (hs *hookWeightSorter) Len() int { return len(hs.hooks) }
|
||||
|
||||
func (hs *hookWeightSorter) Swap(i, j int) {
|
||||
hs.hooks[i], hs.hooks[j] = hs.hooks[j], hs.hooks[i]
|
||||
}
|
||||
|
||||
func (hs *hookWeightSorter) Less(i, j int) bool {
|
||||
if hs.hooks[i].Weight == hs.hooks[j].Weight {
|
||||
return hs.hooks[i].Name < hs.hooks[j].Name
|
||||
}
|
||||
return hs.hooks[i].Weight < hs.hooks[j].Weight
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
/*
|
||||
Copyright 2017 The Kubernetes Authors All rights reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package tiller
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"k8s.io/helm/pkg/proto/hapi/release"
|
||||
)
|
||||
|
||||
func TestHookSorter(t *testing.T) {
|
||||
hooks := []*release.Hook{
|
||||
{
|
||||
Name: "g",
|
||||
Kind: "pre-install",
|
||||
Weight: 99,
|
||||
},
|
||||
{
|
||||
Name: "f",
|
||||
Kind: "pre-install",
|
||||
Weight: 3,
|
||||
},
|
||||
{
|
||||
Name: "b",
|
||||
Kind: "pre-install",
|
||||
Weight: -3,
|
||||
},
|
||||
{
|
||||
Name: "e",
|
||||
Kind: "pre-install",
|
||||
Weight: 3,
|
||||
},
|
||||
{
|
||||
Name: "a",
|
||||
Kind: "pre-install",
|
||||
Weight: -10,
|
||||
},
|
||||
{
|
||||
Name: "c",
|
||||
Kind: "pre-install",
|
||||
Weight: 0,
|
||||
},
|
||||
{
|
||||
Name: "d",
|
||||
Kind: "pre-install",
|
||||
Weight: 3,
|
||||
},
|
||||
}
|
||||
|
||||
res := sortByHookWeight(hooks)
|
||||
got := ""
|
||||
expect := "abcdefg"
|
||||
for _, r := range res {
|
||||
got += r.Name
|
||||
}
|
||||
if got != expect {
|
||||
t.Errorf("Expected %q, got %q", expect, got)
|
||||
}
|
||||
}
|
Loading…
Reference in new issue