rs-versions icon indicating copy to clipboard operation
rs-versions copied to clipboard

Versioning::new vs Versioning::parse inconsistency, Requirement issue with general versions

Open scop opened this issue 9 months ago • 1 comments

use versions;

fn main() {
    let v = versions::Versioning::new("1.2.3.4").unwrap();
    println!("Versioning::new: v={}, is_ideal={}, is_general={}, is_complex={}", v, v.is_ideal(), v.is_general(), v.is_complex());

    let (i, v2) = versions::Versioning::parse("1.2.3.4").unwrap();
    println!("Versioning::parse: i={}, v={}, is_ideal={}, is_general={}, is_complex={}", i, v2, v2.is_ideal(), v2.is_general(), v2.is_complex());

    let v3 = versions::Version::new("1.2.3.4").unwrap();
    println!("Version::new: v={}", v3);

    let (i, v4) = versions::Version::parse("1.2.3.4").unwrap();
    println!("Version::parse: i={}, v={}", i, v4);
}

...outputs

Versioning::new: v=1.2.3.4, is_ideal=false, is_general=true, is_complex=false
Versioning::parse: i=.4, v=1.2.3, is_ideal=true, is_general=false, is_complex=false
Version::new: v=1.2.3.4
Version::parse: i=, v=1.2.3.4

Note the inconsistency between Versioning::new and Versioning::parse. I would expect ::parse to be have the same as ::new, i.e. return a general one.

It seems that because of this, Requirements like <=1.2.3.4 fail to parse altogether with Requirement::new, and with Requirement::parse the result is a truncated one (with the parsed version only containing 1.2.3). I'd expect both to succeed, with version being 1.2.3.4 in both.

scop avatar Mar 26 '25 13:03 scop

Hi, sorry it took so long to respond. I will resolve this soon.

fosskers avatar Aug 06 '25 06:08 fosskers