// 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. // @dart = 2.8 import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:meta/meta.dart'; import 'package:platform/platform.dart'; import './globals.dart'; import './repository.dart'; import './state.dart'; import './stdio.dart'; const String kYesFlag = 'yes'; const String kStateOption = 'state-file'; /// Command to clean up persistent state file. /// /// If the release was not completed, this command will abort the release. class CleanCommand extends Command<void> { CleanCommand({ @required this.checkouts, }) : platform = checkouts.platform, fileSystem = checkouts.fileSystem, stdio = checkouts.stdio { final String defaultPath = defaultStateFilePath(platform); argParser.addFlag( kYesFlag, help: 'Override confirmation checks.', ); argParser.addOption( kStateOption, defaultsTo: defaultPath, help: 'Path to persistent state file. Defaults to $defaultPath', ); } final Checkouts checkouts; final FileSystem fileSystem; final Platform platform; final Stdio stdio; @override String get name => 'clean'; @override String get description => 'Cleanup persistent state file. ' 'This will abort a work in progress release.'; @override void run() { final File stateFile = checkouts.fileSystem.file(argResults[kStateOption]); if (!stateFile.existsSync()) { throw ConductorException( 'No persistent state file found at ${stateFile.path}!'); } if (!(argResults[kYesFlag] as bool)) { stdio.printStatus( 'Are you sure you want to clean up the persistent state file at\n' '${stateFile.path} (y/n)?', ); final String response = stdio.readLineSync(); // Only proceed if the first character of stdin is 'y' or 'Y' if (response.isEmpty || response[0].toLowerCase() != 'y') { stdio.printStatus('Aborting clean operation.'); return; } } stdio.printStatus('Deleting persistent state file ${stateFile.path}...'); stateFile.deleteSync(); } }