Skip to content

Commit 401f114

Browse files
authored
Merge pull request #436 from alexcrichton/error
Replace internal `Error` with `failure::Error`
2 parents 7796ecb + 11beac3 commit 401f114

File tree

10 files changed

+69
-326
lines changed

10 files changed

+69
-326
lines changed

src/build.rs

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
33
use child;
44
use emoji;
5-
use error::Error;
6-
use failure::ResultExt;
5+
use failure::{Error, ResultExt};
76
use progressbar::Step;
87
use slog::Logger;
98
use std::path::Path;
@@ -12,27 +11,22 @@ use std::str;
1211
use PBAR;
1312

1413
/// Ensure that `rustc` is present and that it is >= 1.30.0
15-
pub fn check_rustc_version(step: &Step) -> Result<String, failure::Error> {
14+
pub fn check_rustc_version(step: &Step) -> Result<String, Error> {
1615
let msg = format!("{}Checking `rustc` version...", emoji::CRAB);
1716
PBAR.step(step, &msg);
1817
let local_minor_version = rustc_minor_version();
1918
match local_minor_version {
2019
Some(mv) => {
2120
if mv < 30 {
22-
return Err(Error::RustcVersion {
23-
message: format!(
24-
"Your version of Rust, '1.{}', is not supported. Please install Rust version 1.30.0 or higher.",
25-
mv.to_string()
26-
),
27-
local_minor_version: mv.to_string(),
28-
}.into())
21+
bail!(
22+
"Your version of Rust, '1.{}', is not supported. Please install Rust version 1.30.0 or higher.",
23+
mv.to_string()
24+
)
2925
} else {
30-
Ok(mv.to_string())
26+
Ok(mv.to_string())
3127
}
32-
},
33-
None => Err(Error::RustcMissing {
34-
message: "We can't figure out what your Rust version is- which means you might not have Rust installed. Please install Rust version 1.30.0 or higher.".to_string(),
35-
}.into()),
28+
},
29+
None => bail!("We can't figure out what your Rust version is- which means you might not have Rust installed. Please install Rust version 1.30.0 or higher."),
3630
}
3731
}
3832

