Skip to content

A2 followup: .properties / .ini structured-config format

Placeholder ppxd requested to merge feat/calamari-properties-config-format into main

Summary

Adds PropertiesConfigFormat to the PR-3 (#373) format dispatch. Java-stack operators (Spring Boot application.properties) + INI users get leaf replacement on the same Squid.Action.JsonConfigVariables toggle, routed by file extension.

Zero new NuGet deps. Zero wire-literal changes.

Path computation

File Path rule
.properties key IS the dot-path: logging.level.root=INFO → logging.level.root. Both = and : delimiters
.ini [section] prefixes the key: [database] url= → database.url

Format preservation (line-oriented, no DOM round-trip)

Rewrites ONLY the matched value span:

  • Comments (# / ! / ;), blank lines, key order, unmatched keys → byte-preserved
  • Delimiter + spacing (key = value) → preserved
  • CRLF vs LF → round-tripped per-line
  • Line-continuation values (key=part1\) → SKIPPED (left intact) to avoid corrupting Java multi-line values — documented + pinned

Shares ConfigVariableLookup with JSON/YAML/XML → identical Squid.* self-namespace guard + dot/colon dual-form lookup.

Test plan

  • Squid.Calamari.Tests: 504/504 (was 481; +23)
  • Squid.UnitTests: 5625/5625 (unchanged)
  • Build: 0 errors
  • 21 PropertiesConfigFormat tests: dotted/colon keys, INI sections + same-key disambiguation, comment/order/spacing/CRLF preservation, Squid.* guard, line-continuation skip
  • Registry dispatch + SupportedExtensions pin updated
  • Staging: real Spring Boot application.properties deploy

Non-breaking guarantee

Surface Status
Wire literals Unchanged — same toggle, extension dispatch
Existing JSON/YAML/XML config deploys Unchanged
.config (XDT) files Still not handled here (G1.2 owns them)
SquidWeb Untouched

Merge request reports

Loading