From a80e5c20f3374bb1f9d1424e9f786f2aa57fe60a Mon Sep 17 00:00:00 2001 From: John McCutchan Date: Wed, 15 Mar 2017 15:22:54 -0700 Subject: [PATCH] Add a doctor check for host executable compatibility (#8798) Fixes #6207 --- packages/flutter_tools/lib/src/doctor.dart | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart index 4fea00a3353..92e31696fa4 100644 --- a/packages/flutter_tools/lib/src/doctor.dart +++ b/packages/flutter_tools/lib/src/doctor.dart @@ -9,6 +9,7 @@ import 'package:archive/archive.dart'; import 'android/android_studio_validator.dart'; import 'android/android_workflow.dart'; +import 'artifacts.dart'; import 'base/common.dart'; import 'base/context.dart'; import 'base/file_system.dart'; @@ -67,6 +68,7 @@ class Doctor { if (_validators == null) { _validators = []; _validators.add(new _FlutterValidator()); + _validators.add(new _HostExecutableValidator()); if (_androidWorkflow.appliesToHostPlatform) _validators.add(_androidWorkflow); @@ -244,6 +246,36 @@ class _FlutterValidator extends DoctorValidator { } } +class _HostExecutableValidator extends DoctorValidator { + _HostExecutableValidator() : super('Host Executable Compatibility'); + + bool _genSnapshotRuns(String genSnapshotPath) { + final int kExpectedExitCode = 255; + try { + return processManager.runSync([genSnapshotPath]).exitCode == kExpectedExitCode; + } catch (error) { + return false; + } + } + + @override + Future validate() async { + final String genSnapshotPath = + artifacts.getArtifactPath(Artifact.genSnapshot); + final List messages = []; + final bool hostExecutablesRun = _genSnapshotRuns(genSnapshotPath); + final ValidationType valid = hostExecutablesRun ? ValidationType.installed : ValidationType.missing; + + if (hostExecutablesRun) { + messages.add(new ValidationMessage('Downloaded executables execute on host')); + } else { + messages.add(new ValidationMessage.error( + 'Downloaded executables cannot execute on host. See https://github.com/flutter/flutter/issues/6207 for more information')); + } + return new ValidationResult(valid, messages); + } +} + class NoIdeValidator extends DoctorValidator { NoIdeValidator() : super('Flutter IDE Support');