Skip to content

Commit

Permalink
[flutter_tools] handle ERROR_INVALID_FUNCTION when trying to symlink …
Browse files Browse the repository at this point in the history
…across drives (#136681)

CP of 9751fe6
Original issue: #66224
CP Request: #136680
  • Loading branch information
christopherfujino committed Oct 17, 2023
1 parent fe6553b commit cd285a9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
8 changes: 8 additions & 0 deletions packages/flutter_tools/lib/src/flutter_plugins.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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.',
);
}
}
}

Expand Down
18 changes: 18 additions & 0 deletions packages/flutter_tools/test/general.shard/plugins_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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]');
Expand Down

0 comments on commit cd285a9

Please sign in to comment.