diff --git a/rye/src/platform.rs b/rye/src/platform.rs index 38887f2367..ed663f9066 100644 --- a/rye/src/platform.rs +++ b/rye/src/platform.rs @@ -217,8 +217,7 @@ pub fn get_python_version_request_from_pyenv_pin(root: &Path) -> Option Option Option { + // Skip empty lines and comments. + let ver = contents.lines().find(|line| { + let trimmed = line.trim(); + !(trimmed.is_empty() || trimmed.starts_with('#')) + })?; + + // Parse the version. + let ver = ver.parse().ok()?; + + Some(ver) +} + /// Returns the most recent cpython release. pub fn get_latest_cpython_version() -> Result { latest_available_python_version(&PythonVersionRequest { @@ -278,3 +291,22 @@ pub fn write_credentials(doc: &toml_edit::DocumentMut) -> Result<(), Error> { pub fn get_credentials_filepath() -> Result { Ok(get_app_dir().join("credentials")) } + +#[cfg(test)] +mod test { + + #[test] + fn test_read_python_version() { + // Parse a simple version. + let ver = super::read_python_version("3.8.1\n"); + assert_eq!(ver, Some("3.8.1".parse().unwrap())); + + // Skip empty lines. + let ver = super::read_python_version("\n\n3.8.1\n"); + assert_eq!(ver, Some("3.8.1".parse().unwrap())); + + // Skip comments. + let ver = super::read_python_version("# comment\n3.8.1\n"); + assert_eq!(ver, Some("3.8.1".parse().unwrap())); + } +}