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