mirror of
https://github.com/pesde-pkg/pesde.git
synced 2024-12-12 02:50:37 +00:00
feat: support using workspace root as a member
This commit is contained in:
parent
e30ec8a6cf
commit
0fa17a839f
6 changed files with 25 additions and 5 deletions
|
@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- Add improved CLI styling by @daimond113
|
||||
- Install pesde dependencies before Wally to support scripts packages by @daimond113
|
||||
- Support packages exporting scripts by @daimond113
|
||||
- Support using workspace root as a member by @daimond113
|
||||
|
||||
### Removed
|
||||
- Remove special scripts repo handling to favour standard packages by @daimond113
|
||||
|
|
|
@ -125,7 +125,7 @@ impl RunCommand {
|
|||
.workspace_dir()
|
||||
.unwrap_or_else(|| project.package_dir());
|
||||
|
||||
let members = match project.workspace_members(workspace_dir).await {
|
||||
let members = match project.workspace_members(workspace_dir, false).await {
|
||||
Ok(members) => members.boxed(),
|
||||
Err(pesde::errors::WorkspaceMembersError::ManifestMissing(e))
|
||||
if e.kind() == std::io::ErrorKind::NotFound =>
|
||||
|
|
|
@ -248,7 +248,9 @@ pub async fn run_on_workspace_members<F: Future<Output = anyhow::Result<()>>>(
|
|||
return Ok(Default::default());
|
||||
}
|
||||
|
||||
let members_future = project.workspace_members(project.package_dir()).await?;
|
||||
let members_future = project
|
||||
.workspace_members(project.package_dir(), true)
|
||||
.await?;
|
||||
pin!(members_future);
|
||||
|
||||
let mut results = BTreeMap::<PackageName, BTreeMap<TargetKind, RelativePathBuf>>::new();
|
||||
|
@ -257,7 +259,10 @@ pub async fn run_on_workspace_members<F: Future<Output = anyhow::Result<()>>>(
|
|||
let relative_path =
|
||||
RelativePathBuf::from_path(path.strip_prefix(project.package_dir()).unwrap()).unwrap();
|
||||
|
||||
f(shift_project_dir(project, path)).await?;
|
||||
// don't run on the current workspace root
|
||||
if relative_path != "" {
|
||||
f(shift_project_dir(project, path)).await?;
|
||||
}
|
||||
|
||||
results
|
||||
.entry(manifest.name)
|
||||
|
|
15
src/lib.rs
15
src/lib.rs
|
@ -185,6 +185,7 @@ impl Project {
|
|||
pub async fn workspace_members<P: AsRef<Path>>(
|
||||
&self,
|
||||
dir: P,
|
||||
can_ref_self: bool,
|
||||
) -> Result<
|
||||
impl Stream<Item = Result<(PathBuf, Manifest), errors::WorkspaceMembersError>>,
|
||||
errors::WorkspaceMembersError,
|
||||
|
@ -201,6 +202,7 @@ impl Project {
|
|||
dir,
|
||||
manifest.workspace_members.iter().map(|s| s.as_str()),
|
||||
false,
|
||||
can_ref_self,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
@ -295,10 +297,13 @@ pub async fn matching_globs<'a, P: AsRef<Path>, I: IntoIterator<Item = &'a str>>
|
|||
dir: P,
|
||||
globs: I,
|
||||
relative: bool,
|
||||
can_ref_self: bool,
|
||||
) -> Result<HashSet<PathBuf>, errors::MatchingGlobsError> {
|
||||
let (negative_globs, positive_globs): (Vec<&str>, Vec<&str>) =
|
||||
let (negative_globs, mut positive_globs): (HashSet<&str>, _) =
|
||||
globs.into_iter().partition(|glob| glob.starts_with('!'));
|
||||
|
||||
let include_self = positive_globs.remove(".") && can_ref_self;
|
||||
|
||||
let negative_globs = wax::any(
|
||||
negative_globs
|
||||
.into_iter()
|
||||
|
@ -315,6 +320,14 @@ pub async fn matching_globs<'a, P: AsRef<Path>, I: IntoIterator<Item = &'a str>>
|
|||
let mut read_dirs = vec![fs::read_dir(dir.as_ref().to_path_buf()).await?];
|
||||
let mut paths = HashSet::new();
|
||||
|
||||
if include_self {
|
||||
paths.insert(if relative {
|
||||
PathBuf::new()
|
||||
} else {
|
||||
dir.as_ref().to_path_buf()
|
||||
});
|
||||
}
|
||||
|
||||
while let Some(mut read_dir) = read_dirs.pop() {
|
||||
while let Some(entry) = read_dir.next_entry().await? {
|
||||
let path = entry.path();
|
||||
|
|
|
@ -149,6 +149,7 @@ async fn run() -> anyhow::Result<()> {
|
|||
path,
|
||||
manifest.workspace_members.iter().map(|s| s.as_str()),
|
||||
false,
|
||||
false,
|
||||
)
|
||||
.await
|
||||
.context("failed to get workspace members")
|
||||
|
|
|
@ -49,7 +49,7 @@ impl PackageSource for WorkspacePackageSource {
|
|||
.unwrap_or(&project.package_dir);
|
||||
let target = specifier.target.unwrap_or(project_target);
|
||||
|
||||
let members = project.workspace_members(workspace_dir).await?;
|
||||
let members = project.workspace_members(workspace_dir, true).await?;
|
||||
pin!(members);
|
||||
|
||||
while let Some((path, manifest)) = members.next().await.transpose()? {
|
||||
|
|
Loading…
Reference in a new issue