Skip to content

Commit 326ed9f

Browse files
committed
have prepare add a generic PrepareError context
if a more specifc one hasn't already been provided this way we can easily distinguish BuildDirectory::run failing due to Prepare::prepare failing from it failing for other reasons
1 parent 1de26fd commit 326ed9f

File tree

3 files changed

+18
-25
lines changed

3 files changed

+18
-25
lines changed

src/build.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::cmd::{Command, MountKind, Runnable, SandboxBuilder};
22
use crate::prepare::Prepare;
3-
use crate::{Crate, Toolchain, Workspace};
3+
use crate::{Crate, PrepareError, Toolchain, Workspace};
44
use std::path::PathBuf;
55
use std::vec::Vec;
66

@@ -194,7 +194,13 @@ impl BuildDirectory {
194194
}
195195

196196
let mut prepare = Prepare::new(&self.workspace, toolchain, krate, &source_dir, patches);
197-
prepare.prepare()?;
197+
prepare.prepare().map_err(|err| {
198+
if err.downcast_ref::<PrepareError>().is_none() {
199+
err.context(PrepareError::Unknown)
200+
} else {
201+
err
202+
}
203+
})?;
198204

199205
std::fs::create_dir_all(self.target_dir())?;
200206
let res = f(&Build {

src/prepare.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,8 @@ pub enum PrepareError {
390390
/// Some of the dependencies do not exist anymore.
391391
#[error("the crate depends on missing dependencies: \n\n{0}")]
392392
MissingDependencies(String),
393+
#[error("prepare failed without further details")]
394+
Unknown,
393395
}
394396

395397
#[cfg(test)]

tests/buildtest/runner.rs

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -63,29 +63,6 @@ impl Runner {
6363
}
6464
}
6565

66-
macro_rules! test_prepare_unknown_err {
67-
($name:ident, $krate:expr, $expected:ident $(,$expected_output:expr)?) => {
68-
#[test]
69-
fn $name() {
70-
runner::run($krate, |run| {
71-
let res = run.run(
72-
rustwide::cmd::SandboxBuilder::new().enable_networking(false),
73-
|_| Ok(()),
74-
);
75-
if let Some(err) = res
76-
.err()
77-
.and_then(|err| err.downcast::<rustwide::PrepareError>().ok())
78-
{
79-
panic!("did get an unexpected error: \n\n{}", err);
80-
} else {
81-
// Everything is OK!
82-
}
83-
Ok(())
84-
});
85-
}
86-
};
87-
}
88-
8966
macro_rules! test_prepare_error {
9067
($name:ident, $krate:expr, $expected:ident) => {
9168
#[test]
@@ -119,6 +96,8 @@ macro_rules! test_prepare_error {
11996
};
12097
}
12198

99+
pub(crate) use test_prepare_error;
100+
122101
macro_rules! test_prepare_error_stderr {
123102
($name:ident, $krate:expr, $expected:ident, $expected_output:expr) => {
124103
#[test]
@@ -151,3 +130,9 @@ macro_rules! test_prepare_error_stderr {
151130
}
152131
};
153132
}
133+
134+
macro_rules! test_prepare_unknown_err {
135+
($name:ident, $krate:expr, $expected:ident $(,$expected_output:expr)?) => {
136+
$crate::buildtest::runner::test_prepare_error!($name, $krate, Unknown);
137+
};
138+
}

0 commit comments

Comments
 (0)