solana-install-init: --pubkey is no longer required on platforms without a default update manifest

This commit is contained in:
Michael Vines
2020-03-17 20:03:58 -07:00
parent ad06354a18
commit 7636a0521f

View File

@ -2,8 +2,10 @@
extern crate lazy_static;
use clap::{crate_description, crate_name, App, AppSettings, Arg, ArgMatches, SubCommand};
use solana_clap_utils::input_validators::{is_pubkey, is_url};
use solana_sdk::pubkey::Pubkey;
use solana_clap_utils::{
input_parsers::pubkey_of,
input_validators::{is_pubkey, is_url},
};
mod build_env;
mod command;
@ -53,6 +55,30 @@ pub fn explicit_release_of(
})
}
fn handle_init(matches: &ArgMatches<'_>, config_file: &str) -> Result<(), String> {
let json_rpc_url = matches.value_of("json_rpc_url").unwrap();
let update_manifest_pubkey = pubkey_of(&matches, "update_manifest_pubkey");
let data_dir = matches.value_of("data_dir").unwrap();
let no_modify_path = matches.is_present("no_modify_path");
let explicit_release = explicit_release_of(&matches, "explicit_release");
if update_manifest_pubkey.is_none() && explicit_release.is_none() {
Err(format!(
"Please specify the release to install for {}. See --help for more",
build_env::TARGET
))
} else {
command::init(
config_file,
data_dir,
json_rpc_url,
&update_manifest_pubkey.unwrap_or_default(),
no_modify_path,
explicit_release,
)
}
}
pub fn main() -> Result<(), String> {
solana_logger::setup();
@ -111,7 +137,6 @@ pub fn main() -> Result<(), String> {
.long("pubkey")
.value_name("PUBKEY")
.takes_value(true)
.required(true)
.validator(is_pubkey)
.help("Public key of the update manifest"),
)
@ -121,7 +146,7 @@ pub fn main() -> Result<(), String> {
.index(1)
.conflicts_with_all(&["json_rpc_url", "update_manifest_pubkey"])
.validator(is_explicit_release)
.help("The exact version to install. Either a semver or release channel name"),
.help("The release version or channel to install"),
),
)
.subcommand(
@ -206,26 +231,7 @@ pub fn main() -> Result<(), String> {
let config_file = matches.value_of("config_file").unwrap();
match matches.subcommand() {
("init", Some(matches)) => {
let json_rpc_url = matches.value_of("json_rpc_url").unwrap();
let update_manifest_pubkey = matches
.value_of("update_manifest_pubkey")
.unwrap()
.parse::<Pubkey>()
.unwrap();
let data_dir = matches.value_of("data_dir").unwrap();
let no_modify_path = matches.is_present("no_modify_path");
let explicit_release = explicit_release_of(&matches, "explicit_release");
command::init(
config_file,
data_dir,
json_rpc_url,
&update_manifest_pubkey,
no_modify_path,
explicit_release,
)
}
("init", Some(matches)) => handle_init(&matches, &config_file),
("info", Some(matches)) => {
let local_info_only = matches.is_present("local_info_only");
command::info(config_file, local_info_only).map(|_| ())
@ -309,7 +315,6 @@ pub fn main_init() -> Result<(), String> {
.long("pubkey")
.value_name("PUBKEY")
.takes_value(true)
.required(true)
.validator(is_pubkey)
.help("Public key of the update manifest"),
)
@ -319,28 +324,10 @@ pub fn main_init() -> Result<(), String> {
.index(1)
.conflicts_with_all(&["json_rpc_url", "update_manifest_pubkey"])
.validator(is_explicit_release)
.help("The exact version to install. Updates will not be available if this argument is used"),
.help("The release version or channel to install"),
)
.get_matches();
let config_file = matches.value_of("config_file").unwrap();
let json_rpc_url = matches.value_of("json_rpc_url").unwrap();
let update_manifest_pubkey = matches
.value_of("update_manifest_pubkey")
.unwrap()
.parse::<Pubkey>()
.unwrap();
let data_dir = matches.value_of("data_dir").unwrap();
let no_modify_path = matches.is_present("no_modify_path");
let explicit_release = explicit_release_of(&matches, "explicit_release");
command::init(
config_file,
data_dir,
json_rpc_url,
&update_manifest_pubkey,
no_modify_path,
explicit_release,
)
handle_init(&matches, &config_file)
}