From acb7fc7c90f560bfb8792614c80760028506bd28 Mon Sep 17 00:00:00 2001 From: urso Date: Mon, 9 Jan 2017 22:22:03 +0100 Subject: [PATCH] Update go-ucfg to version 0.4.5 --- CHANGELOG.asciidoc | 1 + glide.yaml | 2 +- .../github.com/elastic/go-ucfg/CHANGELOG.md | 11 +++- vendor/github.com/elastic/go-ucfg/merge.go | 62 +++++++++---------- 4 files changed, 43 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index c63086f0d6e1..19f78067a29f 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -36,6 +36,7 @@ https://github.com/elastic/beats/compare/v5.1.1...master[Check the HEAD diff] - Fix service times-out at startup. {pull}3056[3056] - Kafka module case sensitive host name matching. {pull}3193[3193] - Fix interface conversion panic in couchbase module {pull}3272[3272] +- Fix overwriting explicit empty config sections {issue}2918[2918] *Packetbeat* diff --git a/glide.yaml b/glide.yaml index 7408f6090dcb..1adbdb3b6c5f 100644 --- a/glide.yaml +++ b/glide.yaml @@ -83,7 +83,7 @@ import: - package: github.com/dustin/go-humanize version: 499693e27ee0d14ffab67c31ad065fdb3d34ea75 - package: github.com/elastic/go-ucfg - version: v0.4.4 + version: v0.4.5 - package: github.com/armon/go-socks5 version: 3a873e99f5400ad7706e464e905ffcc94b3ff247 - package: github.com/pkg/errors diff --git a/vendor/github.com/elastic/go-ucfg/CHANGELOG.md b/vendor/github.com/elastic/go-ucfg/CHANGELOG.md index 351d6ccbf28f..de0633e29223 100644 --- a/vendor/github.com/elastic/go-ucfg/CHANGELOG.md +++ b/vendor/github.com/elastic/go-ucfg/CHANGELOG.md @@ -14,6 +14,14 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +## [0.4.5] + +### Changed +- merging sub-configs enforces strict variable expansion #85 + +### Fixed +- fix merging nil sub-configs #85 + ## [0.4.4] ### Added @@ -160,7 +168,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Introduced CHANGELOG.md for documenting changes to ucfg. -[Unreleased]: https://github.com/elastic/go-ucfg/compare/v0.4.4...HEAD +[Unreleased]: https://github.com/elastic/go-ucfg/compare/v0.4.5...HEAD +[0.4.5]: https://github.com/elastic/go-ucfg/compare/v0.4.4...v0.4.5 [0.4.4]: https://github.com/elastic/go-ucfg/compare/v0.4.3...v0.4.4 [0.4.3]: https://github.com/elastic/go-ucfg/compare/v0.4.2...v0.4.3 [0.4.2]: https://github.com/elastic/go-ucfg/compare/v0.4.1...v0.4.2 diff --git a/vendor/github.com/elastic/go-ucfg/merge.go b/vendor/github.com/elastic/go-ucfg/merge.go index b8687dee3bd4..34d149faf65a 100644 --- a/vendor/github.com/elastic/go-ucfg/merge.go +++ b/vendor/github.com/elastic/go-ucfg/merge.go @@ -76,27 +76,13 @@ func mergeConfigDict(opts *options, to, from *Config) Error { field: k, } - old, ok := to.fields.get(k) - if !ok { - to.fields.set(k, v.cpy(ctx)) - continue - } - - subOld, err := old.toConfig(opts) + old, _ := to.fields.get(k) + merged, err := mergeValues(opts, old, v) if err != nil { - to.fields.set(k, v.cpy(ctx)) - continue - } - - subFrom, err := v.toConfig(opts) - if err != nil { - to.fields.set(k, v.cpy(ctx)) - continue - } - - if err := mergeConfig(opts, subOld, subFrom); err != nil { return err } + + to.fields.set(k, merged.cpy(ctx)) } return nil } @@ -114,23 +100,13 @@ func mergeConfigArr(opts *options, to, from *Config) Error { field: fmt.Sprintf("%v", i), } - v := from.fields.array()[i] - old := to.fields.array()[i] - subOld, err := old.toConfig(opts) - if err != nil { - to.fields.setAt(i, cfgSub{to}, v.cpy(ctx)) - continue - } - - subFrom, err := v.toConfig(opts) + v := from.fields.array()[i] + merged, err := mergeValues(opts, old, v) if err != nil { - to.fields.setAt(i, cfgSub{to}, v.cpy(ctx)) - } - - if err := mergeConfig(opts, subOld, subFrom); err != nil { return err } + to.fields.setAt(i, cfgSub{to}, merged.cpy(ctx)) } end := len(from.fields.array()) @@ -151,6 +127,30 @@ func mergeConfigArr(opts *options, to, from *Config) Error { return nil } +func mergeValues(opts *options, old, v value) (value, Error) { + if old == nil { + return v, nil + } + + // check if new and old value evaluate to sub-configurations. If one is no + // sub-configuration, use new value only. + subOld, err := old.toConfig(opts) + if err != nil { + return v, nil + } + subV, err := v.toConfig(opts) + if err != nil { + return v, nil + } + + // merge new and old evaluated sub-configurations and return subOld for + // reassigning to old key in case of subOld being generated dynamically + if err := mergeConfig(opts, subOld, subV); err != nil { + return nil, err + } + return cfgSub{subOld}, nil +} + // convert from into normalized *Config checking for errors // before merging generated(normalized) config with current config func normalize(opts *options, from interface{}) (*Config, Error) {