Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
1105 Внедрение механизмов обеспечения безопасности цепочки поставки программных проектов
Legacy
scanned-projects
helm
Commits
8f3c2d5e
Commit
8f3c2d5e
authored
7 years ago
by
Matt Butcher
Committed by
GitHub
7 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #2511 from technosophos/fix/2452-predictable-template-order
fix(2452): sort templates before parse
parents
b031a410
8937c775
main
Release
add-codeql
dependabot/go_modules/github.com/docker/distribution-2.8.2incompatible
dependabot/go_modules/github.com/lib/pq-1.10.9
dependabot/go_modules/github.com/rubenv/sql-migrate-1.4.0
dependabot/go_modules/golang.org/x/crypto-0.9.0
dependabot/go_modules/golang.org/x/term-0.8.0
dependabot/go_modules/k8s.io/klog/v2-2.100.1
dev-v2
feat-v3/event-emitter-lua
release-2.10
release-2.11
release-2.12
release-2.13
release-2.14
release-2.15
release-2.16
release-2.17
release-2.5
release-2.6
release-2.7
release-2.8
release-2.9
release-3.0
release-3.1
release-3.10
release-3.11
release-3.12
release-3.2
release-3.3
release-3.4
release-3.5
release-3.6
release-3.6.1
release-3.6.2
release-3.7
release-3.8
release-3.9
release-v3.0.0-beta.4
v3.12.0
v3.12.0-rc.1
v3.12.0-dev.1
v3.11.3
v3.11.2
v3.11.1
v3.11.0
v3.11.0-rc.2
v3.11.0-rc.1
v3.10.3
v3.10.2
v3.10.1
v3.10.0
v3.10.0-rc.1
v3.9.4
v3.9.3
v3.9.2
v3.9.1
v3.9.0
v3.9.0-rc.1
v3.8.2
v3.8.1
v3.8.0
v3.8.0-rc.2
v3.8.0-rc.1
v3.7.2
v3.7.1
v3.7.0
v3.7.0-rc.3
v3.7.0-rc.2
v3.7.0-rc.1
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.6.0-rc.1
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.5.0-rc.2
v3.5.0-rc.1
v3.4.2
v3.4.1
v3.4.0
v3.4.0-rc.1
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.3.0-rc.2
v3.3.0-rc.1
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.2.0-rc.1
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.1.0-rc.3
v3.1.0-rc.2
v3.1.0-rc.1
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-beta.5
v3.0.0-beta.4
v3.0.0-beta.3
v3.0.0-beta.2
v3.0.0-beta.1
v3.0.0-alpha.2
v3.0.0-alpha.1
v2.17.0
v2.17.0-rc.1
v2.16.12
v2.16.11
v2.16.10
v2.16.9
v2.16.8
v2.16.7
v2.16.6
v2.16.5
v2.16.4
v2.16.3
v2.16.2
v2.16.1
v2.16.0
v2.16.0-rc.2
v2.16.0-rc.1
v2.15.2
v2.15.1
v2.15.0
v2.15.0-rc.2
v2.15.0-rc.1
v2.14.3
v2.14.2
v2.14.1
v2.14.0
v2.14.0-rc.2
v2.14.0-rc.1
v2.13.1
v2.13.1-rc.1
v2.13.0
v2.13.0-rc.2
v2.13.0-rc.1
v2.12.3
v2.12.2
v2.12.1
v2.12.0
v2.12.0-rc.2
v2.12.0-rc.1
v2.11.0
v2.11.0-rc.4
v2.11.0-rc.3
v2.11.0-rc.2
v2.11.0-rc.1
v2.10.0
v2.10.0-rc.3
v2.10.0-rc.2
v2.10.0-rc.1
v2.9.1
v2.9.0
v2.9.0-rc5
v2.9.0-rc4
v2.9.0-rc3
v2.9.0-rc2
v2.9.0-rc1
v2.8.2
v2.8.2-rc1
v2.8.1
v2.8.0
v2.8.0-rc.1
v2.7.2
v2.7.1
v2.7.0
v2.7.0-rc1
v2.6.2
v2.6.1
v2.6.0
v2.5.1
v2.5.0
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
pkg/engine/engine.go
+32
-1
pkg/engine/engine.go
pkg/engine/engine_test.go
+31
-0
pkg/engine/engine_test.go
with
63 additions
and
1 deletion
+63
-1
pkg/engine/engine.go
+
32
−
1
View file @
8f3c2d5e
...
...
@@ -20,6 +20,7 @@ import (
"bytes"
"fmt"
"path"
"sort"
"strings"
"text/template"
...
...
@@ -181,8 +182,14 @@ func (e *Engine) render(tpls map[string]renderable) (map[string]string, error) {
funcMap
:=
e
.
alterFuncMap
(
t
)
// We want to parse the templates in a predictable order. The order favors
// higher-level (in file system) templates over deeply nested templates.
keys
:=
sortTemplates
(
tpls
)
files
:=
[]
string
{}
for
fname
,
r
:=
range
tpls
{
//for fname, r := range tpls {
for
_
,
fname
:=
range
keys
{
r
:=
tpls
[
fname
]
t
=
t
.
New
(
fname
)
.
Funcs
(
funcMap
)
if
_
,
err
:=
t
.
Parse
(
r
.
tpl
);
err
!=
nil
{
return
map
[
string
]
string
{},
fmt
.
Errorf
(
"parse error in %q: %s"
,
fname
,
err
)
...
...
@@ -215,6 +222,30 @@ func (e *Engine) render(tpls map[string]renderable) (map[string]string, error) {
return
rendered
,
nil
}
func
sortTemplates
(
tpls
map
[
string
]
renderable
)
[]
string
{
keys
:=
make
([]
string
,
len
(
tpls
))
i
:=
0
for
key
:=
range
tpls
{
keys
[
i
]
=
key
i
++
}
sort
.
Sort
(
sort
.
Reverse
(
byPathLen
(
keys
)))
return
keys
}
type
byPathLen
[]
string
func
(
p
byPathLen
)
Len
()
int
{
return
len
(
p
)
}
func
(
p
byPathLen
)
Swap
(
i
,
j
int
)
{
p
[
j
],
p
[
i
]
=
p
[
i
],
p
[
j
]
}
func
(
p
byPathLen
)
Less
(
i
,
j
int
)
bool
{
a
,
b
:=
p
[
i
],
p
[
j
]
ca
,
cb
:=
strings
.
Count
(
a
,
"/"
),
strings
.
Count
(
b
,
"/"
)
if
ca
==
cb
{
return
strings
.
Compare
(
a
,
b
)
==
-
1
}
return
ca
<
cb
}
// allTemplates returns all templates for a chart and its dependencies.
//
// As it goes, it also prepares the values in a scope-sensitive manner.
...
...
This diff is collapsed.
Click to expand it.
pkg/engine/engine_test.go
+
31
−
0
View file @
8f3c2d5e
...
...
@@ -27,6 +27,37 @@ import (
"github.com/golang/protobuf/ptypes/any"
)
func
TestSortTemplates
(
t
*
testing
.
T
)
{
tpls
:=
map
[
string
]
renderable
{
"/mychart/templates/foo.tpl"
:
{},
"/mychart/templates/charts/foo/charts/bar/templates/foo.tpl"
:
{},
"/mychart/templates/bar.tpl"
:
{},
"/mychart/templates/charts/foo/templates/bar.tpl"
:
{},
"/mychart/templates/_foo.tpl"
:
{},
"/mychart/templates/charts/foo/templates/foo.tpl"
:
{},
"/mychart/templates/charts/bar/templates/foo.tpl"
:
{},
}
got
:=
sortTemplates
(
tpls
)
if
len
(
got
)
!=
len
(
tpls
)
{
t
.
Fatal
(
"Sorted results are missing templates"
)
}
expect
:=
[]
string
{
"/mychart/templates/charts/foo/charts/bar/templates/foo.tpl"
,
"/mychart/templates/charts/foo/templates/foo.tpl"
,
"/mychart/templates/charts/foo/templates/bar.tpl"
,
"/mychart/templates/charts/bar/templates/foo.tpl"
,
"/mychart/templates/foo.tpl"
,
"/mychart/templates/bar.tpl"
,
"/mychart/templates/_foo.tpl"
,
}
for
i
,
e
:=
range
expect
{
if
got
[
i
]
!=
e
{
t
.
Errorf
(
"expected %q, got %q at index %d
\n\t
Exp: %#v
\n\t
Got: %#v"
,
e
,
got
[
i
],
i
,
expect
,
got
)
}
}
}
func
TestEngine
(
t
*
testing
.
T
)
{
e
:=
New
()
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets