From e05d653a7140b25ef0a1c1af61cf0d400fb83dbf Mon Sep 17 00:00:00 2001 From: eth3lbert Date: Wed, 24 Jul 2024 00:41:29 +0800 Subject: [PATCH] Show symbolic links in `uv python list` (#5343) ## Summary This PR displays symbolic links in `uv python list` and produces output similar to the following: ``` :) uv python list --preview cpython-3.12.1-macos-aarch64-none /Users/eth/workspace/astral-sh/uv/bin/python3.12 -> versions/cpython@3.12.1/install/bin/python3 cpython-3.12.1-macos-aarch64-none /Users/eth/workspace/astral-sh/uv/bin/python3 -> versions/cpython@3.12.1/install/bin/python3 cpython-3.12.1-macos-aarch64-none /Users/eth/workspace/astral-sh/uv/bin/python -> versions/cpython@3.12.1/install/bin/python3 cpython-3.11.7-macos-aarch64-none /Users/eth/workspace/astral-sh/uv/bin/python3.11 -> versions/cpython@3.11.7/install/bin/python3 cpython-3.10.13-macos-aarch64-none /Users/eth/workspace/astral-sh/uv/bin/python3.10 -> versions/cpython@3.10.13/install/bin/python3 cpython-3.9.18-macos-aarch64-none /Users/eth/workspace/astral-sh/uv/bin/python3.9 -> versions/cpython@3.9.18/install/bin/python3 cpython-3.8.18-macos-aarch64-none /Users/eth/workspace/astral-sh/uv/bin/python3.8 -> versions/cpython@3.8.18/install/bin/python3 ``` Resolves #5308 ## Test Plan ``` $ cargo run python list ``` --- crates/uv/src/commands/python/list.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/crates/uv/src/commands/python/list.rs b/crates/uv/src/commands/python/list.rs index 786319c43..7decad091 100644 --- a/crates/uv/src/commands/python/list.rs +++ b/crates/uv/src/commands/python/list.rs @@ -142,11 +142,21 @@ pub(crate) async fn list( for (key, path) in include { let key = key.to_string(); if let Some(path) = path { - writeln!( - printer.stdout(), - "{key:width$} {}", - path.user_display().cyan() - )?; + let is_symlink = fs_err::symlink_metadata(path)?.is_symlink(); + if is_symlink { + writeln!( + printer.stdout(), + "{key:width$} {} -> {}", + path.user_display().cyan(), + path.read_link()?.user_display().cyan() + )?; + } else { + writeln!( + printer.stdout(), + "{key:width$} {}", + path.user_display().cyan() + )?; + } } else { writeln!( printer.stdout(),