Move output() and OutputError into brev (#187)
They're pretty generic and generally useful, so move them into brev on crates.io.
This commit is contained in:
parent
af764f5eab
commit
832cf7b357
6
Cargo.lock
generated
6
Cargo.lock
generated
@ -4,7 +4,7 @@ version = "0.2.26"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"brev 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"brev 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clap 2.23.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.23.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"edit-distance 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"edit-distance 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
"itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -45,7 +45,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "brev"
|
name = "brev"
|
||||||
version = "0.1.8"
|
version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -217,7 +217,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
"checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6"
|
"checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6"
|
||||||
"checksum atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d912da0db7fa85514874458ca3651fe2cddace8d0b0505571dbdcd41ab490159"
|
"checksum atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d912da0db7fa85514874458ca3651fe2cddace8d0b0505571dbdcd41ab490159"
|
||||||
"checksum bitflags 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1370e9fc2a6ae53aea8b7a5110edbd08836ed87c88736dfabccade1c2b44bff4"
|
"checksum bitflags 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1370e9fc2a6ae53aea8b7a5110edbd08836ed87c88736dfabccade1c2b44bff4"
|
||||||
"checksum brev 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "363b8e31f04a5c26761f0a01da8f46eb172485d029a01042ad07fc01faef62ad"
|
"checksum brev 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "eb37ce3b65873276d1587151ef5b63bcc15c8da8dd5058792f5660cb32206d97"
|
||||||
"checksum clap 2.23.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f57e9b63057a545ad2ecd773ea61e49422ed1b1d63d74d5da5ecaee55b3396cd"
|
"checksum clap 2.23.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f57e9b63057a545ad2ecd773ea61e49422ed1b1d63d74d5da5ecaee55b3396cd"
|
||||||
"checksum edit-distance 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cd50a61206c09132fdf9cbaccc64a82cfccb6be528453903e03d4eb4ec80a61d"
|
"checksum edit-distance 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cd50a61206c09132fdf9cbaccc64a82cfccb6be528453903e03d4eb4ec80a61d"
|
||||||
"checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
|
"checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
|
||||||
|
55
src/lib.rs
55
src/lib.rs
@ -7,6 +7,7 @@ extern crate ansi_term;
|
|||||||
extern crate unicode_width;
|
extern crate unicode_width;
|
||||||
extern crate edit_distance;
|
extern crate edit_distance;
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
|
extern crate brev;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod unit;
|
mod unit;
|
||||||
@ -34,11 +35,12 @@ use prelude::*;
|
|||||||
pub use app::app;
|
pub use app::app;
|
||||||
|
|
||||||
use app::UseColor;
|
use app::UseColor;
|
||||||
|
use brev::{output, OutputError};
|
||||||
|
use platform::{Platform, PlatformInterface};
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::collections::{BTreeMap as Map, BTreeSet as Set};
|
use std::collections::{BTreeMap as Map, BTreeSet as Set};
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
use std::ops::Range;
|
use std::ops::Range;
|
||||||
use platform::{Platform, PlatformInterface};
|
|
||||||
|
|
||||||
macro_rules! warn {
|
macro_rules! warn {
|
||||||
($($arg:tt)*) => {{
|
($($arg:tt)*) => {{
|
||||||
@ -101,48 +103,6 @@ fn contains<T: PartialOrd>(range: &Range<T>, i: T) -> bool {
|
|||||||
i >= range.start && i < range.end
|
i >= range.start && i < range.end
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum OutputError {
|
|
||||||
/// Non-zero exit code
|
|
||||||
Code(i32),
|
|
||||||
/// IO error upon execution
|
|
||||||
Io(io::Error),
|
|
||||||
/// Terminated by signal
|
|
||||||
Signal(i32),
|
|
||||||
/// Unknown failure
|
|
||||||
Unknown,
|
|
||||||
/// Stdtout not UTF-8
|
|
||||||
Utf8(std::str::Utf8Error),
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Run a command and return the data it wrote to stdout as a string
|
|
||||||
fn output(mut command: process::Command) -> Result<String, OutputError> {
|
|
||||||
match command.output() {
|
|
||||||
Ok(output) => {
|
|
||||||
if let Some(code) = output.status.code() {
|
|
||||||
if code != 0 {
|
|
||||||
return Err(OutputError::Code(code));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return Err(output_error_from_signal(output.status));
|
|
||||||
}
|
|
||||||
match std::str::from_utf8(&output.stdout) {
|
|
||||||
Err(error) => Err(OutputError::Utf8(error)),
|
|
||||||
Ok(utf8) => {
|
|
||||||
Ok(if utf8.ends_with('\n') {
|
|
||||||
&utf8[0..utf8.len()-1]
|
|
||||||
} else if utf8.ends_with("\r\n") {
|
|
||||||
&utf8[0..utf8.len()-2]
|
|
||||||
} else {
|
|
||||||
utf8
|
|
||||||
}.to_string())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(io_error) => Err(OutputError::Io(io_error)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
struct Recipe<'a> {
|
struct Recipe<'a> {
|
||||||
dependencies: Vec<&'a str>,
|
dependencies: Vec<&'a str>,
|
||||||
@ -257,15 +217,6 @@ fn error_from_signal(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return an OutputError::Signal if the process was terminated by signal,
|
|
||||||
/// otherwise return an OutputError::UnknownFailure
|
|
||||||
fn output_error_from_signal(exit_status: process::ExitStatus) -> OutputError {
|
|
||||||
match Platform::signal_from_exit_status(exit_status) {
|
|
||||||
Some(signal) => OutputError::Signal(signal),
|
|
||||||
None => OutputError::Unknown,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn export_env<'a>(
|
fn export_env<'a>(
|
||||||
command: &mut process::Command,
|
command: &mut process::Command,
|
||||||
scope: &Map<&'a str, String>,
|
scope: &Map<&'a str, String>,
|
||||||
|
@ -75,7 +75,7 @@ impl PlatformInterface for Platform {
|
|||||||
|
|
||||||
fn signal_from_exit_status(_exit_status: process::ExitStatus) -> Option<i32> {
|
fn signal_from_exit_status(_exit_status: process::ExitStatus) -> Option<i32> {
|
||||||
// The rust standard library does not expose a way to extract a signal
|
// The rust standard library does not expose a way to extract a signal
|
||||||
// from a process exit status, so just return None
|
// from a windows process exit status, so just return None
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user