Fix executor panic (fix #653)

This commit is contained in:
Roey Darwish Dror
2021-02-27 06:41:55 +02:00
parent 23d9a5bf63
commit 5da219ed69
3 changed files with 9 additions and 4 deletions

View File

@@ -22,6 +22,10 @@ pub enum TopgradeError {
#[error("A step failed")]
pub struct StepFailed;
#[derive(Error, Debug)]
#[error("Dry running")]
pub struct DryRun();
#[derive(Error, Debug)]
#[error("{0}")]
pub struct SkipStep(pub String);

View File

@@ -1,5 +1,5 @@
//! Utilities for command execution
use crate::error::TopgradeError;
use crate::error::{DryRun, TopgradeError};
use crate::utils::{Check, CheckWithCodes};
use anyhow::Result;
use log::{debug, trace};
@@ -270,7 +270,7 @@ impl CommandExt for Executor {
fn check_output(&mut self) -> Result<String> {
let output = match self.output()? {
ExecutorOutput::Wet(output) => output,
ExecutorOutput::Dry => unreachable!(),
ExecutorOutput::Dry => return Err(DryRun().into()),
};
let status = output.status;
if !status.success() {
@@ -283,7 +283,7 @@ impl CommandExt for Executor {
fn string_output(&mut self) -> Result<String> {
let output = match self.output()? {
ExecutorOutput::Wet(output) => output,
ExecutorOutput::Dry => unreachable!(),
ExecutorOutput::Dry => return Err(DryRun().into()),
};
Ok(String::from_utf8(output.stdout)?)
}

View File

@@ -1,5 +1,5 @@
use crate::ctrlc;
use crate::error::SkipStep;
use crate::error::{DryRun, SkipStep};
use crate::execution_context::ExecutionContext;
use crate::report::{Report, StepResult};
use crate::{config::Step, terminal::should_retry};
@@ -39,6 +39,7 @@ impl<'a> Runner<'a> {
self.report.push_result(Some((key, StepResult::Success)));
break;
}
Err(e) if e.downcast_ref::<DryRun>().is_some() => break,
Err(e) if e.downcast_ref::<SkipStep>().is_some() => {
if self.ctx.config().verbose() || self.ctx.config().show_skipped() {
self.report.push_result(Some((key, StepResult::Skipped(e.to_string()))));