Skip to content

Commit b9bc202

Browse files
committed
handle recurse provides
1 parent a713f14 commit b9bc202

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/repository.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,20 @@ impl<'a> PackageRepository<'a> {
7777
let repology = serde_json::to_string(&package.repology).unwrap();
7878
let replaces = serde_json::to_string(&package.replaces).unwrap();
7979

80-
let provides = package.provides.clone().map(|vec| {
81-
vec.into_iter()
80+
const PROVIDES_DELIMITERS: &[&str] = &["==", "=>", ":"];
81+
82+
let provides = package.provides.as_ref().map(|vec| {
83+
vec.iter()
8284
.filter_map(|p| {
83-
let matches = p == package.pkg_name
84-
|| ["==", "=>", ":"]
85-
.iter()
86-
.find_map(|&delim| p.split_once(delim))
87-
.is_some_and(|(first, _)| first == package.pkg_name);
88-
matches.then(|| PackageProvide::from_string(&p))
85+
let include = *p == package.pkg_name
86+
|| matches!(package.recurse_provides, Some(true))
87+
|| p.strip_prefix(&package.pkg_name).is_some_and(|rest| {
88+
PROVIDES_DELIMITERS.iter().any(|d| rest.starts_with(d))
89+
});
90+
91+
include.then(|| PackageProvide::from_string(p))
8992
})
90-
.collect::<Vec<PackageProvide>>()
93+
.collect::<Vec<_>>()
9194
});
9295
let provides = serde_json::to_string(&provides).unwrap();
9396
let inserted = self.statements.package_insert.execute(params![

0 commit comments

Comments
 (0)