Unverified Commit 9751fe64 authored by Christopher Fujino's avatar Christopher Fujino Committed by GitHub

[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
parent fa827eb2
...@@ -1035,6 +1035,14 @@ void handleSymlinkException(FileSystemException e, { ...@@ -1035,6 +1035,14 @@ void handleSymlinkException(FileSystemException e, {
: 'You must build from a terminal run as administrator.'; : 'You must build from a terminal run as administrator.';
throwToolExit('Building with plugins requires symlink support.\n\n$instructions'); 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.',
);
}
} }
} }
......
...@@ -1690,6 +1690,24 @@ flutter: ...@@ -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 { testWithoutContext('Symlink failures only give instructions for specific errors', () async {
final Platform platform = FakePlatform(operatingSystem: 'windows'); final Platform platform = FakePlatform(operatingSystem: 'windows');
final FakeOperatingSystemUtils os = FakeOperatingSystemUtils('Microsoft Windows [Version 10.0.14393]'); final FakeOperatingSystemUtils os = FakeOperatingSystemUtils('Microsoft Windows [Version 10.0.14393]');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment