From 245c634d274ea3d001da091ebdab780544681998 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 24 Nov 2014 21:50:14 -0800 Subject: [PATCH] Print the right URL for `cargo login` Closes #968 --- src/bin/cargo.rs | 3 +-- src/bin/login.rs | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/bin/cargo.rs b/src/bin/cargo.rs index 40d459b9b86..2598bf340a5 100644 --- a/src/bin/cargo.rs +++ b/src/bin/cargo.rs @@ -3,8 +3,7 @@ extern crate serialize; #[phase(plugin, link)] extern crate log; - -extern crate cargo; +#[phase(plugin, link)] extern crate cargo; use std::collections::TreeSet; use std::os; diff --git a/src/bin/login.rs b/src/bin/login.rs index ad4c4bbc48b..7e9a3c9a183 100644 --- a/src/bin/login.rs +++ b/src/bin/login.rs @@ -1,9 +1,9 @@ use std::io; use cargo::ops; -use cargo::core::{MultiShell}; +use cargo::core::{MultiShell, SourceId, Source}; use cargo::sources::RegistrySource; -use cargo::util::{CliResult, CliError}; +use cargo::util::{CliResult, CliError, Config}; #[deriving(Decodable)] struct Options { @@ -30,12 +30,20 @@ pub fn execute(options: Options, shell: &mut MultiShell) -> CliResult let token = match options.arg_token.clone() { Some(token) => token, None => { - let default = RegistrySource::url().unwrap().to_string(); - let host = options.flag_host.unwrap_or(default); - println!("please visit {}/me and paste the API Token below", host); - try!(io::stdin().read_line().map_err(|e| { - CliError::from_boxed(box e, 101) - })) + let err = (|| { + let config = try!(Config::new(shell, None, None)); + let src = try!(SourceId::for_central()); + let mut src = RegistrySource::new(&src, &config); + try!(src.update()); + let config = try!(src.config()); + let host = options.flag_host.clone().unwrap_or(config.api); + println!("please visit {}me and paste the API Token below", + host); + let line = try!(io::stdin().read_line()); + Ok(line) + })(); + + try!(err.map_err(|e| CliError::from_boxed(e, 101))) } };