Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Some tweaks to main.rs for parity as a library #8370

Merged
merged 3 commits into from
Apr 13, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 14 additions & 19 deletions parity/configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,16 +95,14 @@ pub struct Execute {
#[derive(Debug, PartialEq)]
pub struct Configuration {
pub args: Args,
pub spec_name_override: Option<String>,
}

impl Configuration {
pub fn parse<S: AsRef<str>>(command: &[S], spec_name_override: Option<String>) -> Result<Self, ArgsError> {
pub fn parse<S: AsRef<str>>(command: &[S]) -> Result<Self, ArgsError> {
let args = Args::parse(command)?;

let config = Configuration {
args: args,
spec_name_override: spec_name_override,
};

Ok(config)
Expand Down Expand Up @@ -462,9 +460,7 @@ impl Configuration {
}

fn chain(&self) -> Result<SpecType, String> {
let name = if let Some(ref s) = self.spec_name_override {
s.clone()
} else if self.args.flag_testnet {
let name = if self.args.flag_testnet {
"testnet".to_owned()
} else {
self.args.arg_chain.clone()
Expand Down Expand Up @@ -1264,7 +1260,6 @@ mod tests {
fn parse(args: &[&str]) -> Configuration {
Configuration {
args: Args::parse_without_config(args).unwrap(),
spec_name_override: None,
}
}

Expand Down Expand Up @@ -1844,7 +1839,7 @@ mod tests {
let filename = tempdir.path().join("peers");
File::create(&filename).unwrap().write_all(b" \n\t\n").unwrap();
let args = vec!["parity", "--reserved-peers", filename.to_str().unwrap()];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
assert!(conf.init_reserved_nodes().is_ok());
}

Expand All @@ -1854,7 +1849,7 @@ mod tests {
let filename = tempdir.path().join("peers_comments");
File::create(&filename).unwrap().write_all(b"# Sample comment\nenode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@172.0.0.1:30303\n").unwrap();
let args = vec!["parity", "--reserved-peers", filename.to_str().unwrap()];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
let reserved_nodes = conf.init_reserved_nodes();
assert!(reserved_nodes.is_ok());
assert_eq!(reserved_nodes.unwrap().len(), 1);
Expand All @@ -1863,7 +1858,7 @@ mod tests {
#[test]
fn test_dev_preset() {
let args = vec!["parity", "--config", "dev"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_settings.chain, "dev");
Expand All @@ -1877,7 +1872,7 @@ mod tests {
#[test]
fn test_mining_preset() {
let args = vec!["parity", "--config", "mining"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_conf.min_peers, 50);
Expand All @@ -1899,7 +1894,7 @@ mod tests {
#[test]
fn test_non_standard_ports_preset() {
let args = vec!["parity", "--config", "non-standard-ports"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_settings.network_port, 30305);
Expand All @@ -1912,7 +1907,7 @@ mod tests {
#[test]
fn test_insecure_preset() {
let args = vec!["parity", "--config", "insecure"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.update_policy.require_consensus, false);
Expand All @@ -1932,7 +1927,7 @@ mod tests {
#[test]
fn test_dev_insecure_preset() {
let args = vec!["parity", "--config", "dev-insecure"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_settings.chain, "dev");
Expand All @@ -1955,7 +1950,7 @@ mod tests {
#[test]
fn test_override_preset() {
let args = vec!["parity", "--config", "mining", "--min-peers=99"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_conf.min_peers, 99);
Expand Down Expand Up @@ -2078,7 +2073,7 @@ mod tests {
#[test]
fn should_respect_only_max_peers_and_default() {
let args = vec!["parity", "--max-peers=50"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_conf.min_peers, 25);
Expand All @@ -2091,7 +2086,7 @@ mod tests {
#[test]
fn should_respect_only_max_peers_less_than_default() {
let args = vec!["parity", "--max-peers=5"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_conf.min_peers, 5);
Expand All @@ -2104,7 +2099,7 @@ mod tests {
#[test]
fn should_respect_only_min_peers_and_default() {
let args = vec!["parity", "--min-peers=5"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_conf.min_peers, 5);
Expand All @@ -2117,7 +2112,7 @@ mod tests {
#[test]
fn should_respect_only_min_peers_and_greater_than_default() {
let args = vec!["parity", "--min-peers=500"];
let conf = Configuration::parse(&args, None).unwrap();
let conf = Configuration::parse(&args).unwrap();
match conf.into_command().unwrap().cmd {
Cmd::Run(c) => {
assert_eq!(c.net_conf.min_peers, 500);
Expand Down
34 changes: 26 additions & 8 deletions parity/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ fn print_hash_of(maybe_file: Option<String>) -> Result<String, String> {
}
}

enum PostExecutionAction {
pub enum PostExecutionAction {
Print(String),
Restart(Option<String>),
Quit,
Expand Down Expand Up @@ -181,9 +181,10 @@ fn execute(command: Execute, can_restart: bool) -> Result<PostExecutionAction, S
}
}

fn start(can_restart: bool) -> Result<PostExecutionAction, String> {
let args: Vec<String> = env::args().collect();
let conf = Configuration::parse(&args, take_spec_name_override()).unwrap_or_else(|e| e.exit());
fn start(mut args: Vec<String>) -> Result<PostExecutionAction, String> {
args.insert(0, "parity".to_owned());
let conf = Configuration::parse(&args).unwrap_or_else(|e| e.exit());
let can_restart = conf.args.flag_can_restart;

let deprecated = find_deprecated(&conf.args);
for d in deprecated {
Expand Down Expand Up @@ -277,7 +278,7 @@ const PLEASE_RESTART_EXIT_CODE: i32 = 69;

// Run our version of parity.
// Returns the exit error code.
fn main_direct(can_restart: bool) -> i32 {
fn main_direct(force_can_restart: bool) -> i32 {
global_init();
let mut alt_mains = HashMap::new();
sync_main(&mut alt_mains);
Expand All @@ -286,7 +287,25 @@ fn main_direct(can_restart: bool) -> i32 {
f();
0
} else {
match start(can_restart) {
let mut args = std::env::args().skip(1).collect::<Vec<_>>();
if force_can_restart && !args.iter().any(|arg| arg == "--can-restart") {
args.push("--can-restart".to_owned());
}

if let Some(spec_override) = take_spec_name_override() {
args.retain(|f| f != "--testnet");
args.retain(|f| !f.starts_with("--chain="));
while let Some(pos) = args.iter().position(|a| a == "--chain") {
if args.len() > pos + 1 {
args.remove(pos + 1);
}
args.remove(pos);
}
args.push("--chain".to_owned());
args.push(spec_override);
}

match start(args) {
Ok(result) => match result {
PostExecutionAction::Print(s) => { println!("{}", s); 0 },
PostExecutionAction::Restart(spec_name_override) => {
Expand Down Expand Up @@ -366,7 +385,6 @@ fn main() {
} else {
trace_main!("Running direct");
// Otherwise, we're presumably running the version we want. Just run and fall-through.
let can_restart = std::env::args().any(|arg| arg == "--can-restart");
process::exit(main_direct(can_restart));
process::exit(main_direct(false));
}
}