@@ -579,7 +579,9 @@ fn parse_config_arg_item(item_str: &str) -> Result<(ConfigNamePathBuf, ConfigVal
579
579
let split_candidates = item_str. as_bytes ( ) . iter ( ) . positions ( |& b| b == b'=' ) ;
580
580
let Some ( ( name, value_str) ) = split_candidates
581
581
. map ( |p| ( & item_str[ ..p] , & item_str[ p + 1 ..] ) )
582
- . map ( |( name, value) | name. parse ( ) . map ( |name| ( name, value) ) )
582
+ // Trim spaces, similarly to TOML syntax; names or values with spaces would have to be
583
+ // specified with quotes.
584
+ . map ( |( name, value) | name. trim ( ) . parse ( ) . map ( |name| ( name, value. trim ( ) ) ) )
583
585
. find_or_last ( Result :: is_ok)
584
586
. transpose ( )
585
587
. map_err ( |err| config_error_with_message ( "--config name cannot be parsed" , err) ) ?
@@ -827,21 +829,34 @@ mod tests {
827
829
assert ! ( parse_config_arg_item( "" ) . is_err( ) ) ;
828
830
assert ! ( parse_config_arg_item( "a" ) . is_err( ) ) ;
829
831
assert ! ( parse_config_arg_item( "=" ) . is_err( ) ) ;
830
- // The value parser is sensitive to leading whitespaces, which seems
831
- // good because the parsing falls back to a bare string.
832
- assert ! ( parse_config_arg_item( "a = 'b'" ) . is_err( ) ) ;
833
832
834
833
let ( name, value) = parse_config_arg_item ( "a=b" ) . unwrap ( ) ;
835
834
assert_eq ! ( name, ConfigNamePathBuf :: from_iter( [ "a" ] ) ) ;
836
835
assert_eq ! ( value. as_str( ) , Some ( "b" ) ) ;
837
836
837
+ let ( name, value) = parse_config_arg_item ( "a = b" ) . unwrap ( ) ;
838
+ assert_eq ! ( name, ConfigNamePathBuf :: from_iter( [ "a" ] ) ) ;
839
+ assert_eq ! ( value. as_str( ) , Some ( "b" ) ) ;
840
+
841
+ let ( name, value) = parse_config_arg_item ( "a = 'b'" ) . unwrap ( ) ;
842
+ assert_eq ! ( name, ConfigNamePathBuf :: from_iter( [ "a" ] ) ) ;
843
+ assert_eq ! ( value. as_str( ) , Some ( "b" ) ) ;
844
+
845
+ let ( name, value) =
846
+ parse_config_arg_item ( r#"revsets."immutable_heads()" = "none()""# ) . unwrap ( ) ;
847
+ assert_eq ! (
848
+ name,
849
+ ConfigNamePathBuf :: from_iter( [ "revsets" , "immutable_heads()" ] )
850
+ ) ;
851
+ assert_eq ! ( value. as_str( ) , Some ( "none()" ) ) ;
852
+
838
853
let ( name, value) = parse_config_arg_item ( "a=" ) . unwrap ( ) ;
839
854
assert_eq ! ( name, ConfigNamePathBuf :: from_iter( [ "a" ] ) ) ;
840
855
assert_eq ! ( value. as_str( ) , Some ( "" ) ) ;
841
856
842
857
let ( name, value) = parse_config_arg_item ( "a= " ) . unwrap ( ) ;
843
858
assert_eq ! ( name, ConfigNamePathBuf :: from_iter( [ "a" ] ) ) ;
844
- assert_eq ! ( value. as_str( ) , Some ( " " ) ) ;
859
+ assert_eq ! ( value. as_str( ) , Some ( "" ) ) ;
845
860
846
861
// This one is a bit cryptic, but b=c can be a bare string.
847
862
let ( name, value) = parse_config_arg_item ( "a=b=c" ) . unwrap ( ) ;
0 commit comments