copyFiles function

void copyFiles(
  1. Config config,
  2. String environment,
  3. bool verbose
)

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);
  }
}