From dd6f536fab70defc103e0c6ad4b738eb8e517378 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 11 Sep 2014 19:54:02 -0700 Subject: [PATCH] config: Merge for modules works --- config/config.go | 19 +++++++++++++++++++ config/merge.go | 17 +++++++++++++++++ config/merge_test.go | 10 ++++++++++ 3 files changed, 46 insertions(+) diff --git a/config/config.go b/config/config.go index cdc2237c3..51a033427 100644 --- a/config/config.go +++ b/config/config.go @@ -309,6 +309,25 @@ func (c *Config) allVariables() map[string][]InterpolatedVariable { return result } +func (m *Module) mergerName() string { + return m.Id() +} + +func (m *Module) mergerMerge(other merger) merger { + m2 := other.(*Module) + + result := *m + result.Name = m2.Name + result.Type = m2.Type + result.RawConfig = result.RawConfig.merge(m2.RawConfig) + + if m2.Source != "" { + result.Source = m2.Source + } + + return &result +} + func (o *Output) mergerName() string { return o.Name } diff --git a/config/merge.go b/config/merge.go index 835d652a9..c43f13c04 100644 --- a/config/merge.go +++ b/config/merge.go @@ -35,6 +35,23 @@ func Merge(c1, c2 *Config) (*Config, error) { var m1, m2, mresult []merger + // Modules + m1 = make([]merger, 0, len(c1.Modules)) + m2 = make([]merger, 0, len(c2.Modules)) + for _, v := range c1.Modules { + m1 = append(m1, v) + } + for _, v := range c2.Modules { + m2 = append(m2, v) + } + mresult = mergeSlice(m1, m2) + if len(mresult) > 0 { + c.Modules = make([]*Module, len(mresult)) + for i, v := range mresult { + c.Modules[i] = v.(*Module) + } + } + // Outputs m1 = make([]merger, 0, len(c1.Outputs)) m2 = make([]merger, 0, len(c2.Outputs)) diff --git a/config/merge_test.go b/config/merge_test.go index 10ef5f37a..2dbe5aee9 100644 --- a/config/merge_test.go +++ b/config/merge_test.go @@ -13,6 +13,9 @@ func TestMerge(t *testing.T) { // Normal good case. { &Config{ + Modules: []*Module{ + &Module{Name: "foo"}, + }, Outputs: []*Output{ &Output{Name: "foo"}, }, @@ -30,6 +33,9 @@ func TestMerge(t *testing.T) { }, &Config{ + Modules: []*Module{ + &Module{Name: "bar"}, + }, Outputs: []*Output{ &Output{Name: "bar"}, }, @@ -47,6 +53,10 @@ func TestMerge(t *testing.T) { }, &Config{ + Modules: []*Module{ + &Module{Name: "foo"}, + &Module{Name: "bar"}, + }, Outputs: []*Output{ &Output{Name: "foo"}, &Output{Name: "bar"},