-
Notifications
You must be signed in to change notification settings - Fork 35
Closed
Labels
bugIssue identified by VS Code Team member as probable bugIssue identified by VS Code Team member as probable bug
Description
Bug Description
On Windows, when pyenv-win is installed at the default home location (~/.pyenv/pyenv-win/) but the PYENV_ROOT or PYENV environment variables are not set, the version detection in get_pyenv_manager_version() fails because it only uses get_pyenv_dir(environment) which requires those env vars to be present.
Location
crates/pet-pyenv/src/manager.rs:
#[cfg(windows)]
fn get_pyenv_manager_version(
_pyenv_binary_path: &Path,
environment: &EnvVariables,
) -> Option<String> {
// In windows, the version is stored in the `.pyenv/.version` file
let pyenv_dir = get_pyenv_dir(environment)?; // <-- Returns None if env vars not set
let mut version_file = pyenv_dir.join(".version");
// ...
}The function get_pyenv_dir() in environment_locations.rs:
pub fn get_pyenv_dir(env_vars: &EnvVariables) -> Option<PathBuf> {
match &env_vars.pyenv_root {
Some(dir) => Some(PathBuf::from(dir)),
None => env_vars.pyenv.as_ref().map(PathBuf::from), // Returns None if neither env var is set
}
}Expected Behavior
If the env vars are not set, the version detection should fall back to checking the home-based default path ~/.pyenv/.version.
Suggested Fix
#[cfg(windows)]
fn get_pyenv_manager_version(
_pyenv_binary_path: &Path,
environment: &EnvVariables,
) -> Option<String> {
// In windows, the version is stored in the `.pyenv/.version` file
// Try env var path first, then fall back to home directory
let pyenv_dir = get_pyenv_dir(environment)
.or_else(|| get_home_pyenv_dir(environment)?.parent().map(PathBuf::from));
let pyenv_dir = pyenv_dir?;
let mut version_file = pyenv_dir.join(".version");
if !version_file.exists() {
// We might have got the path `~/.pyenv/pyenv-win`
version_file = pyenv_dir.parent()?.join(".version");
if !version_file.exists() {
return None;
}
}
let version = fs::read_to_string(version_file).ok()?;
Some(
PYENV_VERSION_FROM_VERSION_FILE
.captures(&version)?
.get(1)?
.as_str()
.to_string(),
)
}Related Issue
Metadata
Metadata
Assignees
Labels
bugIssue identified by VS Code Team member as probable bugIssue identified by VS Code Team member as probable bug