diff --git a/hive-forge/src/verbs/dependency.rs b/hive-forge/src/verbs/dependency.rs index 6fb4a349..64a9d943 100644 --- a/hive-forge/src/verbs/dependency.rs +++ b/hive-forge/src/verbs/dependency.rs @@ -113,7 +113,26 @@ fn apply_and_verify( if call_errors.is_empty() { return Ok(()); } - let after = dependency_summaries(client, owner, name, number)?; + let after = match dependency_summaries(client, owner, name, number) { + Ok(deps) => deps, + Err(read_err) => { + // The read-back itself failed, so none of the per-dep errors + // above could be re-classified — surface all of them rather + // than dropping them behind the read-back's own error. + let originals: Vec = call_errors + .iter() + .map(|(dep, e)| format!("#{dep}: {e:#}")) + .collect(); + let verb = if adding { "add" } else { "remove" }; + bail!( + "hive-forge dependency {verb}: {} call(s) reported an error, and the \ + read-back to check whether they actually landed also failed ({read_err:#}). \ + Original error(s):\n{}", + call_errors.len(), + originals.join("\n") + ); + } + }; let present: HashSet = after .iter() .filter_map(|d| d.get("number").and_then(Value::as_i64))