@@ -378,7 +378,26 @@ fn registry(
378378 token : token_config,
379379 index : index_config,
380380 } = registry_configuration ( config, registry. clone ( ) ) ?;
381- let token = token. or ( token_config) ;
381+ let token = match ( & index, & token, & token_config) {
382+ // No token.
383+ ( None , None , None ) => {
384+ if validate_token {
385+ bail ! ( "no upload token found, please run `cargo login` or pass `--token`" ) ;
386+ }
387+ None
388+ }
389+ // Token on command-line.
390+ ( _, Some ( _) , _) => token,
391+ // Token in config, no --index, loading from config is OK for crates.io.
392+ ( None , None , Some ( _) ) => token_config,
393+ // --index, no --token
394+ ( Some ( _) , None , _) => {
395+ if validate_token {
396+ bail ! ( "command-line argument --index requires --token to be specified" )
397+ }
398+ None
399+ }
400+ } ;
382401 let sid = get_source_id ( config, index_config. or ( index) , registry) ?;
383402 if !sid. is_remote_registry ( ) {
384403 bail ! (
@@ -408,9 +427,6 @@ fn registry(
408427 . ok_or_else ( || format_err ! ( "{} does not support API commands" , sid) ) ?
409428 } ;
410429 let handle = http_handle ( config) ?;
411- if validate_token && token. is_none ( ) {
412- bail ! ( "no upload token found, please run `cargo login`" ) ;
413- } ;
414430 Ok ( ( Registry :: new_handle ( api_host, token, handle) , sid) )
415431}
416432
0 commit comments