diff --git a/src/command.rs b/src/command.rs index 5922445..ba3c6e2 100644 --- a/src/command.rs +++ b/src/command.rs @@ -28,7 +28,7 @@ pub struct System { // exclusive_with : List } -#[derive(Debug, Serialize, Deserialize, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] struct Cmd { exe: String, params: Vec, @@ -36,7 +36,7 @@ struct Cmd { env: HashMap, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub(crate) struct ActualCmd { exe: String, params: Vec, @@ -143,8 +143,16 @@ impl System { pub fn fetch(&self, opt: &Opt) -> Result<()> { if let Some(fetch) = &self.fetch { let cmd = fetch.clone().prepare(opt); - cmd.execute(opt) - .map_err(|err| MyError::new(ErrorKind::Fetch, err, cmd))?; + let exit_status = cmd + .execute(opt) + .map_err(|err| MyError::new(ErrorKind::Fetch, err, cmd.clone()))?; + if !exit_status.success() { + return Err(MyError::new( + ErrorKind::Fetch, + io::Error::new(io::ErrorKind::Other, format!("{}", exit_status)), + cmd.clone(), + )); + } } Ok(()) } @@ -152,16 +160,32 @@ impl System { pub fn compile(&self, opt: &Opt) -> Result<()> { if let Some(compile) = &self.compile { let cmd = compile.clone().prepare(opt); - cmd.execute(opt) - .map_err(|err| MyError::new(ErrorKind::Compile, err, cmd))?; + let exit_status = cmd + .execute(opt) + .map_err(|err| MyError::new(ErrorKind::Compile, err, cmd.clone()))?; + if !exit_status.success() { + return Err(MyError::new( + ErrorKind::Fetch, + io::Error::new(io::ErrorKind::Other, format!("{}", exit_status)), + cmd.clone(), + )); + } } Ok(()) } pub fn install(&self, opt: &Opt) -> Result<()> { let cmd = self.install.clone().prepare(opt); - cmd.execute(opt) - .map_err(|err| MyError::new(ErrorKind::Install, err, cmd))?; + let exit_status = cmd + .execute(opt) + .map_err(|err| MyError::new(ErrorKind::Install, err, cmd.clone()))?; + if !exit_status.success() { + return Err(MyError::new( + ErrorKind::Fetch, + io::Error::new(io::ErrorKind::Other, format!("{}", exit_status)), + cmd.clone(), + )); + } Ok(()) } }