mirror of
https://github.com/flutter/flutter
synced 2024-10-13 11:42:54 +00:00
[flutter_tools] fix version tag v
stripping and support old "dev" and new "pre" tags (#55602)
This commit is contained in:
parent
6dc1e83f12
commit
f6db8ccd20
|
@ -13,7 +13,6 @@ import '../cache.dart';
|
|||
import '../dart/pub.dart';
|
||||
import '../globals.dart' as globals;
|
||||
import '../runner/flutter_command.dart';
|
||||
import '../version.dart';
|
||||
|
||||
class VersionCommand extends FlutterCommand {
|
||||
VersionCommand() : super() {
|
||||
|
@ -87,7 +86,7 @@ class VersionCommand extends FlutterCommand {
|
|||
}
|
||||
}
|
||||
|
||||
final String version = argResults.rest[0].replaceFirst('v', '');
|
||||
final String version = argResults.rest[0].replaceFirst(RegExp('^v'), '');
|
||||
final List<String> matchingTags = tags.where((String tag) => tag.contains(version)).toList();
|
||||
String matchingTag;
|
||||
// TODO(fujino): make this a tool exit and fix tests
|
||||
|
@ -127,15 +126,12 @@ class VersionCommand extends FlutterCommand {
|
|||
throwToolExit('Unable to checkout version branch for version $version: $e');
|
||||
}
|
||||
|
||||
final FlutterVersion flutterVersion = FlutterVersion();
|
||||
|
||||
globals.printStatus('Switching Flutter to version ${flutterVersion.frameworkVersion}${withForce ? ' with force' : ''}');
|
||||
globals.printStatus('Switching Flutter to version $matchingTag${withForce ? ' with force' : ''}');
|
||||
|
||||
// Check for and download any engine and pkg/ updates.
|
||||
// We run the 'flutter' shell script re-entrantly here
|
||||
// so that it will download the updated Dart and so forth
|
||||
// if necessary.
|
||||
globals.printStatus('');
|
||||
globals.printStatus('Downloading engine...');
|
||||
int code = await processUtils.stream(<String>[
|
||||
globals.fs.path.join('bin', 'flutter'),
|
||||
|
@ -147,9 +143,6 @@ class VersionCommand extends FlutterCommand {
|
|||
throwToolExit(null, exitCode: code);
|
||||
}
|
||||
|
||||
globals.printStatus('');
|
||||
globals.printStatus(flutterVersion.toString());
|
||||
|
||||
final String projectRoot = findProjectRoot();
|
||||
if (projectRoot != null && boolArg('pub')) {
|
||||
globals.printStatus('');
|
||||
|
|
|
@ -42,7 +42,7 @@ void main() {
|
|||
'version',
|
||||
'--no-pub',
|
||||
]);
|
||||
expect(testLogger.statusText, equals('v10.0.0\r\nv20.0.0\r\n30.0.0-dev.0.0\n'));
|
||||
expect(testLogger.statusText, equals('v10.0.0\r\nv20.0.0\r\n30.0.0-dev.0.0\r\n31.0.0-0.0.pre\n'));
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => MockProcessManager(),
|
||||
Stdio: () => mockStdio,
|
||||
|
@ -51,7 +51,51 @@ void main() {
|
|||
|
||||
testUsingContext('version switch prompt is accepted', () async {
|
||||
when(mockStdio.stdinHasTerminal).thenReturn(true);
|
||||
const String version = '10.0.0';
|
||||
const String version = 'v10.0.0';
|
||||
final VersionCommand command = VersionCommand();
|
||||
when(globals.terminal.promptForCharInput(<String>['y', 'n'],
|
||||
logger: anyNamed('logger'),
|
||||
prompt: 'Are you sure you want to proceed?')
|
||||
).thenAnswer((Invocation invocation) async => 'y');
|
||||
|
||||
await createTestCommandRunner(command).run(<String>[
|
||||
'version',
|
||||
'--no-pub',
|
||||
version,
|
||||
]);
|
||||
expect(testLogger.statusText, contains('Switching Flutter to version $version'));
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => MockProcessManager(),
|
||||
Stdio: () => mockStdio,
|
||||
AnsiTerminal: () => MockTerminal(),
|
||||
FlutterVersion: () => mockVersion,
|
||||
});
|
||||
|
||||
testUsingContext('old dev version switch prompt is accepted', () async {
|
||||
when(mockStdio.stdinHasTerminal).thenReturn(true);
|
||||
const String version = '30.0.0-dev.0.0';
|
||||
final VersionCommand command = VersionCommand();
|
||||
when(globals.terminal.promptForCharInput(<String>['y', 'n'],
|
||||
logger: anyNamed('logger'),
|
||||
prompt: 'Are you sure you want to proceed?')
|
||||
).thenAnswer((Invocation invocation) async => 'y');
|
||||
|
||||
await createTestCommandRunner(command).run(<String>[
|
||||
'version',
|
||||
'--no-pub',
|
||||
version,
|
||||
]);
|
||||
expect(testLogger.statusText, contains('Switching Flutter to version $version'));
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => MockProcessManager(),
|
||||
Stdio: () => mockStdio,
|
||||
AnsiTerminal: () => MockTerminal(),
|
||||
FlutterVersion: () => mockVersion,
|
||||
});
|
||||
|
||||
testUsingContext('dev version switch prompt is accepted', () async {
|
||||
when(mockStdio.stdinHasTerminal).thenReturn(true);
|
||||
const String version = '31.0.0-0.0.pre';
|
||||
final VersionCommand command = VersionCommand();
|
||||
when(globals.terminal.promptForCharInput(<String>['y', 'n'],
|
||||
logger: anyNamed('logger'),
|
||||
|
@ -93,33 +137,6 @@ void main() {
|
|||
FlutterVersion: () => mockVersion,
|
||||
});
|
||||
|
||||
testUsingContext('version switch, latest commit query fails', () async {
|
||||
const String version = '10.0.0';
|
||||
final VersionCommand command = VersionCommand();
|
||||
await createTestCommandRunner(command).run(<String>[
|
||||
'version',
|
||||
'--no-pub',
|
||||
version,
|
||||
]);
|
||||
expect(testLogger.errorText, contains('git failed'));
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => MockProcessManager(latestCommitFails: true),
|
||||
Stdio: () => mockStdio,
|
||||
FlutterVersion: () => mockVersion,
|
||||
});
|
||||
|
||||
testUsingContext('latest commit is parsable when query fails', () {
|
||||
final FlutterVersion flutterVersion = FlutterVersion();
|
||||
expect(
|
||||
() => DateTime.parse(flutterVersion.frameworkCommitDate),
|
||||
returnsNormally,
|
||||
);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => MockProcessManager(latestCommitFails: true),
|
||||
Stdio: () => mockStdio,
|
||||
FlutterVersion: () => mockVersion,
|
||||
});
|
||||
|
||||
testUsingContext('switch to not supported version without force', () async {
|
||||
const String version = '1.1.5';
|
||||
final VersionCommand command = VersionCommand();
|
||||
|
@ -187,7 +204,7 @@ void main() {
|
|||
await createTestCommandRunner(command).run(<String>[
|
||||
'version',
|
||||
]);
|
||||
expect(testLogger.statusText, equals('v10.0.0\r\nv20.0.0\r\n30.0.0-dev.0.0\n'));
|
||||
expect(testLogger.statusText, equals('v10.0.0\r\nv20.0.0\r\n30.0.0-dev.0.0\r\n31.0.0-0.0.pre\n'));
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => MockProcessManager(),
|
||||
Stdio: () => mockStdio,
|
||||
|
@ -236,11 +253,12 @@ class MockProcessManager extends Mock implements ProcessManager {
|
|||
if (failGitTag) {
|
||||
return ProcessResult(0, 1, '', '');
|
||||
}
|
||||
return ProcessResult(0, 0, 'v10.0.0\r\nv20.0.0\r\n30.0.0-dev.0.0', '');
|
||||
return ProcessResult(0, 0, 'v10.0.0\r\nv20.0.0\r\n30.0.0-dev.0.0\r\n31.0.0-0.0.pre', '');
|
||||
}
|
||||
if (command[0] == 'git' && command[1] == 'checkout') {
|
||||
version = (command[2] as String).replaceFirst('v', '');
|
||||
version = (command[2] as String).replaceFirst(RegExp('^v'), '');
|
||||
}
|
||||
|
||||
return ProcessResult(0, 0, '', '');
|
||||
}
|
||||
|
||||
|
@ -264,14 +282,6 @@ class MockProcessManager extends Mock implements ProcessManager {
|
|||
return ProcessResult(0, 0, '$version-0-g00000000', '');
|
||||
}
|
||||
}
|
||||
final List<String> commitDateCommand = <String>[
|
||||
'-n', '1',
|
||||
'--pretty=format:%ad',
|
||||
'--date=iso',
|
||||
];
|
||||
if (latestCommitFails && commandStr == FlutterVersion.gitLog(commitDateCommand).join(' ')) {
|
||||
return ProcessResult(0, -9, '', 'git failed');
|
||||
}
|
||||
return ProcessResult(0, 0, '', '');
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue