mergeCustomProviderEntries function
List<CustomProviderEntry>
mergeCustomProviderEntries(
- List<
CustomProviderEntry> caller, - List<
CustomProviderEntry> onDisk
The merge-before-write union for the customProviders: section (issue
#221): caller is the saving process's intended list, onDisk the
freshly re-read list. Caller's entries win per name (case-insensitive)
— an in-flight edit lands — while on-disk entries the caller never
loaded survive (no stale-snapshot clobber). Reserved (catalog-named)
entries are dropped from the result so a ghost can never persist.
Implementation
List<CustomProviderEntry> mergeCustomProviderEntries(
List<CustomProviderEntry> caller,
List<CustomProviderEntry> onDisk,
) {
final callerNames = {for (final e in caller) e.name.toLowerCase()};
return [
for (final e in caller)
if (!isReservedCustomProviderName(e.name)) e,
for (final e in onDisk)
if (!callerNames.contains(e.name.toLowerCase()) &&
!isReservedCustomProviderName(e.name))
e,
];
}