Skip to content

Commit 6fe08fa

Browse files
committed
Add a mean to mutably access the members of a workspace
It is used by cargo-c to patch all the lib crates in a workspace.
1 parent ed0c8c6 commit 6fe08fa

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

src/cargo/core/workspace.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,26 @@ impl<'cfg> Workspace<'cfg> {
473473
}
474474
}
475475

476+
/// Returns a mutable iterator over all packages in this workspace
477+
pub fn members_mut(&mut self) -> impl Iterator<Item = &mut Package> {
478+
let packages = &mut self.packages.packages;
479+
let members: HashSet<_> = self
480+
.members
481+
.iter()
482+
.map(|path| path.parent().unwrap().to_owned())
483+
.collect();
484+
485+
packages.iter_mut().filter_map(move |(path, package)| {
486+
if members.contains(path) {
487+
if let MaybePackage::Package(ref mut p) = package {
488+
return Some(p);
489+
}
490+
}
491+
492+
None
493+
})
494+
}
495+
476496
/// Returns an iterator over default packages in this workspace
477497
pub fn default_members<'a>(&'a self) -> Members<'a, 'cfg> {
478498
Members {
@@ -481,6 +501,26 @@ impl<'cfg> Workspace<'cfg> {
481501
}
482502
}
483503

504+
/// Returns an iterator over default packages in this workspace
505+
pub fn default_members_mut(&mut self) -> impl Iterator<Item = &mut Package> {
506+
let packages = &mut self.packages.packages;
507+
let members: HashSet<_> = self
508+
.default_members
509+
.iter()
510+
.map(|path| path.parent().unwrap().to_owned())
511+
.collect();
512+
513+
packages.iter_mut().filter_map(move |(path, package)| {
514+
if members.contains(path) {
515+
if let MaybePackage::Package(ref mut p) = package {
516+
return Some(p);
517+
}
518+
}
519+
520+
None
521+
})
522+
}
523+
484524
/// Returns true if the package is a member of the workspace.
485525
pub fn is_member(&self, pkg: &Package) -> bool {
486526
self.member_ids.contains(&pkg.package_id())

0 commit comments

Comments
 (0)