blob: e08cf1c60c306a432ba47e2c9708cb587e1cca48 [file] [log] [blame]
// 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 'base/common.dart';
import 'base/file_system.dart';
import 'cache.dart';
/// A validator that runs before the tool runs any command.
abstract class PreRunValidator {
factory PreRunValidator({
required FileSystem fileSystem,
}) => _DefaultPreRunValidator(fileSystem: fileSystem);
void validate();
}
class _DefaultPreRunValidator implements PreRunValidator {
_DefaultPreRunValidator({
required this.fileSystem,
});
final FileSystem fileSystem;
late final Directory _toolsDir = fileSystem.directory(
fileSystem.path.join(Cache.flutterRoot!, 'packages', 'flutter_tools'),
);
@override
void validate() {
// If a user downloads the Flutter SDK via a pre-built archive and there is
// an error during extraction, the user could have a valid Dart snapshot of
// the tool but not the source directory. We still need the source, so
// validate the source directory exists and toolExit if not.
if (!_toolsDir.existsSync()) {
throwToolExit(
'Flutter SDK installation appears corrupted: expected to find the '
'directory ${_toolsDir.path} but it does not exist! Please go to '
'https://flutter.dev/setup for instructions on how to re-install '
'Flutter.',
);
}
}
}
class NoOpPreRunValidator implements PreRunValidator {
const NoOpPreRunValidator();
@override
void validate() {}
}