From 6d859fc9b08904d57a2305902fcbaef773b793fa Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Tue, 5 Mar 2019 17:58:36 -0800 Subject: [PATCH] llbsolver: fix selectors dedupe Signed-off-by: Tonis Tiigi --- solver/llbsolver/ops/exec.go | 2 +- solver/llbsolver/ops/exec_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 solver/llbsolver/ops/exec_test.go diff --git a/solver/llbsolver/ops/exec.go b/solver/llbsolver/ops/exec.go index 078aa8b7b..bbc744703 100644 --- a/solver/llbsolver/ops/exec.go +++ b/solver/llbsolver/ops/exec.go @@ -165,7 +165,7 @@ func dedupePaths(inp []string) []string { for p1 := range old { var skip bool for p2 := range old { - if p1 != p2 && strings.HasPrefix(p1, p2) { + if p1 != p2 && strings.HasPrefix(p1, p2+"/") { skip = true break } diff --git a/solver/llbsolver/ops/exec_test.go b/solver/llbsolver/ops/exec_test.go new file mode 100644 index 000000000..fcbf2799c --- /dev/null +++ b/solver/llbsolver/ops/exec_test.go @@ -0,0 +1,27 @@ +package ops + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDedupPaths(t *testing.T) { + res := dedupePaths([]string{"Gemfile", "Gemfile/foo"}) + require.Equal(t, []string{"Gemfile"}, res) + + res = dedupePaths([]string{"Gemfile/bar", "Gemfile/foo"}) + require.Equal(t, []string{"Gemfile/bar", "Gemfile/foo"}, res) + + res = dedupePaths([]string{"Gemfile", "Gemfile.lock"}) + require.Equal(t, []string{"Gemfile", "Gemfile.lock"}, res) + + res = dedupePaths([]string{"Gemfile.lock", "Gemfile"}) + require.Equal(t, []string{"Gemfile", "Gemfile.lock"}, res) + + res = dedupePaths([]string{"foo", "Gemfile", "Gemfile/foo"}) + require.Equal(t, []string{"Gemfile", "foo"}, res) + + res = dedupePaths([]string{"foo/bar/baz", "foo/bara", "foo/bar/bax", "foo/bar"}) + require.Equal(t, []string{"foo/bar", "foo/bara"}, res) +}