forked from gentoo-utils/gentoo-utils
support atoms with wildcard versions
This commit is contained in:
@@ -28,7 +28,10 @@ pub fn version_operator<'a>() -> impl Parser<&'a str, Output = VersionOperator>
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn version_number<'a>() -> impl Parser<&'a str, Output = VersionNumber> {
|
pub fn version_number<'a>() -> impl Parser<&'a str, Output = VersionNumber> {
|
||||||
numeric1().map(|output: &str| VersionNumber(output.to_string()))
|
numeric1()
|
||||||
|
.followed_by(opt(tag("*")))
|
||||||
|
.recognize()
|
||||||
|
.map(|output: &str| VersionNumber(output.to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn version_suffix_kind<'a>() -> impl Parser<&'a str, Output = VersionSuffixKind> {
|
pub fn version_suffix_kind<'a>() -> impl Parser<&'a str, Output = VersionSuffixKind> {
|
||||||
@@ -218,7 +221,15 @@ pub fn atom<'a>() -> impl Parser<&'a str, Output = Atom> {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
.verify_output(|atom| match (&atom.version_operator, &atom.version) {
|
.verify_output(|atom| match (&atom.version_operator, &atom.version) {
|
||||||
(Some(_), Some(_)) => true,
|
(Some(VersionOperator::Eq), Some(_)) => true,
|
||||||
|
(Some(_), Some(version))
|
||||||
|
if !version
|
||||||
|
.numbers()
|
||||||
|
.iter()
|
||||||
|
.any(|number| number.get().contains("*")) =>
|
||||||
|
{
|
||||||
|
true
|
||||||
|
}
|
||||||
(None, None) => true,
|
(None, None) => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
})
|
})
|
||||||
@@ -323,4 +334,18 @@ mod test {
|
|||||||
|
|
||||||
atom().check_finished(it).unwrap();
|
atom().check_finished(it).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_atom_with_star_in_version() {
|
||||||
|
let it = InputIter::new("=foo/bar-1.2*");
|
||||||
|
|
||||||
|
atom().check_finished(it).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_atom_with_star_in_version_without_eq_version_operator() {
|
||||||
|
let it = InputIter::new(">=foo/bar-1.2*");
|
||||||
|
|
||||||
|
assert!(atom().check_finished(it).is_err());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user