diff --git a/crates/uv-python/src/managed.rs b/crates/uv-python/src/managed.rs index ee6fc265a..45328d7b7 100644 --- a/crates/uv-python/src/managed.rs +++ b/crates/uv-python/src/managed.rs @@ -54,49 +54,24 @@ pub enum Error { ExtractError(#[from] uv_extract::Error), #[error(transparent)] SysconfigError(#[from] sysconfig::Error), - #[error("Failed to copy to: {0}", to.user_display())] - CopyError { - to: PathBuf, - #[source] - err: io::Error, - }, #[error("Missing expected Python executable at {}", _0.user_display())] MissingExecutable(PathBuf), #[error("Missing expected target directory for Python minor version link at {}", _0.user_display())] MissingPythonMinorVersionLinkTargetDirectory(PathBuf), - #[error("Failed to create canonical Python executable at {} from {}", to.user_display(), from.user_display())] - CanonicalizeExecutable { - from: PathBuf, - to: PathBuf, - #[source] - err: io::Error, - }, - #[error("Failed to create Python executable link at {} from {}", to.user_display(), from.user_display())] + #[error("Failed to create canonical Python executable")] + CanonicalizeExecutable(#[source] io::Error), + #[error("Failed to create Python executable link")] LinkExecutable { - from: PathBuf, to: PathBuf, #[source] err: io::Error, }, - #[error("Failed to create Python minor version link directory at {} from {}", to.user_display(), from.user_display())] - PythonMinorVersionLinkDirectory { - from: PathBuf, - to: PathBuf, - #[source] - err: io::Error, - }, - #[error("Failed to create directory for Python executable link at {}", to.user_display())] - ExecutableDirectory { - to: PathBuf, - #[source] - err: io::Error, - }, - #[error("Failed to read Python installation directory: {0}", dir.user_display())] - ReadError { - dir: PathBuf, - #[source] - err: io::Error, - }, + #[error("Failed to create Python minor version link directory")] + PythonMinorVersionLinkDirectory(#[source] io::Error), + #[error("Failed to create directory for Python executable link")] + ExecutableDirectory(#[source] io::Error), + #[error("Failed to read Python installation directory")] + ReadError(#[source] io::Error), #[error("Failed to find a directory to install executables into")] NoExecutableDirectory, #[error(transparent)] @@ -241,18 +216,12 @@ impl ManagedPythonInstallations { Err(err) => Some(Err(err)), }) .collect::>() - .map_err(|err| Error::ReadError { - dir: self.root.clone(), - err, - })?; + .map_err(Error::ReadError)?; directories } Err(err) if err.kind() == io::ErrorKind::NotFound => vec![], Err(err) => { - return Err(Error::ReadError { - dir: self.root.clone(), - err, - }); + return Err(Error::ReadError(err)); } }; let scratch = self.scratch(); @@ -573,11 +542,7 @@ impl ManagedPythonInstallation { } Err(err) if err.kind() == io::ErrorKind::AlreadyExists => {} Err(err) => { - return Err(Error::CanonicalizeExecutable { - from: executable, - to: python, - err, - }); + return Err(Error::CanonicalizeExecutable(err)); } } } @@ -862,11 +827,7 @@ impl PythonMinorVersionLink { } Err(err) if err.kind() == io::ErrorKind::AlreadyExists => {} Err(err) => { - return Err(Error::PythonMinorVersionLinkDirectory { - from: self.symlink_directory.clone(), - to: self.target_directory.clone(), - err, - }); + return Err(Error::PythonMinorVersionLinkDirectory(err)); } } Ok(()) @@ -957,10 +918,7 @@ fn executable_path_from_base( /// If the file already exists at the link path, an error will be returned. pub fn create_link_to_executable(link: &Path, executable: &Path) -> Result<(), Error> { let link_parent = link.parent().ok_or(Error::NoExecutableDirectory)?; - fs_err::create_dir_all(link_parent).map_err(|err| Error::ExecutableDirectory { - to: link_parent.to_path_buf(), - err, - })?; + fs_err::create_dir_all(link_parent).map_err(Error::ExecutableDirectory)?; if cfg!(unix) { // Note this will never copy on Unix — we use it here to allow compilation on Windows @@ -970,7 +928,6 @@ pub fn create_link_to_executable(link: &Path, executable: &Path) -> Result<(), E Err(Error::MissingExecutable(executable.to_path_buf())) } Err(err) => Err(Error::LinkExecutable { - from: executable.to_path_buf(), to: link.to_path_buf(), err, }), @@ -988,7 +945,6 @@ pub fn create_link_to_executable(link: &Path, executable: &Path) -> Result<(), E std::fs::File::create_new(link) .and_then(|mut file| file.write_all(launcher.as_ref())) .map_err(|err| Error::LinkExecutable { - from: executable.to_path_buf(), to: link.to_path_buf(), err, }) @@ -1005,14 +961,10 @@ pub fn create_link_to_executable(link: &Path, executable: &Path) -> Result<(), E /// See [`create_link_to_executable`] for a variant that errors if the link already exists. pub fn replace_link_to_executable(link: &Path, executable: &Path) -> Result<(), Error> { let link_parent = link.parent().ok_or(Error::NoExecutableDirectory)?; - fs_err::create_dir_all(link_parent).map_err(|err| Error::ExecutableDirectory { - to: link_parent.to_path_buf(), - err, - })?; + fs_err::create_dir_all(link_parent).map_err(Error::ExecutableDirectory)?; if cfg!(unix) { replace_symlink(executable, link).map_err(|err| Error::LinkExecutable { - from: executable.to_path_buf(), to: link.to_path_buf(), err, }) @@ -1022,7 +974,6 @@ pub fn replace_link_to_executable(link: &Path, executable: &Path) -> Result<(), let launcher = windows_python_launcher(executable, false)?; uv_fs::write_atomic_sync(link, &*launcher).map_err(|err| Error::LinkExecutable { - from: executable.to_path_buf(), to: link.to_path_buf(), err, }) diff --git a/crates/uv/src/commands/python/install.rs b/crates/uv/src/commands/python/install.rs index f18dd6fc0..363b60a54 100644 --- a/crates/uv/src/commands/python/install.rs +++ b/crates/uv/src/commands/python/install.rs @@ -1021,7 +1021,7 @@ fn create_bin_links( .or_default() .insert(target.clone()); } - Err(uv_python::managed::Error::LinkExecutable { from: _, to, err }) + Err(uv_python::managed::Error::LinkExecutable { to, err }) if err.kind() == ErrorKind::AlreadyExists => { debug!(