@@ -57,7 +51,7 @@ fn rustc_minor_version() -> Option<u32> {
5751

5852
/// Ensure that `rustup` has the `wasm32-unknown-unknown` target installed for
5953
/// current toolchain
60-
pub fn rustup_add_wasm_target(log: &Logger, step: &Step) -> Result<(), failure::Error> {
54+
pub fn rustup_add_wasm_target(log: &Logger, step: &Step) -> Result<(), Error> {
6155
let msg = format!("{}Adding WASM target...", emoji::TARGET);
6256
PBAR.step(step, &msg);
6357
let mut cmd = Command::new("rustup");
@@ -68,12 +62,7 @@ pub fn rustup_add_wasm_target(log: &Logger, step: &Step) -> Result<(), failure::
6862
}
6963

7064
/// Run `cargo build` targetting `wasm32-unknown-unknown`.
71-
pub fn cargo_build_wasm(
72-
log: &Logger,
73-
path: &Path,
74-
debug: bool,
75-
step: &Step,
76-
) -> Result<(), failure::Error> {
65+
pub fn cargo_build_wasm(log: &Logger, path: &Path, debug: bool, step: &Step) -> Result<(), Error> {
7766
let msg = format!("{}Compiling to WASM...", emoji::CYCLONE);
7867
PBAR.step(step, &msg);
7968
let mut cmd = Command::new("cargo");
@@ -87,11 +76,7 @@ pub fn cargo_build_wasm(
8776
}
8877

8978
/// Run `cargo build --tests` targetting `wasm32-unknown-unknown`.
90-
pub fn cargo_build_wasm_tests(
91-
log: &Logger,
92-
path: &Path,
93-
debug: bool,
94-
) -> Result<(), failure::Error> {
79+
pub fn cargo_build_wasm_tests(log: &Logger, path: &Path, debug: bool) -> Result<(), Error> {
9580
let mut cmd = Command::new("cargo");
9681
cmd.current_dir(path).arg("build").arg("--tests");
9782
if !debug {

src/child.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
//! This module helps us ensure that all child processes that we spawn get
44
//! properly logged and their output is logged as well.
55
6-
use error::Error;
7-
use failure;
6+
use failure::Error;
87
use slog::Logger;
98
use std::{
109
io::{self, Read},
@@ -120,7 +119,7 @@ pub fn run(
120119
logger: &Logger,
121120
mut command: process::Command,
122121
command_name: &str,
123-
) -> Result<String, failure::Error> {
122+
) -> Result<String, Error> {
124123
info!(logger, "Running {:?}", command);
125124

126125
let mut child = command
@@ -171,6 +170,7 @@ pub fn run(
171170
if exit.success() {
172171
return Ok(stdout);
173172
} else {
174-
return Err(Error::cli(command_name, stdout.into(), stderr.into(), exit).into());
173+
drop((stdout, stderr));
174+
bail!("failed to execute `{}`: exited with {}", command_name, exit)
175175
}
176176
}

src/command/build.rs

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use bindgen;
55
use build;
66
use command::utils::{create_pkg_dir, set_crate_path};
77
use emoji;
8-
use error::Error;
8+
use failure::Error;
99
use indicatif::HumanDuration;
1010
use lockfile::Lockfile;
1111
use manifest;
@@ -59,7 +59,7 @@ impl FromStr for BuildMode {
5959
"no-install" => Ok(BuildMode::Noinstall),
6060
"normal" => Ok(BuildMode::Normal),
6161
"force" => Ok(BuildMode::Force),
62-
_ => Err(Error::crate_config(&format!("Unknown build mode: {}", s))),
62+
_ => bail!("Unknown build mode: {}", s),
6363
}
6464
}
6565
}
@@ -98,11 +98,11 @@ pub struct BuildOptions {
9898
pub out_dir: String,
9999
}
100100

101-
type BuildStep = fn(&mut Build, &Step, &Logger) -> Result<(), failure::Error>;
101+
type BuildStep = fn(&mut Build, &Step, &Logger) -> Result<(), Error>;
102102

103103
impl Build {
104104
/// Construct a build command from the given options.
105-
pub fn try_from_opts(build_opts: BuildOptions) -> Result<Self, failure::Error> {
105+
pub fn try_from_opts(build_opts: BuildOptions) -> Result<Self, Error> {
106106
let crate_path = set_crate_path(build_opts.path)?;
107107
let crate_data = manifest::CrateData::new(&crate_path)?;
108108
let out_dir = crate_path.join(PathBuf::from(build_opts.out_dir));
@@ -128,7 +128,7 @@ impl Build {
128128
}
129129

130130
/// Execute this `Build` command.
131-
pub fn run(&mut self, log: &Logger) -> Result<(), failure::Error> {
131+
pub fn run(&mut self, log: &Logger) -> Result<(), Error> {
132132
let process_steps = Build::get_process_steps(&self.mode);
133133

134134
let mut step_counter = Step::new(process_steps.len());
@@ -199,33 +199,29 @@ impl Build {
199199
}
200200
}
201201

202-
fn step_check_rustc_version(
203-
&mut self,
204-
step: &Step,
205-
log: &Logger,
206-
) -> Result<(), failure::Error> {
202+
fn step_check_rustc_version(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
207203
info!(&log, "Checking rustc version...");
208204
let version = build::check_rustc_version(step)?;
209205
let msg = format!("rustc version is {}.", version);
210206
info!(&log, "{}", &msg);
211207
Ok(())
212208
}
213209

214-
fn step_check_crate_config(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
210+
fn step_check_crate_config(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
215211
info!(&log, "Checking crate configuration...");
216212
self.crate_data.check_crate_config(step)?;
217213
info!(&log, "Crate is correctly configured.");
218214
Ok(())
219215
}
220216

221-
fn step_add_wasm_target(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
217+
fn step_add_wasm_target(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
222218
info!(&log, "Adding wasm-target...");
223219
build::rustup_add_wasm_target(log, step)?;
224220
info!(&log, "Adding wasm-target was successful.");
225221
Ok(())
226222
}
227223

228-
fn step_build_wasm(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
224+
fn step_build_wasm(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
229225
info!(&log, "Building wasm...");
230226
build::cargo_build_wasm(log, &self.crate_path, self.debug, step)?;
231227

@@ -241,14 +237,14 @@ impl Build {
241237
Ok(())
242238
}
243239

244-
fn step_create_dir(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
240+
fn step_create_dir(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
245241
info!(&log, "Creating a pkg directory...");
246242
create_pkg_dir(&self.out_dir, step)?;
247243
info!(&log, "Created a pkg directory at {:#?}.", &self.crate_path);
248244
Ok(())
249245
}
250246

251-
fn step_create_json(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
247+
fn step_create_json(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
252248
info!(&log, "Writing a package.json...");
253249
self.crate_data.write_package_json(
254250
&self.out_dir,
@@ -265,18 +261,14 @@ impl Build {
265261
Ok(())
266262
}
267263

268-
fn step_copy_readme(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
264+
fn step_copy_readme(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
269265
info!(&log, "Copying readme from crate...");
270266
readme::copy_from_crate(&self.crate_path, &self.out_dir, step)?;
271267
info!(&log, "Copied readme from crate to {:#?}.", &self.out_dir);
272268
Ok(())
273269
}
274270

275-
fn step_install_wasm_bindgen(
276-
&mut self,
277-
step: &Step,
278-
log: &Logger,
279-
) -> Result<(), failure::Error> {
271+
fn step_install_wasm_bindgen(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
280272
info!(&log, "Identifying wasm-bindgen dependency...");
281273
let lockfile = Lockfile::new(&self.crate_data)?;
282274
let bindgen_version = lockfile.require_wasm_bindgen()?;
@@ -298,7 +290,7 @@ impl Build {
298290
Ok(())
299291
}
300292

301-
fn step_run_wasm_bindgen(&mut self, step: &Step, log: &Logger) -> Result<(), failure::Error> {
293+
fn step_run_wasm_bindgen(&mut self, step: &Step, log: &Logger) -> Result<(), Error> {
302294
info!(&log, "Building the wasm bindings...");
303295
bindgen::wasm_bindgen_build(
304296
&self.crate_data,

src/command/mod.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@ use self::login::login;
1313
use self::pack::pack;
1414
use self::publish::{access::Access, publish};
1515
use self::test::{Test, TestOptions};
16-
use error::Error;
16+
use failure::Error;
1717
use slog::Logger;
1818
use std::path::PathBuf;
1919
use std::result;
20-
use PBAR;
2120

2221
/// The various kinds of commands that `wasm-pack` can execute.
2322
#[derive(Debug, StructOpt)]
@@ -84,7 +83,7 @@ pub enum Command {
8483
}
8584

8685
/// Run a command with the given logger!
87-
pub fn run_wasm_pack(command: Command, log: &Logger) -> result::Result<(), failure::Error> {
86+
pub fn run_wasm_pack(command: Command, log: &Logger) -> result::Result<(), Error> {
8887
// Run the correct command based off input and store the result of it so that we can clear
8988
// the progress bar then return it
9089
let status = match command {
@@ -125,19 +124,6 @@ pub fn run_wasm_pack(command: Command, log: &Logger) -> result::Result<(), failu
125124
}
126125
};
127126

128-
match status {
129-
Ok(_) => {}
130-
Err(ref e) => {
131-
error!(&log, "{}", e);
132-
for c in e.iter_chain() {
133-
if let Some(e) = c.downcast_ref::<Error>() {
134-
PBAR.error(e.error_type());
135-
break;
136-
}
137-
}
138-
}
139-
}
140-
141127
// Return the actual status of the program to the main function
142128
status
143129
}

src/command/pack.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use command::utils::{find_pkg_directory, set_crate_path};
2-
use error::Error;
2+
use failure::Error;
33
use npm;
44
use slog::Logger;
55
use std::path::PathBuf;
@@ -8,15 +8,16 @@ use PBAR;
88

99
/// Executes the 'npm pack' command on the 'pkg' directory
1010
/// which creates a tarball that can be published to the NPM registry
11-
pub fn pack(path: Option<PathBuf>, log: &Logger) -> result::Result<(), failure::Error> {
11+
pub fn pack(path: Option<PathBuf>, log: &Logger) -> result::Result<(), Error> {
1212
let crate_path = set_crate_path(path)?;
1313

1414
info!(&log, "Packing up the npm package...");
15-
let pkg_directory = find_pkg_directory(&crate_path).ok_or(Error::PkgNotFound {
16-
message: format!(
15+
let pkg_directory = find_pkg_directory(&crate_path).ok_or_else(|| {
16+
format_err!(
1717
"Unable to find the pkg directory at path {:#?}, or in a child directory of {:#?}",
18-
&crate_path, &crate_path
19-
),
18+
&crate_path,
19+
&crate_path
20+
)
2021
})?;
2122
npm::npm_pack(log, &pkg_directory.to_string_lossy())?;
2223
info!(

src/command/publish/access.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use error::Error;
1+
use failure::Error;
22
use std::fmt;
33
use std::str::FromStr;
44

@@ -19,7 +19,7 @@ impl FromStr for Access {
1919
"public" => Ok(Access::Public),
2020
"restricted" => Ok(Access::Restricted),
2121
"private" => Ok(Access::Restricted),
22-
_ => Err(Error::Unsupported { message: format!("{} is not a supported access level. See https://docs.npmjs.com/cli/access for more information on npm package access levels.", s)}),
22+
_ => bail!("{} is not a supported access level. See https://docs.npmjs.com/cli/access for more information on npm package access levels.", s),
2323
}
2424
}
2525
}

src/command/publish/mod.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pub mod access;
33

44
use self::access::Access;
55
use command::utils::{find_pkg_directory, set_crate_path};
6-
use error::Error;
6+
use failure::Error;
77
use npm;
88
use slog::Logger;
99
use std::path::PathBuf;
@@ -16,16 +16,17 @@ pub fn publish(
1616
path: Option<PathBuf>,
1717
access: Option<Access>,
1818
log: &Logger,
19-
) -> result::Result<(), failure::Error> {
19+
) -> result::Result<(), Error> {
2020
let crate_path = set_crate_path(path)?;
2121

2222
info!(&log, "Publishing the npm package...");
2323
info!(&log, "npm info located in the npm debug log");
24-
let pkg_directory = find_pkg_directory(&crate_path).ok_or(Error::PkgNotFound {
25-
message: format!(
24+
let pkg_directory = find_pkg_directory(&crate_path).ok_or_else(|| {
25+
format_err!(
2626
"Unable to find the pkg directory at path '{:#?}', or in a child directory of '{:#?}'",
27-
&crate_path, &crate_path
28-
),
27+
&crate_path,
28+
&crate_path
29+
)
2930
})?;
3031

3132
npm::npm_publish(log, &pkg_directory.to_string_lossy(), access)?;

0 commit comments

Comments
 (0)