From d56717399b2e16f4ea3acd5eff3b32ce32776b0d Mon Sep 17 00:00:00 2001 From: Dave Shifflett Date: Thu, 1 Apr 2021 22:19:03 -0500 Subject: [PATCH] Do not run version check if generating shell completion and stdout isn't terminal (#79418) --- .../src/runner/flutter_command_runner.dart | 5 ++- .../runner/flutter_command_runner_test.dart | 34 +++++++++++++++++++ .../test/general.shard/runner/utils.dart | 3 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart index 670a69d5e70..abaf70b7cbf 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart @@ -253,11 +253,14 @@ class FlutterCommandRunner extends CommandRunner { globals.flutterVersion.ensureVersionFile(); final bool machineFlag = topLevelResults['machine'] as bool; final bool ci = await globals.botDetector.isRunningOnBot; + final bool redirectedCompletion = !globals.stdio.hasTerminal && + (topLevelResults.command?.name ?? '').endsWith('-completion'); + final bool isMachine = machineFlag || ci || redirectedCompletion; final bool versionCheckFlag = topLevelResults['version-check'] as bool; final bool explicitVersionCheckPassed = topLevelResults.wasParsed('version-check') && versionCheckFlag; if (topLevelResults.command?.name != 'upgrade' && - (explicitVersionCheckPassed || (versionCheckFlag && !ci && !machineFlag))) { + (explicitVersionCheckPassed || (versionCheckFlag && !isMachine))) { await globals.flutterVersion.checkFlutterVersionFreshness(); } diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart index f28a8d05515..155b8934ad2 100644 --- a/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart @@ -108,6 +108,40 @@ void main() { BotDetector: () => const FakeBotDetector(true), }, initializeFlutterRoot: false); + testUsingContext('checks that Flutter installation is up-to-date if shell completion to terminal', () async { + final FlutterCommand command = DummyFlutterCommand(name: 'bash-completion'); + final FlutterCommandRunner runner = createTestCommandRunner(command) as FlutterCommandRunner; + final FakeFlutterVersion version = globals.flutterVersion as FakeFlutterVersion; + + await runner.run(['bash-completion']); + + expect(version.didCheckFlutterVersionFreshness, true); + }, overrides: { + FileSystem: () => fileSystem, + ProcessManager: () => FakeProcessManager.any(), + Platform: () => platform, + FlutterVersion: () => FakeFlutterVersion(), + BotDetector: () => const FakeBotDetector(false), + Stdio: () => FakeStdio(hasFakeTerminal: true), + }); + + testUsingContext('does not check that Flutter installation is up-to-date if redirecting shell completion', () async { + final FlutterCommand command = DummyFlutterCommand(name: 'bash-completion'); + final FlutterCommandRunner runner = createTestCommandRunner(command) as FlutterCommandRunner; + final FakeFlutterVersion version = globals.flutterVersion as FakeFlutterVersion; + + await runner.run(['bash-completion']); + + expect(version.didCheckFlutterVersionFreshness, false); + }, overrides: { + FileSystem: () => fileSystem, + ProcessManager: () => FakeProcessManager.any(), + Platform: () => platform, + FlutterVersion: () => FakeFlutterVersion(), + BotDetector: () => const FakeBotDetector(false), + Stdio: () => FakeStdio(hasFakeTerminal: false), + }); + testUsingContext('Fetches tags when --version is used', () async { final FlutterCommandRunner runner = createTestCommandRunner(DummyFlutterCommand()) as FlutterCommandRunner; final FakeFlutterVersion version = globals.flutterVersion as FakeFlutterVersion; diff --git a/packages/flutter_tools/test/general.shard/runner/utils.dart b/packages/flutter_tools/test/general.shard/runner/utils.dart index 7bd0e62c85d..f4093193f1b 100644 --- a/packages/flutter_tools/test/general.shard/runner/utils.dart +++ b/packages/flutter_tools/test/general.shard/runner/utils.dart @@ -13,6 +13,7 @@ class DummyFlutterCommand extends FlutterCommand { DummyFlutterCommand({ this.shouldUpdateCache = false, this.noUsagePath = false, + this.name = 'dummy', this.commandFunction, }); @@ -29,7 +30,7 @@ class DummyFlutterCommand extends FlutterCommand { Future get usagePath => noUsagePath ? null : super.usagePath; @override - String get name => 'dummy'; + final String name; @override Future runCommand() async {