diff --git a/Cargo.lock b/Cargo.lock index 6674a24577..6d9dd11d4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -640,7 +640,7 @@ checksum = "ba2ae6de944143141f6155a473a6b02f66c7c3f9f47316f802f80204ebfe6e12" dependencies = [ "camino", "cargo-platform", - "semver 1.0.4", + "semver 1.0.7", "serde", "serde_json", ] @@ -3960,7 +3960,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.4", + "semver 1.0.7", ] [[package]] @@ -4156,9 +4156,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.4" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" dependencies = [ "serde", ] @@ -4736,7 +4736,7 @@ dependencies = [ "num-traits", "pretty-hex", "reqwest", - "semver 1.0.4", + "semver 1.0.7", "serde", "serde_derive", "serde_json", @@ -4788,6 +4788,7 @@ dependencies = [ "console", "humantime", "indicatif", + "semver 1.0.7", "serde", "serde_json", "solana-account-decoder", @@ -4814,7 +4815,7 @@ dependencies = [ "log 0.4.14", "rayon", "reqwest", - "semver 1.0.4", + "semver 1.0.7", "serde", "serde_derive", "serde_json", @@ -5214,7 +5215,7 @@ dependencies = [ "lazy_static", "nix", "reqwest", - "semver 1.0.4", + "semver 1.0.7", "serde", "serde_yaml", "solana-clap-utils", @@ -5696,7 +5697,7 @@ dependencies = [ "num-traits", "parking_lot 0.11.2", "qstring", - "semver 1.0.4", + "semver 1.0.7", "solana-sdk", "thiserror", "uriparse", diff --git a/cli-output/Cargo.toml b/cli-output/Cargo.toml index 5cc04587ad..f9bf5e5e29 100644 --- a/cli-output/Cargo.toml +++ b/cli-output/Cargo.toml @@ -17,6 +17,7 @@ console = "0.15.0" humantime = "2.0.1" Inflector = "0.11.4" indicatif = "0.16.2" +semver = "1.0.6" serde = "1.0.130" serde_json = "1.0.72" solana-account-decoder = { path = "../account-decoder", version = "=1.9.16" } diff --git a/cli-output/src/cli_output.rs b/cli-output/src/cli_output.rs index c78e392264..26060a7253 100644 --- a/cli-output/src/cli_output.rs +++ b/cli-output/src/cli_output.rs @@ -356,6 +356,7 @@ pub enum CliValidatorsSortOrder { SkipRate, Stake, VoteAccount, + Version, } #[derive(Serialize, Deserialize)] @@ -494,6 +495,22 @@ impl fmt::Display for CliValidators { CliValidatorsSortOrder::Stake => { sorted_validators.sort_by_key(|a| a.activated_stake); } + CliValidatorsSortOrder::Version => { + sorted_validators.sort_by(|a, b| { + use std::cmp::Ordering; + let a_version = semver::Version::parse(a.version.as_str()).ok(); + let b_version = semver::Version::parse(b.version.as_str()).ok(); + match (a_version, b_version) { + (None, None) => a.version.cmp(&b.version), + (None, Some(_)) => Ordering::Less, + (Some(_), None) => Ordering::Greater, + (Some(va), Some(vb)) => match va.cmp(&vb) { + Ordering::Equal => a.activated_stake.cmp(&b.activated_stake), + ordering => ordering, + }, + } + }); + } } if self.validators_reverse_sort { diff --git a/cli/src/cluster_query.rs b/cli/src/cluster_query.rs index ebe4667385..4729e17c69 100644 --- a/cli/src/cluster_query.rs +++ b/cli/src/cluster_query.rs @@ -369,6 +369,7 @@ impl ClusterQuerySubCommands for App<'_, '_> { "root", "skip-rate", "stake", + "version", "vote-account", ]) .default_value("stake") @@ -638,6 +639,7 @@ pub fn parse_show_validators(matches: &ArgMatches<'_>) -> Result CliValidatorsSortOrder::SkipRate, "stake" => CliValidatorsSortOrder::Stake, "vote-account" => CliValidatorsSortOrder::VoteAccount, + "version" => CliValidatorsSortOrder::Version, _ => unreachable!(), }; diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 8a42c08a0f..7e92efe738 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2190,9 +2190,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.4" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" [[package]] name = "serde" @@ -2858,6 +2858,7 @@ dependencies = [ "console", "humantime", "indicatif", + "semver", "serde", "serde_json", "solana-account-decoder",