Avoid using panic! outside of tests (#121)

Don't panic.
This commit is contained in:
Casey Rodarmor 2016-11-15 20:39:56 -08:00 committed by GitHub
parent d11e679e4b
commit e628378dbb
2 changed files with 15 additions and 10 deletions

View File

@ -31,12 +31,12 @@ enum UseColor {
} }
impl UseColor { impl UseColor {
fn from_argument(use_color: &str) -> UseColor { fn from_argument(use_color: &str) -> Option<UseColor> {
match use_color { match use_color {
"auto" => UseColor::Auto, "auto" => Some(UseColor::Auto),
"always" => UseColor::Always, "always" => Some(UseColor::Always),
"never" => UseColor::Never, "never" => Some(UseColor::Never),
_ => panic!("Invalid argument to --color. This is a bug in just."), _ => None,
} }
} }
@ -140,7 +140,10 @@ pub fn app() {
.get_matches(); .get_matches();
let use_color_argument = matches.value_of("color").expect("--color had no value"); let use_color_argument = matches.value_of("color").expect("--color had no value");
let use_color = UseColor::from_argument(use_color_argument); let use_color = match UseColor::from_argument(use_color_argument) {
Some(use_color) => use_color,
None => die!("Invalid argument to --color. This is a bug in just."),
};
let justfile_option = matches.value_of("justfile"); let justfile_option = matches.value_of("justfile");
let working_directory_option = matches.value_of("working-directory"); let working_directory_option = matches.value_of("working-directory");

View File

@ -280,12 +280,14 @@ impl<'a> Recipe<'a> {
) -> Result<(), RunError<'a>> { ) -> Result<(), RunError<'a>> {
let argument_map = self.parameters.iter().enumerate() let argument_map = self.parameters.iter().enumerate()
.map(|(i, parameter)| if i < arguments.len() { .map(|(i, parameter)| if i < arguments.len() {
(parameter.name, arguments[i]) Ok((parameter.name, arguments[i]))
} else if let Some(ref default) = parameter.default { } else if let Some(ref default) = parameter.default {
(parameter.name, default.as_str()) Ok((parameter.name, default.as_str()))
} else { } else {
panic!("Recipe.run: missing parameter without default. This is a bug in just."); Err(RunError::InternalError{
}).collect(); message: "missing parameter without default".to_string()
})
}).collect::<Result<Vec<_>, _>>()?.into_iter().collect();
let mut evaluator = Evaluator { let mut evaluator = Evaluator {
evaluated: empty(), evaluated: empty(),