fix(cli): a missing [nodes] directory refuses with a clean message
An existence pre-check on the [nodes] pointer target fires before the crate pipeline: the refusal names the absent directory and keeps the [nodes] context, instead of leaking cargo metadata's os-error wrap. Existing-but-broken crates keep the ArtifactMissing/CargoMetadata errors under the pointer prefix. closes #245
This commit is contained in:
@@ -59,6 +59,10 @@ pub enum ProjectError {
|
||||
Charter(String),
|
||||
MultiCrate(usize),
|
||||
NodesPointer { pointer: String, inner: Box<ProjectError> },
|
||||
/// #245: the `[nodes]` pointer target does not exist — checked before
|
||||
/// handing off to `load_crate`, so this never reaches the cargo-metadata
|
||||
/// probe (whose raw os-error text would otherwise leak through).
|
||||
PointerDirMissing(PathBuf),
|
||||
}
|
||||
|
||||
impl fmt::Display for ProjectError {
|
||||
@@ -95,6 +99,7 @@ impl fmt::Display for ProjectError {
|
||||
f,
|
||||
"node crate at `{pointer}` (from [nodes] in Aura.toml): {inner}"
|
||||
),
|
||||
Self::PointerDirMissing(p) => write!(f, "{} does not exist", p.display()),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -488,9 +493,19 @@ pub fn load(root: &Path, release: bool) -> Result<ProjectEnv, ProjectError> {
|
||||
None
|
||||
}
|
||||
}
|
||||
[pointer] => Some(load_crate(&root.join(pointer), release).map_err(|e| {
|
||||
ProjectError::NodesPointer { pointer: pointer.clone(), inner: Box::new(e) }
|
||||
})?),
|
||||
[pointer] => {
|
||||
let dir = root.join(pointer);
|
||||
if !dir.is_dir() {
|
||||
return Err(ProjectError::NodesPointer {
|
||||
pointer: pointer.clone(),
|
||||
inner: Box::new(ProjectError::PointerDirMissing(dir)),
|
||||
});
|
||||
}
|
||||
Some(load_crate(&dir, release).map_err(|e| ProjectError::NodesPointer {
|
||||
pointer: pointer.clone(),
|
||||
inner: Box::new(e),
|
||||
})?)
|
||||
}
|
||||
many => return Err(ProjectError::MultiCrate(many.len())),
|
||||
};
|
||||
Ok(ProjectEnv {
|
||||
|
||||
Reference in New Issue
Block a user