mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
Improve robustness of --version parsing for sdkmanager (#15029)
This commit is contained in:
parent
701eff4ac5
commit
050ee9d180
|
@ -347,7 +347,8 @@ class AndroidSdk {
|
||||||
throwToolExit('Android sdkmanager not found. Update to the latest Android SDK to resolve this.');
|
throwToolExit('Android sdkmanager not found. Update to the latest Android SDK to resolve this.');
|
||||||
final ProcessResult result = processManager.runSync(<String>[sdkManagerPath, '--version'], environment: sdkManagerEnv);
|
final ProcessResult result = processManager.runSync(<String>[sdkManagerPath, '--version'], environment: sdkManagerEnv);
|
||||||
if (result.exitCode != 0) {
|
if (result.exitCode != 0) {
|
||||||
throwToolExit('sdkmanager --version failed: ${result.exitCode}', exitCode: result.exitCode);
|
printTrace('sdkmanager --version failed: exitCode: ${result.exitCode} stdout: ${result.stdout} stderr: ${result.stderr}');
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return result.stdout.trim();
|
return result.stdout.trim();
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,7 +213,7 @@ class AndroidWorkflow extends DoctorValidator implements Workflow {
|
||||||
);
|
);
|
||||||
|
|
||||||
final Version sdkManagerVersion = new Version.parse(androidSdk.sdkManagerVersion);
|
final Version sdkManagerVersion = new Version.parse(androidSdk.sdkManagerVersion);
|
||||||
if (sdkManagerVersion.major < 26)
|
if (sdkManagerVersion == null || sdkManagerVersion.major < 26)
|
||||||
// SDK manager is found, but needs to be updated.
|
// SDK manager is found, but needs to be updated.
|
||||||
throwToolExit(
|
throwToolExit(
|
||||||
'A newer version of the Android SDK is required. To update, run:\n'
|
'A newer version of the Android SDK is required. To update, run:\n'
|
||||||
|
|
|
@ -81,7 +81,7 @@ void main() {
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('throws on sdkmanager version check failure', () {
|
testUsingContext('does not throw on sdkmanager version check failure', () {
|
||||||
sdkDir = MockAndroidSdk.createSdkDirectory();
|
sdkDir = MockAndroidSdk.createSdkDirectory();
|
||||||
Config.instance.setValue('android-sdk', sdkDir.path);
|
Config.instance.setValue('android-sdk', sdkDir.path);
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ void main() {
|
||||||
when(processManager.canRun(sdk.sdkManagerPath)).thenReturn(true);
|
when(processManager.canRun(sdk.sdkManagerPath)).thenReturn(true);
|
||||||
when(processManager.runSync(<String>[sdk.sdkManagerPath, '--version'], environment: argThat(isNotNull)))
|
when(processManager.runSync(<String>[sdk.sdkManagerPath, '--version'], environment: argThat(isNotNull)))
|
||||||
.thenReturn(new ProcessResult(1, 1, '26.1.1\n', 'Mystery error'));
|
.thenReturn(new ProcessResult(1, 1, '26.1.1\n', 'Mystery error'));
|
||||||
expect(() => sdk.sdkManagerVersion, throwsToolExit(exitCode: 1));
|
expect(sdk.sdkManagerVersion, isNull);
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
FileSystem: () => fs,
|
FileSystem: () => fs,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
|
|
|
@ -132,7 +132,21 @@ void main() {
|
||||||
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
|
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
|
||||||
when(sdk.sdkManagerVersion).thenReturn('25.0.0');
|
when(sdk.sdkManagerVersion).thenReturn('25.0.0');
|
||||||
|
|
||||||
expect(AndroidWorkflow.runLicenseManager(), throwsToolExit());
|
expect(AndroidWorkflow.runLicenseManager(), throwsToolExit(message: 'To update, run'));
|
||||||
|
}, overrides: <Type, Generator>{
|
||||||
|
AndroidSdk: () => sdk,
|
||||||
|
FileSystem: () => fs,
|
||||||
|
Platform: () => new FakePlatform()..environment = <String, String>{'HOME': '/home/me'},
|
||||||
|
ProcessManager: () => processManager,
|
||||||
|
Stdio: () => stdio,
|
||||||
|
});
|
||||||
|
|
||||||
|
testUsingContext('runLicenseManager errors correctly for null version', () async {
|
||||||
|
MockAndroidSdk.createSdkDirectory();
|
||||||
|
when(sdk.sdkManagerPath).thenReturn('/foo/bar/sdkmanager');
|
||||||
|
when(sdk.sdkManagerVersion).thenReturn(null);
|
||||||
|
|
||||||
|
expect(AndroidWorkflow.runLicenseManager(), throwsToolExit(message: 'To update, run'));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
AndroidSdk: () => sdk,
|
AndroidSdk: () => sdk,
|
||||||
FileSystem: () => fs,
|
FileSystem: () => fs,
|
||||||
|
|
Loading…
Reference in a new issue