[flutter_tools] Don't try to run pub before the version command (#51436)
diff --git a/packages/flutter_tools/lib/src/commands/version.dart b/packages/flutter_tools/lib/src/commands/version.dart
index b70bba5..4d715a9 100644
--- a/packages/flutter_tools/lib/src/commands/version.dart
+++ b/packages/flutter_tools/lib/src/commands/version.dart
@@ -17,11 +17,17 @@
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 @@
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 74596c3..482c379 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 @@
ProcessManager: () => MockProcessManager(failGitTag: true),
Stdio: () => mockStdio,
});
+
+ testUsingContext('Does not run pub when outside a project', () async {
+ final VersionCommand command = VersionCommand();
+ await createTestCommandRunner(command).run(<String>[
+ 'version',
+ ]);
+ expect(testLogger.statusText, equals('v10.0.0\r\nv20.0.0\n'));
+ }, overrides: <Type, Generator>{
+ ProcessManager: () => MockProcessManager(),
+ Stdio: () => mockStdio,
+ });
});
}