From b6a5eb7df19953cbe8520f95faed492c1c402c8b Mon Sep 17 00:00:00 2001 From: Davide Fazzone Date: Tue, 14 Dec 2021 17:54:42 +0100 Subject: [PATCH 1/2] Implement except for walk case --- processor/helpers.go | 5 +++++ processor/processor.go | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/processor/helpers.go b/processor/helpers.go index c72285f..c0ce55d 100644 --- a/processor/helpers.go +++ b/processor/helpers.go @@ -97,6 +97,11 @@ func fillSliceWithFiles(files *[]string) filepath.WalkFunc { } } +func getFileName(path string) string { + chunked := strings.Split(path, "/") + return chunked[len(chunked)-1] +} + func concatFileNameWithPath(path string) (string, string) { var fileName, parent string chunked := strings.Split(path, "/") diff --git a/processor/processor.go b/processor/processor.go index 3235066..21ab43c 100644 --- a/processor/processor.go +++ b/processor/processor.go @@ -134,6 +134,10 @@ func (p *Processor) walk(cfg aviator.Spruce, outer string) error { regex := getRegexp(cfg.ForEach.Regexp) for _, f := range sl { filename, parent := concatFileNameWithPath(f) + if except(cfg.ForEach.Except, getFileName(f)) { + p.warnings = append(p.warnings, "SKIPPED: "+getFileName(f)) + continue + } match := enableMatching(cfg.ForEach, parent) matched, _ := regexp.MatchString(regex, filename) if strings.Contains(outer, match) && matched { From 84d760bd412814f2840e39eb08e45fad22533ffb Mon Sep 17 00:00:00 2001 From: Davide Fazzone Date: Mon, 28 Feb 2022 12:48:26 +0100 Subject: [PATCH 2/2] New test for Walk case w/ except --- processor/processor_test.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/processor/processor_test.go b/processor/processor_test.go index 93f84d3..b67ae54 100644 --- a/processor/processor_test.go +++ b/processor/processor_test.go @@ -490,6 +490,29 @@ var _ = Describe("Processor", func() { Expect(len(mergeOpts.Files)).To(Equal(5)) }) }) + + Context("'In' in combination with 'subdirs' and 'except'", func() { + It("should run a merge for each file in the directory specified in 'for_each.in' and its subdirs, except those specified in 'except'.. its even more complicated", func() { + cfg.Merge[0].With.Files = []string{"fake1", "fake2"} + cfg.ForEach.In = "integration/yamls/addons/" + cfg.ForEach.SubDirs = true + cfg.ForEach.Except = "fake2" + cfg.ForEach.ForAll = "integration/yamls/" + + spruceConfig = []aviator.Spruce{cfg} + spruceClient = new(fakes.FakeSpruceClient) + processor = NewTestProcessor(spruceClient, store, modifier) + + err := processor.ProcessSilent(spruceConfig) + Expect(err).ToNot(HaveOccurred()) + + cc := spruceClient.MergeWithOptsCallCount() + Expect(cc).To(Equal(8)) + + mergeOpts := spruceClient.MergeWithOptsArgsForCall(0) + Expect(len(mergeOpts.Files)).To(Equal(4)) + }) + }) }) }) })