valdate project names in create
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index 017b8cf..3449dd2 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -76,7 +76,15 @@ projectDir = new Directory(argResults.rest.first); } - _renderTemplates(projectDir, flutterPackagesDirectory, + String dirPath = path.normalize(projectDir.absolute.path); + String projectName = _normalizeProjectName(path.basename(dirPath)); + + if (_validateProjectName(projectName) != null) { + printError(_validateProjectName(projectName)); + return 1; + } + + _renderTemplates(projectName, dirPath, flutterPackagesDirectory, renderDriverTest: argResults['with-driver-test']); if (argResults['pub']) { @@ -115,16 +123,14 @@ return 0; } - void _renderTemplates(Directory projectDir, String flutterPackagesDirectory, - { bool renderDriverTest: false }) { - String dirPath = path.normalize(projectDir.absolute.path); - String projectName = _normalizeProjectName(path.basename(dirPath)); + void _renderTemplates(String projectName, String dirPath, + String flutterPackagesDirectory, { bool renderDriverTest: false }) { String projectIdentifier = _createProjectIdentifier(path.basename(dirPath)); String relativeFlutterPackagesDirectory = path.relative(flutterPackagesDirectory, from: dirPath); printStatus('Creating project ${path.basename(projectName)}:'); - projectDir.createSync(recursive: true); + new Directory(dirPath).createSync(recursive: true); Map templateContext = <String, dynamic>{ 'projectName': projectName, @@ -164,3 +170,34 @@ name = name.length == 0 ? 'untitled' : name; return 'com.yourcompany.$name'; } + +final Set<String> _packageDependencies = new Set<String>.from(<String>[ + 'args', + 'async', + 'collection', + 'convert', + 'flutter', + 'html', + 'intl', + 'logging', + 'matcher', + 'mime', + 'path', + 'plugin', + 'pool', + 'test', + 'utf', + 'watcher', + 'yaml' +]); + +/// Return `null` if the project name is legal. Return a validation message if +/// we should disallow the project name. +String _validateProjectName(String projectName) { + if (_packageDependencies.contains(projectName)) { + return "Invalid project name: '$projectName' - this will conflict with Flutter " + "package dependencies."; + } + + return null; +}