From 3bda455f4ef6fd626c66a986b69b512f412f7bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Sharma?= <737941+loic-sharma@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:06:31 -0700 Subject: [PATCH] Improve 'flutter downgrade' error message (#154434) `flutter downgrade` fails if you haven't used `flutter upgrade`: ``` $ flutter downgrade There is no previously recorded version for channel "stable". ``` It's not clear what actions a user should take from this error message. Here's the new error message: ``` $ flutter downgrade It looks like you haven't run "flutter upgrade" on channel "stable". "flutter downgrade" undoes the last "flutter upgrade". To switch to a specific Flutter version, see: https://flutter.dev/to/switch-flutter-version ``` Depends on https://github.com/flutter/website/pull/11098 --- .../lib/src/commands/downgrade.dart | 34 +++++++++++++++---- .../hermetic/downgrade_test.dart | 14 +++++--- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/downgrade.dart b/packages/flutter_tools/lib/src/commands/downgrade.dart index a58b75c009..33eed88ae5 100644 --- a/packages/flutter_tools/lib/src/commands/downgrade.dart +++ b/packages/flutter_tools/lib/src/commands/downgrade.dart @@ -110,9 +110,18 @@ class DowngradeCommand extends FlutterCommand { final String? lastFlutterVersion = persistentToolState.lastActiveVersion(channel); final String? currentFlutterVersion = _flutterVersion?.frameworkRevision; if (lastFlutterVersion == null || currentFlutterVersion == lastFlutterVersion) { - final String trailing = await _createErrorMessage(workingDirectory, channel); + final String trailing = await _createErrorMessage( + workingDirectory, + channel, + ); throwToolExit( - 'There is no previously recorded version for channel "$currentChannel".\n' + "It looks like you haven't run " + '"flutter upgrade" on channel "$currentChannel".\n' + '\n' + '"flutter downgrade" undoes the last "flutter upgrade".\n' + '\n' + 'To switch to a specific Flutter version, see: ' + 'https://flutter.dev/to/switch-flutter-version' '$trailing' ); } @@ -181,7 +190,10 @@ class DowngradeCommand extends FlutterCommand { } // Formats an error message that lists the currently stored versions. - Future _createErrorMessage(String workingDirectory, Channel currentChannel) async { + Future _createErrorMessage( + String workingDirectory, + Channel currentChannel, + ) async { final StringBuffer buffer = StringBuffer(); for (final Channel channel in Channel.values) { if (channel == currentChannel) { @@ -191,11 +203,19 @@ class DowngradeCommand extends FlutterCommand { if (sha == null) { continue; } - final RunResult parseResult = await _processUtils!.run([ - 'git', 'describe', '--tags', sha, - ], workingDirectory: workingDirectory); + final RunResult parseResult = await _processUtils!.run( + ['git', 'describe', '--tags', sha], + workingDirectory: workingDirectory, + ); if (parseResult.exitCode == 0) { - buffer.writeln('Channel "${getNameForChannel(channel)}" was previously on: ${parseResult.stdout}.'); + if (buffer.isEmpty) { + buffer.writeln(); + } + buffer.writeln(); + buffer.writeln( + 'Channel "${getNameForChannel(channel)}" was previously on: ' + '${parseResult.stdout}.' + ); } } return buffer.toString(); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart index 5830675704..6ad404fc5c 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/downgrade_test.dart @@ -77,10 +77,16 @@ void main() { logger: bufferLogger, ); - expect(createTestCommandRunner(command).run(const ['downgrade']), - throwsToolExit(message: - 'There is no previously recorded version for channel "beta".\n' - 'Channel "master" was previously on: v1.2.3.' + expect( + createTestCommandRunner(command).run(const ['downgrade']), + throwsToolExit(message: ''' +It looks like you haven't run "flutter upgrade" on channel "beta". + +"flutter downgrade" undoes the last "flutter upgrade". + +To switch to a specific Flutter version, see: https://flutter.dev/to/switch-flutter-version + +Channel "master" was previously on: v1.2.3.''', ), ); });