Unverified Commit ffe5197e authored by Chris Yang's avatar Chris Yang Committed by GitHub

refactor (#70959)

parent 8e73bab9
......@@ -160,7 +160,7 @@ class CreateCommand extends CreateBase {
// If the project directory exists and isn't empty, then try to determine the template
// type from the project directory.
if (projectDir.existsSync() && projectDir.listSync().isNotEmpty) {
detectedProjectType = determineTemplateType(projectDir);
detectedProjectType = determineTemplateType();
if (detectedProjectType == null && metadataExists) {
// We can only be definitive that this is the wrong type if the .metadata file
// exists and contains a type that we don't understand, or doesn't contain a type.
......@@ -189,10 +189,6 @@ class CreateCommand extends CreateBase {
}
validateOutputDirectoryArg();
final String flutterRoot = getFlutterRoot();
final Directory projectDir = globals.fs.directory(argResults.rest.first);
final String projectDirPath = globals.fs.path.normalize(projectDir.absolute.path);
String sampleCode;
if (argResults['sample'] != null) {
......@@ -223,11 +219,10 @@ class CreateCommand extends CreateBase {
exitCode: 2);
}
final String organization = await getOrganization(projectDir);
final String organization = await getOrganization();
final bool overwrite = boolArg('overwrite');
validateProjectDir(projectDirPath, flutterRoot: flutterRoot, overwrite: overwrite);
final String projectName = getProjectName(projectDirPath);
validateProjectDir(overwrite: overwrite);
if (boolArg('with-driver-test')) {
globals.printError(
......
......@@ -105,6 +105,18 @@ abstract class CreateBase extends FlutterCommand {
);
}
/// The output directory of the command.
@protected
Directory get projectDir {
return globals.fs.directory(argResults.rest.first);
}
/// The normalized absolute path of [projectDir].
@protected
String get projectDirPath {
return globals.fs.path.normalize(projectDir.absolute.path);
}
/// Adds a `--platforms` argument.
///
/// The help message of the argument is replaced with `customHelp` if `customHelp` is not null.
......@@ -140,7 +152,7 @@ abstract class CreateBase extends FlutterCommand {
///
/// Throw with exit code 2 if the flutter sdk installed is invalid.
@protected
String getFlutterRoot() {
String get flutterRoot {
if (Cache.flutterRoot == null) {
throwToolExit(
'The FLUTTER_ROOT environment variable was not specified. Unable to find package:flutter.',
......@@ -177,10 +189,10 @@ abstract class CreateBase extends FlutterCommand {
/// Otherwise, we don't presume to know what type of project it could be, since
/// many of the files could be missing, and we can't really tell definitively.
///
/// Throws assertion if projectDir does not exist or empty.
/// Throws assertion if [projectDir] does not exist or empty.
/// Returns null if no project type can be determined.
@protected
FlutterProjectType determineTemplateType(Directory projectDir) {
FlutterProjectType determineTemplateType() {
assert(projectDir.existsSync() && projectDir.listSync().isNotEmpty);
final File metadataFile = globals.fs
.file(globals.fs.path.join(projectDir.absolute.path, '.metadata'));
......@@ -215,7 +227,7 @@ abstract class CreateBase extends FlutterCommand {
/// If `--org` is specified in the command, returns that directly.
/// If `--org` is not specified, returns the organization from the existing project.
@protected
Future<String> getOrganization(Directory projectDir) async {
Future<String> getOrganization() async {
String organization = stringArg('org');
if (!argResults.wasParsed('org')) {
final FlutterProject project = FlutterProject.fromDirectory(projectDir);
......@@ -233,20 +245,19 @@ abstract class CreateBase extends FlutterCommand {
/// Throws with exit 2 if the project directory is illegal.
@protected
void validateProjectDir(String dirPath,
{String flutterRoot, bool overwrite = false}) {
if (globals.fs.path.isWithin(flutterRoot, dirPath)) {
void validateProjectDir({bool overwrite = false}) {
if (globals.fs.path.isWithin(flutterRoot, projectDirPath)) {
throwToolExit(
'Cannot create a project within the Flutter SDK. '
"Target directory '$dirPath' is within the Flutter SDK at '$flutterRoot'.",
"Target directory '$projectDirPath' is within the Flutter SDK at '$flutterRoot'.",
exitCode: 2);
}
// If the destination directory is actually a file, then we refuse to
// overwrite, on the theory that the user probably didn't expect it to exist.
if (globals.fs.isFileSync(dirPath)) {
if (globals.fs.isFileSync(projectDirPath)) {
final String message =
"Invalid project name: '$dirPath' - refers to an existing file.";
"Invalid project name: '$projectDirPath' - refers to an existing file.";
throwToolExit(
overwrite
? '$message Refusing to overwrite a file with a directory.'
......@@ -258,17 +269,17 @@ abstract class CreateBase extends FlutterCommand {
return;
}
final FileSystemEntityType type = globals.fs.typeSync(dirPath);
final FileSystemEntityType type = globals.fs.typeSync(projectDirPath);
switch (type) {
case FileSystemEntityType.file:
// Do not overwrite files.
throwToolExit("Invalid project name: '$dirPath' - file exists.",
throwToolExit("Invalid project name: '$projectDirPath' - file exists.",
exitCode: 2);
break;
case FileSystemEntityType.link:
// Do not overwrite links.
throwToolExit("Invalid project name: '$dirPath' - refers to a link.",
throwToolExit("Invalid project name: '$projectDirPath' - refers to a link.",
exitCode: 2);
break;
default:
......@@ -279,7 +290,7 @@ abstract class CreateBase extends FlutterCommand {
///
/// Use the current directory path name if the `--project-name` is not specified explicitly.
@protected
String getProjectName(String projectDirPath) {
String get projectName {
final String projectName =
stringArg('project-name') ?? globals.fs.path.basename(projectDirPath);
if (!boolArg('skip-name-checks')) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment