• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tarantool / go-config / 26408332258
87%
master: 87%

Build:
Build:
LAST BUILD BRANCH: refs/tags/v1.4.0
DEFAULT BRANCH: master
Ran 25 May 2026 03:38PM UTC
Jobs 1
Files 42
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

25 May 2026 10:23AM UTC coverage: 86.885% (-0.06%) from 86.941%
26408332258

Pull #76

github

bigbes
config: align cross-loader MergeReplace and plug array footgun in mergeNodeValue

Two follow-ups exposed by the new MergeDeep default.

1) accumulateLayerResult (cross-loader merger) had a special-case for
   MergeReplace that recursively merged map nodes "so a loader that sets
   only one sub-key does not drop sibling sub-keys contributed by a
   lower-priority loader". That bridged the historic gap when MergeReplace
   was the implicit default. With MergeDeep now the default, default keys
   take the (already-correct) MergeDeep branch, leaving the special-case
   firing only for users who explicitly opted into MergeReplace — and
   silently contradicting their intent.

   Now both code paths (foldScopeChainInto + accumulateLayerResult) route
   through mergeIntoResultWithStrategies, so explicit MergeReplace means
   wholesale replace regardless of whether the conflict comes from two
   scopes of one loader or two separate loaders. The constant's docstring
   and the existing TestWithInheritance_ParentAndChildStrategies were
   already aligned with this behavior; cross-loader was the outlier.

2) mergeNodeValue (per-leaf collector merge) used !node.IsLeaf() to detect
   maps. Arrays are also non-leaf — their indexed children "0", "1", ...
   look like map keys — so a collector that follows an array path with a
   map value at the same path produced a hybrid node still flagged as
   isArray with extra string-keyed children. Switch to isMapNode and call
   UnmarkArray when converting array → map / array → scalar, mirroring
   the earlier deepMergeNodes / mergeTreeInto fix.

- Add tree.Node.UnmarkArray plus its unit tests.
- Cross-loader tests: TestLayered_CrossLoader_ExplicitMergeReplaceMap_
  WholesaleReplaces, ExplicitMergeReplaceMatchesScopeChain (pins the
  scope-chain/cross-loader equivalence), ExplicitReplaceLeavesDefaultsAlone,
  and ExplicitMergeReplaceTypeMismatch (map↔array, map↔scalar).
- Collector tests: TestMergeCollector_ArrayToMapConvers... (continued)
Pull Request #76: config: deep-merge maps by default during scope-chain inheritance

28 of 28 new or added lines in 3 files covered. (100.0%)

3 existing lines in 1 file now uncovered.

3829 of 4407 relevant lines covered (86.88%)

107.73 hits per line

Coverage Regressions

Lines Coverage ∆ File
3
96.22
-0.79% inheritance.go
Jobs
ID Job ID Ran Files Coverage
1 26408332258.1 25 May 2026 03:38PM UTC 42
86.88
GitHub Action Run
Source Files on build 26408332258
  • Tree
  • List 42
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Pull Request #76
  • PR Base - master (#26288686435)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc