// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:process/process.dart'; import '../base/file_system.dart'; import '../base/logger.dart'; import '../base/platform.dart'; import '../base/terminal.dart'; import '../migrate/migrate_utils.dart'; import '../runner/flutter_command.dart'; import 'migrate_abandon.dart'; import 'migrate_apply.dart'; import 'migrate_status.dart'; /// Base command for the migration tool. class MigrateCommand extends FlutterCommand { MigrateCommand({ required bool verbose, required this.logger, required FileSystem fileSystem, required Terminal terminal, required Platform platform, required ProcessManager processManager, }) { addSubcommand(MigrateStatusCommand( verbose: verbose, logger: logger, fileSystem: fileSystem, platform: platform, processManager: processManager )); addSubcommand(MigrateAbandonCommand( logger: logger, fileSystem: fileSystem, terminal: terminal, platform: platform, processManager: processManager )); addSubcommand(MigrateApplyCommand( verbose: verbose, logger: logger, fileSystem: fileSystem, terminal: terminal, platform: platform, processManager: processManager )); } final Logger logger; @override final String name = 'migrate'; @override final String description = 'Migrates flutter generated project files to the current flutter version'; @override String get category => FlutterCommandCategory.project; @override Future<Set<DevelopmentArtifact>> get requiredArtifacts async => const <DevelopmentArtifact>{}; @override Future<FlutterCommandResult> runCommand() async { return const FlutterCommandResult(ExitStatus.fail); } } Future<bool> gitRepoExists(String projectDirectory, Logger logger, MigrateUtils migrateUtils) async { if (await migrateUtils.isGitRepo(projectDirectory)) { return true; } logger.printStatus('Project is not a git repo. Please initialize a git repo and try again.'); printCommandText('git init', logger); return false; } Future<bool> hasUncommittedChanges(String projectDirectory, Logger logger, MigrateUtils migrateUtils) async { if (await migrateUtils.hasUncommittedChanges(projectDirectory)) { logger.printStatus('There are uncommitted changes in your project. Please git commit, abandon, or stash your changes before trying again.'); return true; } return false; } /// Prints a command to logger with appropriate formatting. void printCommandText(String command, Logger logger) { logger.printStatus( '\n\$ $command\n', color: TerminalColor.grey, indent: 4, newline: false, ); }