Add validity checks to create (#3215) * Add validity checks to create * Adjust indent
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index d567d4d..4611e21 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -88,6 +88,10 @@ String dirPath = path.normalize(projectDir.absolute.path); String projectName = _normalizeProjectName(path.basename(dirPath)); + if (_validateProjectDir(dirPath) != null) { + printError(_validateProjectDir(dirPath)); + return 1; + } if (_validateProjectName(projectName) != null) { printError(_validateProjectName(projectName)); return 1; @@ -217,9 +221,32 @@ String _validateProjectName(String projectName) { if (_packageDependencies.contains(projectName)) { return "Invalid project name: '$projectName' - this will conflict with Flutter " - "package dependencies."; + "package dependencies."; } + return null; +} +/// Return `null` if the project directory is legal. Return a validation message +/// if we should disallow the directory name. +String _validateProjectDir(String projectName) { + FileSystemEntityType type = FileSystemEntity.typeSync(projectName); + if (type != FileSystemEntityType.NOT_FOUND) { + switch(type) { + case FileSystemEntityType.DIRECTORY: + // Do not re-use directory if it is not empty. + if (new Directory(projectName).listSync(followLinks: false).isNotEmpty) { + return "Invalid project name: '$projectName' - refers to a directory " + "that is not empty."; + }; + break; + case FileSystemEntityType.FILE: + // Do not overwrite files. + return "Invalid project name: '$projectName' - file exists."; + case FileSystemEntityType.LINK: + // Do not overwrite links. + return "Invalid project name: '$projectName' - refers to a link."; + } + } return null; }