Skip to content

Commit e9ca663

Browse files
committed
get latest x version from parsing cargo command
1 parent 9aebb1e commit e9ca663

File tree

3 files changed

+48
-18
lines changed

3 files changed

+48
-18
lines changed

Cargo.lock

+9-8
Original file line numberDiff line numberDiff line change
@@ -4814,9 +4814,9 @@ dependencies = [
48144814

48154815
[[package]]
48164816
name = "serde"
4817-
version = "1.0.147"
4817+
version = "1.0.152"
48184818
source = "registry+https://github.com/rust-lang/crates.io-index"
4819-
checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
4819+
checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
48204820
dependencies = [
48214821
"serde_derive",
48224822
]
@@ -4833,9 +4833,9 @@ dependencies = [
48334833

48344834
[[package]]
48354835
name = "serde_derive"
4836-
version = "1.0.147"
4836+
version = "1.0.152"
48374837
source = "registry+https://github.com/rust-lang/crates.io-index"
4838-
checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
4838+
checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
48394839
dependencies = [
48404840
"proc-macro2",
48414841
"quote",
@@ -4853,9 +4853,9 @@ dependencies = [
48534853

48544854
[[package]]
48554855
name = "serde_json"
4856-
version = "1.0.85"
4856+
version = "1.0.91"
48574857
source = "registry+https://github.com/rust-lang/crates.io-index"
4858-
checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
4858+
checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
48594859
dependencies = [
48604860
"indexmap",
48614861
"itoa",
@@ -5133,9 +5133,9 @@ dependencies = [
51335133

51345134
[[package]]
51355135
name = "syn"
5136-
version = "1.0.102"
5136+
version = "1.0.107"
51375137
source = "registry+https://github.com/rust-lang/crates.io-index"
5138-
checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
5138+
checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
51395139
dependencies = [
51405140
"proc-macro2",
51415141
"quote",
@@ -5310,6 +5310,7 @@ dependencies = [
53105310
"miropt-test-tools",
53115311
"regex",
53125312
"semver",
5313+
"serde_json",
53135314
"termcolor",
53145315
"walkdir",
53155316
]

src/tools/tidy/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ lazy_static = "1"
1212
walkdir = "2"
1313
ignore = "0.4.18"
1414
semver = "1.0.14"
15+
serde_json = "1.0.91"
1516
termcolor = "1.1.3"
1617

1718
[[bin]]

src/tools/tidy/src/x_version.rs

+38-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use semver::{BuildMetadata, Prerelease, Version};
1+
use semver::Version;
2+
use serde_json::Value;
23
use std::io::ErrorKind;
34
use std::process::{Command, Stdio};
45

@@ -33,20 +34,47 @@ pub fn check(bad: &mut bool) {
3334
if output.status.success() {
3435
let version = String::from_utf8_lossy(&output.stdout);
3536
let version = Version::parse(version.trim_end()).unwrap();
36-
let expected = Version {
37-
major: 0,
38-
minor: 1,
39-
patch: 0,
40-
pre: Prerelease::new("").unwrap(),
41-
build: BuildMetadata::EMPTY,
42-
};
43-
if version < expected {
37+
38+
if let Some(expected) = get_x_wrapper_version() {
39+
if version < expected {
40+
return tidy_error!(
41+
bad,
42+
"Current version of x is {version}, but the latest version is {expected}\nConsider updating to the newer version of x by running `cargo install --path src/tools/x`"
43+
);
44+
}
45+
} else {
4446
return tidy_error!(
4547
bad,
46-
"Current version of x is {version}, but the latest version is {expected}\nConsider updating to the newer version of x by running `cargo install --path src/tools/x`"
48+
"Unable to parse the latest version of `x` at `src/tools/x/Cargo.toml`"
4749
);
4850
}
4951
} else {
5052
return tidy_error!(bad, "failed to check version of `x`: {}", output.status);
5153
}
5254
}
55+
56+
// Parse latest version out of `x` Cargo.toml
57+
fn get_x_wrapper_version() -> Option<Version> {
58+
let cmd = Command::new("cargo")
59+
.arg("metadata")
60+
.args(["--no-deps", "--format-version", "1", "--manifest-path", "src/tools/x/Cargo.toml"])
61+
.stdout(Stdio::piped())
62+
.spawn();
63+
64+
let child = match cmd {
65+
Ok(child) => child,
66+
Err(e) => {
67+
println!("failed to get version of `x`: {}", e);
68+
return None;
69+
}
70+
};
71+
72+
let cargo_output = child.wait_with_output().unwrap();
73+
let cargo_output_str =
74+
String::from_utf8(cargo_output.stdout).expect("Unable to parse `src/tools/x/Cargo.toml`");
75+
76+
let v: Value = serde_json::from_str(&cargo_output_str).unwrap();
77+
let vesrion_str = &v["packages"][0]["version"].as_str()?;
78+
79+
Some(Version::parse(vesrion_str).unwrap())
80+
}

0 commit comments

Comments
 (0)