From: Felix S. Klock II Date: Fri, 4 Dec 2015 21:02:09 +0000 (+0100) Subject: Change internal `getopts` so `--a=b=c` acts like `--a b=c` rather than `--a b`. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=5bb1e648cdaacfca330deed10a663606266604ea;p=rust.git Change internal `getopts` so `--a=b=c` acts like `--a b=c` rather than `--a b`. This is an adaption of https://github.com/rust-lang-nursery/getopts/commit/8ec916b86afce0a2a9100b7327b12b5ffcb2cabb including its unit test. --- diff --git a/src/libgetopts/lib.rs b/src/libgetopts/lib.rs index f7544e3f5ea..228ceb92da6 100644 --- a/src/libgetopts/lib.rs +++ b/src/libgetopts/lib.rs @@ -598,7 +598,7 @@ fn f(_x: usize) -> Vec { let mut i_arg = None; if cur.as_bytes()[1] == b'-' { let tail = &cur[2..curlen]; - let tail_eq: Vec<&str> = tail.split('=').collect(); + let tail_eq: Vec<&str> = tail.splitn(2, '=').collect(); if tail_eq.len() <= 1 { names = vec![Long(tail.to_owned())]; } else { @@ -1626,4 +1626,18 @@ fn test_short_usage() { debug!("generated: <<{}>>", generated_usage); assert_eq!(generated_usage, expected); } + + #[test] + fn test_args_with_equals() { + let args = vec!("--one".to_string(), "A=B".to_string(), + "--two=C=D".to_string()); + let opts = vec![optopt("o", "one", "One", "INFO"), + optopt("t", "two", "Two", "INFO")]; + let matches = &match getopts(&args, &opts) { + result::Result::Ok(m) => m, + result::Result::Err(e) => panic!("{}", e) + }; + assert_eq!(matches.opts_str(&["o".to_string()]).unwrap(), "A=B"); + assert_eq!(matches.opts_str(&["t".to_string()]).unwrap(), "C=D"); + } }