[flutter_tools] handle ERROR_INVALID_FUNCTION when trying to symlink across drives (#136424)

~~Fixes https://github.com/flutter/flutter/issues/136321~~

edit by @andrewkolos: Fixes https://github.com/flutter/flutter/issues/66224
This commit is contained in:
Christopher Fujino 2023-10-12 11:15:45 -06:00 committed by GitHub
parent fa827eb2aa
commit 9751fe6449
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 0 deletions

View File

@ -1035,6 +1035,14 @@ void handleSymlinkException(FileSystemException e, {
: 'You must build from a terminal run as administrator.';
throwToolExit('Building with plugins requires symlink support.\n\n$instructions');
}
// ERROR_INVALID_FUNCTION, trying to link across drives, which is not supported
if (e.osError?.errorCode == 1) {
throwToolExit(
'Creating symlink from $source to $destination failed with '
'ERROR_INVALID_FUNCTION. Try moving your Flutter project to the same '
'drive as your Flutter SDK.',
);
}
}
}

View File

@ -1690,6 +1690,24 @@ flutter:
);
});
testWithoutContext('Symlink failures instruct developers to have their project on the same drive as their SDK', () async {
final Platform platform = FakePlatform(operatingSystem: 'windows');
final FakeOperatingSystemUtils os = FakeOperatingSystemUtils('Microsoft Windows [Version 10.0.14972]');
const FileSystemException e = FileSystemException('', '', OSError('', 1));
expect(
() => handleSymlinkException(
e,
platform: platform,
os: os,
source: pubCachePath,
destination: ephemeralPackagePath,
),
throwsToolExit(message: 'Try moving your Flutter project to the same drive as your Flutter SDK'),
);
});
testWithoutContext('Symlink failures only give instructions for specific errors', () async {
final Platform platform = FakePlatform(operatingSystem: 'windows');
final FakeOperatingSystemUtils os = FakeOperatingSystemUtils('Microsoft Windows [Version 10.0.14393]');