Add a fmt command that uses the Fuchsia toolchain Change-Id: I6874a5a6c6ad2f699fa24d72944a045e0a86e188
diff --git a/src/lib.rs b/src/lib.rs index c4cb676..b9b74a9 100644 --- a/src/lib.rs +++ b/src/lib.rs
@@ -449,9 +449,9 @@ fs::canonicalize(std::env::current_exe()?)? }; - let mut runner_args = vec![ - fargo_path.to_str().ok_or_else(|| err_msg("unable to convert path to utf8 encoding"))?, - ]; + let mut runner_args = vec![fargo_path + .to_str() + .ok_or_else(|| err_msg("unable to convert path to utf8 encoding"))?]; if options.verbose { runner_args.push("-v"); @@ -508,6 +508,21 @@ } } +fn format_project(manifest_path: Option<PathBuf>) -> Result<(), Error> { + let mut cmd = Command::new(cargo_path()?); + if let Some(ref manifest_path) = manifest_path { + let parent = + manifest_path.parent().expect(&format!("Can't get parent of {:#?}", manifest_path)); + cmd.current_dir(parent); + } + cmd.arg(FORMAT); + let cargo_status = cmd.status()?; + if !cargo_status.success() { + bail!("cargo exited with status {:?}", cargo_status,); + } + Ok(()) +} + /// Runs the cargo tool configured to target Fuchsia. When used as a library, /// the runner options must contain the path to fargo or some other program /// that implements the `run-on-target` subcommand in a way compatible with @@ -531,6 +546,7 @@ /// disable_cross: false, /// manifest_path: None, /// cmx_path: None, +/// app_name: None, /// }, /// "help", /// &[], @@ -731,6 +747,8 @@ static MAKE_PACKAGE: &str = "make-package"; static BINARY_PATH: &str = "binary-path"; +static FORMAT: &str = "fmt"; + /// Arguments which configure the startup of an emulator. /// /// Used when `start`ing or `restart`ing. @@ -1138,6 +1156,9 @@ ) .about("Make a Fuchsia package from an unstripped binary"), ) + .subcommand( + SubCommand::with_name(FORMAT).about("Run cargo fmt using the Fuchsia toolchain"), + ) .get_matches(); let verbose = global_matches.is_present("verbose"); @@ -1503,5 +1524,11 @@ return Ok(()); } + if let Some(fmt_matches) = global_matches.subcommand_matches(FORMAT) { + let manifest_path = convert_manifest_path(&fmt_matches.value_of(MANIFEST_PATH)); + format_project(manifest_path)?; + return Ok(()); + } + Ok(()) }