diff --git a/packages/flutter_tools/lib/src/commands/version.dart b/packages/flutter_tools/lib/src/commands/version.dart index b70bba5ef6..4d715a9887 100644 --- a/packages/flutter_tools/lib/src/commands/version.dart +++ b/packages/flutter_tools/lib/src/commands/version.dart @@ -17,11 +17,17 @@ import '../version.dart'; class VersionCommand extends FlutterCommand { VersionCommand() : super() { - usesPubOption(hide: true); argParser.addFlag('force', abbr: 'f', help: 'Force switch to older Flutter versions that do not include a version command', ); + // Don't use usesPubOption here. That will cause the version command to + // require a pubspec.yaml file, which it doesn't need. + argParser.addFlag('pub', + defaultsTo: true, + hide: true, + help: 'Whether to run "flutter pub get" after switching versions.', + ); } @override @@ -138,7 +144,7 @@ class VersionCommand extends FlutterCommand { globals.printStatus(flutterVersion.toString()); final String projectRoot = findProjectRoot(); - if (projectRoot != null && shouldRunPub) { + if (projectRoot != null && boolArg('pub')) { globals.printStatus(''); await pub.get( context: PubContext.pubUpgrade, diff --git a/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart index 74596c30c6..482c379003 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/version_test.dart @@ -170,6 +170,17 @@ void main() { ProcessManager: () => MockProcessManager(failGitTag: true), Stdio: () => mockStdio, }); + + testUsingContext('Does not run pub when outside a project', () async { + final VersionCommand command = VersionCommand(); + await createTestCommandRunner(command).run([ + 'version', + ]); + expect(testLogger.statusText, equals('v10.0.0\r\nv20.0.0\n')); + }, overrides: { + ProcessManager: () => MockProcessManager(), + Stdio: () => mockStdio, + }); }); }