diff --git a/src/bin/cargo-read-manifest.rs b/src/bin/cargo-read-manifest.rs index 225c811d9..457af74eb 100644 --- a/src/bin/cargo-read-manifest.rs +++ b/src/bin/cargo-read-manifest.rs @@ -25,7 +25,7 @@ fn execute(options: Options) -> CliResult> { let source_id = SourceId::for_path(&Path::new(options.manifest_path.as_slice())); let mut source = PathSource::new(&source_id); - try!(source.update().map_err(|err| CLIError::new(err.get_desc(), Some(err.get_detail()), 1))); + try!(source.update().map_err(|err| CliError::new(err.description(), 1))); source .get_root_package() diff --git a/src/bin/cargo.rs b/src/bin/cargo.rs index 2daaf3bef..15c2762a6 100644 --- a/src/bin/cargo.rs +++ b/src/bin/cargo.rs @@ -13,7 +13,7 @@ use std::io::process::{Command,InheritFd,ExitStatus,ExitSignal}; use serialize::Encodable; use cargo::{NoFlags,execute_main_without_stdin,handle_error}; use cargo::util::important_paths::find_project; -use cargo::util::{CliError, CliResult, CargoResult, CargoError, Require, config, box_error}; +use cargo::util::{CliError, CliResult, Require, config}; fn main() { execute(); @@ -91,7 +91,7 @@ impl FlagConfig for ConfigForKeyFlags { } fn config_for_key(args: ConfigForKeyFlags) -> CliResult> { - let value = try!(config::get_config(os::getcwd(), args.key.as_slice()).map_err(|err| + let value = try!(config::get_config(os::getcwd(), args.key.as_slice()).map_err(|_| CliError::new("Couldn't load configuration", 1))); if args.human { @@ -116,7 +116,7 @@ impl FlagConfig for ConfigListFlags { } fn config_list(args: ConfigListFlags) -> CliResult> { - let configs = try!(config::all_configs(os::getcwd()).map_err(|e| + let configs = try!(config::all_configs(os::getcwd()).map_err(|_| CliError::new("Couldn't load configuration", 1))); if args.human { diff --git a/src/cargo/core/manifest.rs b/src/cargo/core/manifest.rs index da904e174..a2cac38f7 100644 --- a/src/cargo/core/manifest.rs +++ b/src/cargo/core/manifest.rs @@ -10,7 +10,7 @@ use core::{ Summary }; use core::dependency::SerializedDependency; -use util::{CargoResult, CargoError, box_error}; +use util::{CargoResult, box_error}; #[deriving(PartialEq,Clone)] pub struct Manifest { diff --git a/src/cargo/lib.rs b/src/cargo/lib.rs index c8dd26ef2..b23b6ce33 100644 --- a/src/cargo/lib.rs +++ b/src/cargo/lib.rs @@ -101,10 +101,10 @@ fn flags_from_args() -> CliResult { fn json_from_stdin() -> CliResult { let mut reader = io::stdin(); - let input = try!(reader.read_to_str().map_err(|e| CliError::new("Standard in did not exist or was not UTF-8", 1))); + let input = try!(reader.read_to_str().map_err(|_| CliError::new("Standard in did not exist or was not UTF-8", 1))); - let json = try!(json::from_str(input.as_slice()).map_err(|e| CliError::new("Could not parse standard in as JSON", 1))); + let json = try!(json::from_str(input.as_slice()).map_err(|_| CliError::new("Could not parse standard in as JSON", 1))); let mut decoder = json::Decoder::new(json); - Decodable::decode(&mut decoder).map_err(|e: json::DecoderError| CliError::new("Could not process standard in as input", 1)) + Decodable::decode(&mut decoder).map_err(|_| CliError::new("Could not process standard in as input", 1)) } diff --git a/src/cargo/ops/cargo_read_manifest.rs b/src/cargo/ops/cargo_read_manifest.rs index 809c38a20..f5524618e 100644 --- a/src/cargo/ops/cargo_read_manifest.rs +++ b/src/cargo/ops/cargo_read_manifest.rs @@ -1,7 +1,7 @@ use std::io::File; use util; use core::{Package,Manifest,SourceId}; -use util::{CargoResult, CargoError, box_error, human}; +use util::{CargoResult, box_error, human}; pub fn read_manifest(contents: &[u8], source_id: &SourceId) -> CargoResult<(Manifest, Vec)> { util::toml::to_manifest(contents, source_id).map_err(human) diff --git a/src/cargo/ops/cargo_rustc.rs b/src/cargo/ops/cargo_rustc.rs index 90cb85f8a..eb5fc6d68 100644 --- a/src/cargo/ops/cargo_rustc.rs +++ b/src/cargo/ops/cargo_rustc.rs @@ -1,10 +1,9 @@ use std::os::args; use std::io; use std::path::Path; -use std::str; use core::{Package,PackageSet,Target}; use util; -use util::{CargoResult, CargoError, ProcessBuilder, error, human, box_error}; +use util::{CargoResult, CargoError, ProcessBuilder, error, human}; type Args = Vec; @@ -60,7 +59,7 @@ fn rustc(root: &Path, target: &Target, dest: &Path, deps: &Path, verbose: bool) let rustc = prepare_rustc(root, target, *crate_type, dest, deps); - try!((if verbose { + try!(if verbose { rustc.exec().map_err(|err| { log!(5, "exec failed; error={}", err.description()); human(err) @@ -70,7 +69,7 @@ fn rustc(root: &Path, target: &Target, dest: &Path, deps: &Path, verbose: bool) log!(5, "exec_with_output failed; error={}", err.description()); human(err) }) - })); + }); } Ok(()) diff --git a/src/cargo/sources/git/utils.rs b/src/cargo/sources/git/utils.rs index f8f9f5954..c1fbc4edf 100644 --- a/src/cargo/sources/git/utils.rs +++ b/src/cargo/sources/git/utils.rs @@ -226,11 +226,11 @@ impl GitCheckout { fn clone_repo(&self) -> CargoResult<()> { let dirname = Path::new(self.location.dirname()); - try!(mkdir_recursive(&dirname, UserDir).map_err(|e| + try!(mkdir_recursive(&dirname, UserDir).map_err(|_| box_error(format!("Couldn't mkdir {}", Path::new(self.location.dirname()).display())))); if self.location.exists() { - try!(rmdir_recursive(&self.location).map_err(|e| + try!(rmdir_recursive(&self.location).map_err(|_| box_error(format!("Couldn't rmdir {}", Path::new(&self.location).display())))); } @@ -267,7 +267,7 @@ fn git_inherit(path: &Path, str: String) -> CargoResult<()> { } fn git_output(path: &Path, str: String) -> CargoResult { - let output = try!(git(path, str.as_slice()).exec_with_output().map_err(|err| + let output = try!(git(path, str.as_slice()).exec_with_output().map_err(|_| box_error(format!("Executing `git {}` failed", str)))); Ok(to_str(output.output.as_slice()).as_slice().trim_right().to_str()) diff --git a/src/cargo/sources/path.rs b/src/cargo/sources/path.rs index 918027469..7aa292f18 100644 --- a/src/cargo/sources/path.rs +++ b/src/cargo/sources/path.rs @@ -40,7 +40,7 @@ impl PathSource { log!(5, "get_root_package; source={}", self); if !self.updated { - return Err(simple_human("source has not been updated")) + return Err(box_error("source has not been updated")) } match self.packages.as_slice().head() { diff --git a/src/cargo/util/errors.rs b/src/cargo/util/errors.rs index 833cd014a..8c9187d4f 100644 --- a/src/cargo/util/errors.rs +++ b/src/cargo/util/errors.rs @@ -21,6 +21,7 @@ pub trait CargoError { } } + impl Show for Box { fn fmt(&self, f: &mut Formatter) -> fmt::Result { try!(write!(f, "{}", self.description())); @@ -67,6 +68,7 @@ impl CargoError for TomlError { } pub struct ProcessError { + pub msg: String, pub command: String, pub exit: Option, pub output: Option, @@ -90,7 +92,7 @@ impl CargoError for ProcessError { Some(ExitStatus(i)) | Some(ExitSignal(i)) => i.to_str(), None => "never executed".to_str() }; - format!("Executing `{}` failed (status={})", self.command, exit) + format!("{} (status={})", self.msg, exit) } fn detail(&self) -> Option { @@ -102,7 +104,7 @@ impl CargoError for ProcessError { } } -struct ConcreteCargoError { +pub struct ConcreteCargoError { description: String, detail: Option, cause: Option>, @@ -160,6 +162,7 @@ impl CliError { pub fn process_error(msg: S, command: &Command, status: Option<&ProcessExit>, output: Option<&ProcessOutput>) -> ProcessError { ProcessError { + msg: msg.as_slice().to_str(), command: command.to_str(), exit: status.map(|o| o.clone()), output: output.map(|o| o.clone()), diff --git a/src/cargo/util/process_builder.rs b/src/cargo/util/process_builder.rs index 6adede8eb..251cc9773 100644 --- a/src/cargo/util/process_builder.rs +++ b/src/cargo/util/process_builder.rs @@ -3,7 +3,7 @@ use std::fmt::{Show,Formatter}; use std::os; use std::path::Path; use std::io::process::{Command,ProcessOutput,InheritFd}; -use util::{CargoResult, CargoError, ProcessError, process_error, box_error}; +use util::{ProcessError, process_error}; use std::collections::HashMap; #[deriving(Clone,PartialEq)] @@ -74,7 +74,7 @@ impl ProcessBuilder { let msg = || format!("Could not execute process `{}`", self.debug_string()); - let exit = try!(command.status().map_err(|e| process_error(msg(), &command, None, None))); + let exit = try!(command.status().map_err(|_| process_error(msg(), &command, None, None))); if exit.success() { Ok(()) @@ -89,7 +89,7 @@ impl ProcessBuilder { let msg = || format!("Could not execute process `{}`", self.debug_string()); - let output = try!(command.output().map_err(|e| process_error(msg(), &command, None, None))); + let output = try!(command.output().map_err(|_| process_error(msg(), &command, None, None))); if output.status.success() { Ok(output) diff --git a/tests/support/mod.rs b/tests/support/mod.rs index 552852a3d..621b4481f 100644 --- a/tests/support/mod.rs +++ b/tests/support/mod.rs @@ -10,7 +10,7 @@ use std::vec::Vec; use std::fmt::Show; use ham = hamcrest; use cargo::core::shell; -use cargo::util::{process,ProcessBuilder,CargoError}; +use cargo::util::{process,ProcessBuilder}; use cargo::util::ProcessError; pub mod paths; diff --git a/tests/test_cargo_compile.rs b/tests/test_cargo_compile.rs index 52635b4d3..e096df9b2 100644 --- a/tests/test_cargo_compile.rs +++ b/tests/test_cargo_compile.rs @@ -64,7 +64,7 @@ test!(cargo_compile_with_invalid_code { assert_that(p.cargo_process("cargo-compile"), execs() .with_status(101) - .with_stderr(format!("src/foo.rs:1:1: 1:8 error: expected item but found `invalid`\nsrc/foo.rs:1 invalid rust code!\n ^~~~~~~\nExecuting `rustc 'src/foo.rs' '--crate-type' 'bin' '--out-dir' '{}' '-L' '{}'` failed (status=101)", target.display(), target.join("deps").display()).as_slice())); + .with_stderr(format!("src/foo.rs:1:1: 1:8 error: expected item but found `invalid`\nsrc/foo.rs:1 invalid rust code!\n ^~~~~~~\nCould not execute process `rustc src/foo.rs --crate-type bin --out-dir {} -L {}` (status=101)", target.display(), target.join("deps").display()).as_slice())); }) test!(cargo_compile_with_warnings_in_the_root_package { diff --git a/tests/test_cargo_compile_git_deps.rs b/tests/test_cargo_compile_git_deps.rs index 117b7edc7..2e57b76b9 100644 --- a/tests/test_cargo_compile_git_deps.rs +++ b/tests/test_cargo_compile_git_deps.rs @@ -3,7 +3,7 @@ use std::io::File; use support::{ProjectBuilder, ResultTest, project, execs, main_file, paths}; use hamcrest::{assert_that,existing_file}; use cargo; -use cargo::util::{CargoResult, ProcessError, process}; +use cargo::util::{ProcessError, process}; fn setup() { }