Conversation
|
(rustbot has picked a reviewer for you, use r? to override) |
|
Hey! It looks like you've submitted a new PR for the library teams! If this PR contains changes to any Examples of
The Miri subtree was changed cc @rust-lang/miri |
Yes, I mentioned as much. However, this is more than a slight refactoring in some cases. Like you said, |
|
I should do a crater run. There's at least a possibility that some weird inference thing may break this, which would be a blocker. |
This comment was marked as outdated.
This comment was marked as outdated.
|
Oops, right @bors try |
|
⌛ Trying commit 1b5d6cd355deacecbb236cbc553cfc988ec1ed62 with merge 1648938e809d7a7838c36282edd641ee0a4f137f... |
|
☀️ Try build successful - checks-actions |
|
@craterbot check |
|
👌 Experiment ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more |
|
🚧 Experiment ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more |
|
🎉 Experiment
|
|
5 regressions and 3 fixes but none of them look relevant. So it seems like the public trait in this PR wouldn't break anything inference wise. |
|
Unless I'm mistaken , this looks a purely T-libs patch so I'll remove the T-compiler @rustbot label -T-compiler |
|
Oops yes, sorry. I think that was a left over auto-label. |
library/std/src/sys/unix/fs.rs
Outdated
There was a problem hiding this comment.
So is the only remaining work after this PR to swap these to with_native_path? That's exciting!
There was a problem hiding this comment.
Yeah, that's the idea! It may not be trivial in all cases though so I've left that for follow up PRs.
|
@Amanieu Given the recent restructuring and other changes in std, rebasing simplified things a lot. In addition I applied your suggest to simplify the trait. |
This comment has been minimized.
This comment has been minimized.
cfc57ac to
308e304
Compare
This comment has been minimized.
This comment has been minimized.
| #[unstable(feature = "fs_native_path", issue = "108979")] | ||
| impl NativePathExt for NativePath { | ||
| fn from_wide(wide: &[u16]) -> &NativePath { | ||
| assert_eq!(crate::sys::unrolled_find_u16s(0, wide), Some(wide.len().saturating_sub(1))); |
There was a problem hiding this comment.
Add a user-friendly panic message for when assert fails.
| /// These types include [`Path`], [`OsStr`] and [`str`] as well as their owned | ||
| /// counterparts [`PathBuf`], [`OsString`] and [`String`]. | ||
| /// | ||
| /// You can also implement you own [`AsRef<Path>`] for your own types and they'll |
There was a problem hiding this comment.
| /// You can also implement you own [`AsRef<Path>`] for your own types and they'll | |
| /// You can also implement [`AsRef<Path>`] for your own types and they'll |
library/std/src/sys/pal/solid/fs.rs
Outdated
| @@ -325,14 +377,17 @@ fn cstr(path: &Path) -> io::Result<CString> { | |||
|
|
|||
| impl File { | |||
| pub fn open(path: &Path, opts: &OpenOptions) -> io::Result<File> { | |||
There was a problem hiding this comment.
This still still inconsistent: why is open kept in some targets but removed in other? I would expect everything to use open_native only and for open to be removed (or possible just change the signature of open to take native path).
|
|
||
| impl File { | ||
| pub fn open(path: &Path, opts: &OpenOptions) -> io::Result<File> { | ||
| pub(super) fn open(path: &Path, opts: &OpenOptions) -> io::Result<File> { |
And replace `AsRef<Path>` with the `AsPath` trait.
This comment has been minimized.
This comment has been minimized.
|
☔ The latest upstream changes (presumably #122256) made this pull request unmergeable. Please resolve the merge conflicts. |
| p | ||
| ); | ||
| return Err(io::Error::new(io::ErrorKind::Uncategorized, msg)); | ||
| fn open_parent(p: &CStr) -> io::Result<(ManuallyDrop<WasiFd>, PathBuf)> { |
There was a problem hiding this comment.
This should return a CString to avoid another conversion in open_at.
| @@ -563,7 +563,9 @@ pub fn symlink<P: AsRef<Path>, U: AsRef<Path>>( | |||
| /// This is a convenience API similar to `std::os::unix::fs::symlink` and | |||
| /// `std::os::windows::fs::symlink_file` and `std::os::windows::fs::symlink_dir`. | |||
| pub fn symlink_path<P: AsRef<Path>, U: AsRef<Path>>(old_path: P, new_path: U) -> io::Result<()> { | |||
There was a problem hiding this comment.
Should these methods be updated to use AsPath instead?
| /// These types include [`Path`], [`OsStr`] and [`str`] as well as their owned | ||
| /// counterparts [`PathBuf`], [`OsString`] and [`String`]. | ||
| /// | ||
| /// You can also implement you own [`AsRef<Path>`] for your own types and they'll |
| dir.unlink_file(osstr2str(file.as_ref())?) | ||
| } | ||
|
|
||
| pub fn rename(old: &Path, new: &Path) -> io::Result<()> { |
There was a problem hiding this comment.
Why is only one changed to CStr but not both? In fact shouldn't all &Path in this file be changed?
| @@ -1132,16 +1186,16 @@ pub fn rmdir(p: &Path) -> io::Result<()> { | |||
| } | |||
There was a problem hiding this comment.
Shouldn't all the methods above (rename, unlink, rmdir, etc) also be switched to NativePath?
|
@rustbot author |
|
@ChrisDenton any updates on this? thanks |
Sorry, I've been quite busy lately and this PR is very prone to breakage. I hope to get back to it sometime this month but there are a higher priority things on my todo list that I'd like to get done first. |
|
ping from triage - can you post your status on this PR? There hasn't been an update in a few months. Thanks! |
Implements the
fs_native_pathfeature. See also rust-lang/libs-team#62.Internal changes
Ultimately, I'd envision that Unix filesystem functions (for example) would simply take either an
&CStror maybe an internal&PosixPathtype with relevant helper methods. However, as much as I'd love to transition immediately, I think it's more prudent to take it slower. If nothing else it'll be easier on reviewers. So this PR just moves the responsibility for creating concrete types intosys::fswhile touching as little existing code as possible, which should then allow platforms to make changes at their own pace.