diff --git a/src/bin/repo.rs b/src/bin/repo.rs index a9ee16b01..47ff8b7c6 100644 --- a/src/bin/repo.rs +++ b/src/bin/repo.rs @@ -134,10 +134,7 @@ impl FromStr for CliCommand { "push-tree" => Ok(CliCommand::PushTree), "cook-tree" => Ok(CliCommand::CookTree), "find" => Ok(CliCommand::Find), - _ => Err(Error::Other(format!( - "Unknown command '{}'\n{}\n", - s, REPO_HELP_STR - ))), + _ => bail_options_err!("Unknown command {:?}", s), } } } @@ -188,7 +185,10 @@ impl CliConfig { fn main() { init_config(); if let Err(e) = main_inner() { - eprintln!("{:?}", e); + match e { + Error::Options(e) => eprintln!("{}\n{}", e, REPO_HELP_STR), + e => eprintln!("{}", e), + } process::exit(1); }; } @@ -197,8 +197,7 @@ fn main_inner() -> Result<()> { let args: Vec = env::args().skip(1).collect(); if args.is_empty() || args.contains(&"--help".to_string()) || args.contains(&"-h".to_string()) { - println!("{}", REPO_HELP_STR); - process::exit(1); + bail_options_err!(""); } let (config, command, recipes) = parse_args(args)?; @@ -259,10 +258,10 @@ fn main_inner() -> Result<()> { Err(e) => { if config.cook.nonstop { if verbose { - eprintln!("{:?}", e); + eprintln!("{}", e); } if let Err(e) = handle_nonstop_fail(recipe) { - eprintln!("{:?}", e) + eprintln!("{}", e) }; } print_failed(&command, &recipe.name); @@ -417,6 +416,12 @@ fn publish_packages(recipe_names: &Vec, repo_path: &PathBuf) -> Resu run_command(command, &None) } +macro_rules! bail_options_err { + ($($arg:tt)*) => { + return Err(cookbook::Error::Options(format!($($arg)*))) + }; +} + fn parse_args(args: Vec) -> Result<(CliConfig, CliCommand, Vec)> { let mut config = CliConfig::new()?; let mut command: Option = None; @@ -433,13 +438,10 @@ fn parse_args(args: Vec) -> Result<(CliConfig, CliCommand, Vec { config.filesystem = Some({ let r = redox_installer::Config::from_file(&PathBuf::from(value)); - r.map_err(|e| Error::Other(e.to_string()))? + r.map_err(|e| Error::Other(format!("{:?}", e)))? }) } - _ => { - eprintln!("Error: Unknown flag with value: {}", arg); - process::exit(1); - } + _ => bail_options_err!("Error: Unknown flag with value: {}", arg), } } else if arg.starts_with("--category-") { // to workaround make command limit we provide this option @@ -449,18 +451,12 @@ fn parse_args(args: Vec) -> Result<(CliConfig, CliCommand, Vec override_filesystem_repo_binary = true, "--with-package-deps" => config.with_package_deps = true, "--all" => config.all = true, - _ => { - eprintln!("Error: Unknown flag: {}", arg); - process::exit(1); - } + _ => bail_options_err!("Error: Unknown flag: {}", arg), } } } else if arg.starts_with('-') { match arg.as_str() { - _ => { - eprintln!("Error: Unknown flag: {}", arg); - process::exit(1); - } + _ => bail_options_err!("Error: Unknown flag: {}", arg), } } else if command.is_none() { // The first non-flag argument is the command @@ -481,7 +477,7 @@ fn parse_args(args: Vec) -> Result<(CliConfig, CliCommand, Vec) -> Result<(CliConfig, CliCommand, Vec staged_pkg::list(""), @@ -534,9 +528,9 @@ fn parse_args(args: Vec) -> Result<(CliConfig, CliCommand, Vec write!(f, "{}", package_error), Error::Pkgar(error) => write!(f, "{}", error), - Error::Other(context) => { + Error::Other(context) | Error::Options(context) => { write!(f, "{context}") } }