[flutter_tools] Don't fail copying files if the destination is not writable#71215
Merged
fluttergithubbot merged 1 commit intoflutter:masterfrom Nov 25, 2020
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
When
dart:iois used to copy files on macOS, it is able to clobber read-only files. This check for writable files is unnecessary.flutter/packages/flutter_tools/lib/src/base/error_handling_io.dart
Line 294 in 2ceb371
The check also breaks Google3 hot restart (on iOS) because the source files are Bazel runfiles which are readonly.
flutter run), assets are copied to the simulator directory usingcopySynchere. The file permissions remain the same after they are copied, and remain readonly.I wasn't sure about
dart:iobeing able to override readonly file, so I created a script and built it into a VM binary to be sure:This behavior above only happens on macOS, but not on Linux. On linux
dart:io'scopySyncstill throws the permission error, but I didn't investigate further why. I think removing the check should still be fine though, because the subsequent fallback checks (below) will rethrow the same error when the permission check fails.flutter/packages/flutter_tools/lib/src/base/error_handling_io.dart
Line 313 in 2ceb371
Related Issues
Issue was introduced in #69000
Tests
I added the following tests:
Breaking Change
Did any tests fail when you ran them? Please read Handling breaking changes.