copy static method
Implementation
static ClientEnvCopyResult copy({
required String source,
required String from,
required String to,
Map<String, String> overrides = const {},
}) {
final sourceValues = ConfigService.parseEnvContent(source);
final overridden = <String>[];
final pathsRewritten = <String>[];
final dropped = <String>[];
final values = <String, String>{};
final out = <String>[
'# Started from "$from" by udara_cli setup --from. Keys that belong to',
'# $from (ids, API keys, tenant) were copied as they are: check them.',
'',
];
for (final line in source.split('\n')) {
final m = _line.firstMatch(line);
if (m == null) {
out.add(line);
continue;
}
final key = m.group(2)!;
if (key.startsWith('RELEASE_')) {
dropped.add(key);
continue;
}
if (overrides.containsKey(key)) {
overridden.add(key);
values[key] = overrides[key]!;
out.add('${m.group(1)}$key${m.group(3)}${_quote(overrides[key]!)}');
continue;
}
final raw = m.group(4)!;
final rewritten = _rewritePaths(raw, from, to);
if (rewritten != raw) pathsRewritten.add(key);
values[key] = ConfigService.parseEnvContent('$key=$rewritten')[key] ?? '';
out.add('${m.group(1)}$key${m.group(3)}$rewritten');
}
final added = [
for (final key in overrides.keys)
if (!overridden.contains(key) && !key.startsWith('RELEASE_')) key,
];
if (added.isNotEmpty) {
while (out.isNotEmpty && out.last.trim().isEmpty) {
out.removeLast();
}
out
..add('')
..add('# From BRANDING.md');
for (final key in added) {
values[key] = overrides[key]!;
out.add('$key=${_quote(overrides[key]!)}');
}
}
var text = out.join('\n');
if (!text.endsWith('\n')) text += '\n';
return ClientEnvCopyResult(
text: text,
overridden: overridden,
added: added,
pathsRewritten: pathsRewritten,
dropped: dropped,
sameAsSource: [
for (final key in identityKeys)
if (sourceValues.containsKey(key) &&
values[key] == sourceValues[key] &&
(values[key] ?? '').isNotEmpty)
key,
],
);
}