mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-24 13:43:45 +00:00
Fix non-directory in workspace on Windows (#11833)
Fixes #11793 On Windows, trying to read a file inside what is not a directory but another file results in a not found error, while on Unix we get a not a directory error. We check explicitly if something included in a workspace glob is a non-directory to fix the behavior on Windows.
This commit is contained in:
parent
2e7ae19b55
commit
dc39d6622b
2 changed files with 27 additions and 21 deletions
|
@ -762,34 +762,38 @@ impl Workspace {
|
|||
let pyproject_path = member_root.join("pyproject.toml");
|
||||
let contents = match fs_err::tokio::read_to_string(&pyproject_path).await {
|
||||
Ok(contents) => contents,
|
||||
Err(err) if err.kind() == std::io::ErrorKind::NotFound => {
|
||||
// If the directory is hidden, skip it.
|
||||
if member_root
|
||||
.file_name()
|
||||
.map(|name| name.as_encoded_bytes().starts_with(b"."))
|
||||
.unwrap_or(false)
|
||||
{
|
||||
debug!(
|
||||
"Ignoring hidden workspace member: `{}`",
|
||||
Err(err) => {
|
||||
if !fs_err::metadata(&member_root)?.is_dir() {
|
||||
warn!(
|
||||
"Ignoring non-directory workspace member: `{}`",
|
||||
member_root.simplified_display()
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
return Err(WorkspaceError::MissingPyprojectTomlMember(
|
||||
member_root,
|
||||
member_glob.to_string(),
|
||||
));
|
||||
}
|
||||
Err(err) if err.kind() == std::io::ErrorKind::NotADirectory => {
|
||||
warn!(
|
||||
"Ignoring non-directory workspace member: `{}`",
|
||||
member_root.simplified_display()
|
||||
);
|
||||
// A directory exists, but it doesn't contain a `pyproject.toml`.
|
||||
if err.kind() == std::io::ErrorKind::NotFound {
|
||||
// If the directory is hidden, skip it.
|
||||
if member_root
|
||||
.file_name()
|
||||
.map(|name| name.as_encoded_bytes().starts_with(b"."))
|
||||
.unwrap_or(false)
|
||||
{
|
||||
debug!(
|
||||
"Ignoring hidden workspace member: `{}`",
|
||||
member_root.simplified_display()
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
continue;
|
||||
return Err(WorkspaceError::MissingPyprojectTomlMember(
|
||||
member_root,
|
||||
member_glob.to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
return Err(err.into());
|
||||
}
|
||||
Err(err) => return Err(err.into()),
|
||||
};
|
||||
let pyproject_toml = PyProjectToml::from_string(contents)
|
||||
.map_err(|err| WorkspaceError::Toml(pyproject_path.clone(), Box::new(err)))?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue