Implemented different with_native_path conversion methods, refactoring fs functions to utilize with_native_path, and move exists to use with_native_path - #159805
Conversation
|
rustbot has assigned @Mark-Simulacrum. Use Why was this reviewer chosen?The reviewer was selected based on:
|
This comment has been minimized.
This comment has been minimized.
ef0365c to
7016b77
Compare
|
To give a heads up, this PR might be better to wait on #158168 to merge in first, so that I can have |
This comment has been minimized.
This comment has been minimized.
7016b77 to
14ceffc
Compare
This comment has been minimized.
This comment has been minimized.
|
This should be ready now, just resolved conflicts on |
This comment has been minimized.
This comment has been minimized.
14ceffc to
7f0660a
Compare
|
The run-make-support library was changed cc @jieyouxu Some changes occurred in src/tools/cargo cc @weihanglo |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
7f0660a to
be3d26d
Compare
This comment has been minimized.
This comment has been minimized.
|
I screwed up, I have to redo this again 🤦 |
|
💔 I suspect this PR failed tests as part of a rollup After fixing the problem, consider running a try job for the failed job before re-approving. Link to failure: #160810 (comment) |
|
This pull request was unapproved. This PR was contained in a rollup (#160810), which was unapproved. |
There was a problem hiding this comment.
I think I need a cfg gate on this for uefi to do something different with PathBuf?
There was a problem hiding this comment.
I'm a bit confused. The first old argument is a &Path, which is converted to a PathBuf within with_native_path (second &|old| should be a &|PathBuf|), which I would have thought that this old would have been moved as an argument for imp::rename?
There was a problem hiding this comment.
Should this be a move closure?
22f991f to
2a3adfd
Compare
| pub fn rename(old: &Path, new: &Path) -> io::Result<()> { | ||
| with_native_path(old, &|old| with_native_path(new, &|new| imp::rename(old, new))) | ||
| with_native_path(old, &|old| with_native_path(new, &|new| imp::rename(old.clone(), new))) |
There was a problem hiding this comment.
Not really a big fan of this (though this only affects UEFI). As it is right now, I'm sort of forced to use a clone here with UEFI converting &Path -> PathBuf. Unsure if there's a way I can avoid the clone here on a dyn callback.
I think what's possible is that we can convert with_native_path to use an impl Fn instead of &dyn Fn. The thing with doing that is it'll require a bit more refactoring since when I attempted to do that the compiler asked me to give concrete types on the captured variable within the closure block. However, I'm also aware that using an impl Fn will make this a compile time cost (generate multiple with_native_path per filesystem functions that calls on with_native_path) and potentially increase binary size. Not sure if that is okay or ideal to do.
|
Forgot to do this |
2a3adfd to
5ec1806
Compare
This comment has been minimized.
This comment has been minimized.
5ec1806 to
161dec0
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
161dec0 to
0fad1f5
Compare
…g fs functions to utilize with_native_path, and move exists to use with_native_path
0fad1f5 to
f1a1e2c
Compare
|
I hope you don't mind me reassigning this PR to you @joboet. If/Once CI turns green, could you also run a try job on r? joboet |
|
|
| mod unix_like; | ||
| pub use unix_like::*; | ||
|
|
||
| pub use crate::sys::helpers::run_path_with_cstr as with_native_path; |
There was a problem hiding this comment.
Decided to put the re-export here instead of in unix_like.rs because I realized that with_native_path implementation would conflict with motor.rs' and unsupported.rs' with_native_path implementation as they both re-export unix_like (unsupported platforms had this behavior before, if you want me to remove re-exporting of unix_like from unsupported platforms, I could do that).
View all comments
This PR attempts to complete the FIXME comment on trying to introduce the different conversion functions of
with_native_pathon all supported platforms and also moves theexistsfilesystem functions to utilizewith_native_path. It should be easier to makereaddirandremove_dir_allutilizewith_native_path, which I'm down to support that transition in a separate PR.I took note on what each platform fs functions does underneath the hood to decide the argument it should take:
run_path_with_cstrjust like Unix, so it was clear for their fs functions to take a&CStr&Pathto&str, so I just changed the arguments to&strcstrfunction that converts a&Pathtoio::Result<CString>, so I made its fs functions take in a&CStranywayscrate::path::absolute(returns aResult<PathBuf>) oruefi_fs::File::from_path, which calls oncrate::path::absoluteanyways, so it made sense for me to make its fs functions take aPathBuf.I did some other refactoring such as putting
with_native_pathfunctions withinstd/src/sys/path(except forunsupported.rswhich haswith_native_pathimplemented within its file). I thought it made sense to centralize the differentwith_native_path(aside fromrun_path_with_cstrcan just use the aliaswith_native_path) functions there considering that's done for Windows. I also renamed theunsupported_backslash.rsfile tosolid.rsbecause it seems like solid is the only one that utilizes that file; theunix.rsfile was renamed tocommon.rsbecause that's used by unix platforms, motor, and other miscellaneous platforms (motor platform has a differentwith_native_pathimplementation however).If there's anything here that I should revert or change from platform to platform, just let me know.