copyFiles function
Implementation
void copyFiles(Config config, String environment, bool verbose) {
final envDir = Directory('${Directory.current.path}/env_files');
final defaultFiles = config.defaults.files?.map((key, value) => MapEntry('${envDir.path}/default/$key', value));
final envFiles =
config.environments[environment]?.files?.map((key, value) => MapEntry('${envDir.path}/$environment/$key', value));
// Remove redundant values from default.
if (defaultFiles?.entries != null && envFiles?.entries != null) {
for (var entry in envFiles!.entries) {
defaultFiles!.removeWhere((key, value) => value == entry.value);
}
}
var combinedFiles = {...(defaultFiles ?? {}), ...(envFiles ?? {})};
if (combinedFiles.isEmpty) {
if (verbose) stdout.writeln('No files to copy.');
return;
}
if (!envDir.existsSync()) {
stdout.writeln('WARNING: No env_files directory.');
return;
}
if (verbose) stdout.writeln('Using $environment environment, copying files:\n$combinedFiles');
for (var entry in combinedFiles.entries) {
//Key is source, value is dest
var path = (entry.value.split('/')..removeLast()).join('/');
Directory(path).createSync(recursive: true);
File(entry.key).copy(entry.value);
}
}