Better Vagrant error handling
This commit is contained in:
@@ -6,6 +6,9 @@ pub enum TopgradeError {
|
||||
#[error("{0}")]
|
||||
ProcessFailed(ExitStatus),
|
||||
|
||||
#[error("{0}: {1}")]
|
||||
ProcessFailedWithOutput(ExitStatus, String),
|
||||
|
||||
#[error("Sudo is required for this step")]
|
||||
#[allow(dead_code)]
|
||||
SudoRequired,
|
||||
|
||||
@@ -245,7 +245,8 @@ impl CommandExt for Command {
|
||||
trace!("Output of {:?}: {:?}", self, output);
|
||||
let status = output.status;
|
||||
if !status.success() {
|
||||
return Err(TopgradeError::ProcessFailed(status).into());
|
||||
let stderr = String::from_utf8(output.stderr).unwrap_or_default();
|
||||
return Err(TopgradeError::ProcessFailedWithOutput(status, stderr).into());
|
||||
}
|
||||
Ok(String::from_utf8(output.stdout)?)
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ use crate::executor::CommandExt;
|
||||
use crate::terminal::print_separator;
|
||||
use crate::{error::SkipStep, utils};
|
||||
use anyhow::Result;
|
||||
use log::debug;
|
||||
use log::{debug, error};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::Command;
|
||||
use std::{fmt::Display, rc::Rc, str::FromStr};
|
||||
@@ -159,8 +159,12 @@ pub fn collect_boxes(ctx: &ExecutionContext) -> Result<Vec<VagrantBox>> {
|
||||
let mut result = Vec::new();
|
||||
|
||||
for directory in directories {
|
||||
let mut boxes = vagrant.get_boxes(directory)?;
|
||||
result.append(&mut boxes);
|
||||
match vagrant.get_boxes(directory) {
|
||||
Ok(mut boxes) => {
|
||||
result.append(&mut boxes);
|
||||
}
|
||||
Err(e) => error!("Error collecting vagrant boxes from {}: {}", directory, e),
|
||||
};
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
|
||||
Reference in New Issue
Block a user