From 9c912e4f85a490c1003586e00beabc771cccb81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Ber=C3=A1nek?= Date: Thu, 22 May 2025 08:55:04 +0200 Subject: [PATCH] Store dist manifest in JSON to improve load performance --- Cargo.lock | 1 + Cargo.toml | 1 + src/dist/manifest.rs | 66 +- .../tests/channel-rust-nightly-example.json | 142 ++ .../tests/channel-rust-nightly-example2.json | 1367 +++++++++++++++++ src/dist/manifestation.rs | 45 +- src/dist/manifestation/tests.rs | 2 +- src/dist/mod.rs | 7 +- src/test/dist.rs | 2 +- tests/suite/cli_v2.rs | 8 +- 10 files changed, 1605 insertions(+), 36 deletions(-) create mode 100644 src/dist/manifest/tests/channel-rust-nightly-example.json create mode 100644 src/dist/manifest/tests/channel-rust-nightly-example2.json diff --git a/Cargo.lock b/Cargo.lock index 975f5285a2..51b2226a20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2278,6 +2278,7 @@ dependencies = [ "scopeguard", "semver", "serde", + "serde_json", "sha2", "sharded-slab", "similar-asserts", diff --git a/Cargo.toml b/Cargo.toml index 041966b7d9..529831b1be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,6 +75,7 @@ rustls-platform-verifier = { version = "0.5", optional = true } same-file = "1" semver = "1.0" serde = { version = "1.0", features = ["derive"] } +serde_json = "1" sha2 = "0.10" sharded-slab = "0.1.1" strsim = "0.11" diff --git a/src/dist/manifest.rs b/src/dist/manifest.rs index f3c5b10afd..f961e79357 100644 --- a/src/dist/manifest.rs +++ b/src/dist/manifest.rs @@ -272,21 +272,34 @@ mod component_target { } } +fn init_and_validate(mut manifest: Manifest) -> Result { + for (from, to) in manifest.renames.iter() { + manifest.reverse_renames.insert(to.to.clone(), from.clone()); + } + + manifest.validate()?; + Ok(manifest) +} + impl Manifest { - pub fn parse(data: &str) -> Result { - let mut manifest = toml::from_str::(data).context("error parsing manifest")?; - for (from, to) in manifest.renames.iter() { - manifest.reverse_renames.insert(to.to.clone(), from.clone()); - } + pub fn parse_toml(data: &str) -> Result { + let manifest = toml::from_str::(data).context("error parsing manifest")?; + init_and_validate(manifest) + } - manifest.validate()?; - Ok(manifest) + pub fn parse_json(data: &str) -> Result { + let manifest = serde_json::from_str::(data).context("error parsing manifest")?; + init_and_validate(manifest) } - pub fn stringify(self) -> anyhow::Result { + pub fn stringify_to_toml(self) -> anyhow::Result { Ok(toml::to_string(&self)?) } + pub fn stringify_to_json(self) -> anyhow::Result { + Ok(serde_json::to_string(&self)?) + } + pub fn get_package(&self, name: &str) -> Result<&Package> { self.packages .get(name) @@ -626,15 +639,17 @@ mod tests { // Example manifest from https://public.etherpad-mozilla.org/p/Rust-infra-work-week static EXAMPLE: &str = include_str!("manifest/tests/channel-rust-nightly-example.toml"); + static EXAMPLE_JSON: &str = include_str!("manifest/tests/channel-rust-nightly-example.json"); // From brson's live build-rust-manifest.py script static EXAMPLE2: &str = include_str!("manifest/tests/channel-rust-nightly-example2.toml"); + static EXAMPLE2_JSON: &str = include_str!("manifest/tests/channel-rust-nightly-example.json"); #[test] fn parse_smoke_test() { let x86_64_unknown_linux_gnu = TargetTriple::new("x86_64-unknown-linux-gnu"); let x86_64_unknown_linux_musl = TargetTriple::new("x86_64-unknown-linux-musl"); - let pkg = Manifest::parse(EXAMPLE).unwrap(); + let pkg = Manifest::parse_toml(EXAMPLE).unwrap(); pkg.get_package("rust").unwrap(); pkg.get_package("rustc").unwrap(); @@ -669,7 +684,7 @@ mod tests { #[test] fn renames() { - let manifest = Manifest::parse(EXAMPLE2).unwrap(); + let manifest = Manifest::parse_toml(EXAMPLE2).unwrap(); assert_eq!(1, manifest.renames.len()); assert_eq!(manifest.renames["cargo-old"].to, "cargo"); assert_eq!(1, manifest.reverse_renames.len()); @@ -677,15 +692,28 @@ mod tests { } #[test] - fn parse_round_trip() { - let original = Manifest::parse(EXAMPLE).unwrap(); - let serialized = original.clone().stringify().unwrap(); - let new = Manifest::parse(&serialized).unwrap(); + fn parse_round_trip_toml() { + let original = Manifest::parse_toml(EXAMPLE).unwrap(); + let serialized = original.clone().stringify_to_toml().unwrap(); + let new = Manifest::parse_toml(&serialized).unwrap(); + assert_eq!(original, new); + + let original = Manifest::parse_toml(EXAMPLE2).unwrap(); + let serialized = original.clone().stringify_to_toml().unwrap(); + let new = Manifest::parse_toml(&serialized).unwrap(); + assert_eq!(original, new); + } + + #[test] + fn parse_round_trip_json() { + let original = Manifest::parse_json(EXAMPLE_JSON).unwrap(); + let serialized = original.clone().stringify_to_json().unwrap(); + let new = Manifest::parse_json(&serialized).unwrap(); assert_eq!(original, new); - let original = Manifest::parse(EXAMPLE2).unwrap(); - let serialized = original.clone().stringify().unwrap(); - let new = Manifest::parse(&serialized).unwrap(); + let original = Manifest::parse_json(EXAMPLE2_JSON).unwrap(); + let serialized = original.clone().stringify_to_json().unwrap(); + let new = Manifest::parse_json(&serialized).unwrap(); assert_eq!(original, new); } @@ -714,7 +742,7 @@ date = "2015-10-10" hash = "..." "#; - let err = Manifest::parse(manifest).unwrap_err(); + let err = Manifest::parse_toml(manifest).unwrap_err(); match err.downcast::().unwrap() { RustupError::MissingPackageForComponent(_) => {} @@ -727,6 +755,6 @@ date = "2015-10-10" fn manifest_can_contain_unknown_targets() { let manifest = EXAMPLE.replace("x86_64-unknown-linux-gnu", "mycpu-myvendor-myos"); - assert!(Manifest::parse(&manifest).is_ok()); + assert!(Manifest::parse_toml(&manifest).is_ok()); } } diff --git a/src/dist/manifest/tests/channel-rust-nightly-example.json b/src/dist/manifest/tests/channel-rust-nightly-example.json new file mode 100644 index 0000000000..31e9438000 --- /dev/null +++ b/src/dist/manifest/tests/channel-rust-nightly-example.json @@ -0,0 +1,142 @@ +{ + "manifest-version": "2", + "date": "2015-10-10", + "pkg": { + "rust-docs": { + "version": "rustc 1.3.0 (9a92aaf19 2015-09-15)", + "target": { + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "example.com", + "hash": "...", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + }, + "cargo": { + "version": "cargo 0.4.0-nightly (553b363 2015-08-03)", + "target": { + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "example.com", + "hash": "...", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + }, + "rustc": { + "version": "rustc 1.3.0 (9a92aaf19 2015-09-15)", + "target": { + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "example.com", + "hash": "...", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + }, + "rust": { + "version": "rustc 1.3.0 (9a92aaf19 2015-09-15)", + "target": { + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "example.com", + "hash": "...", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + } + ] + } + } + }, + "rust-std": { + "version": "rustc 1.3.0 (9a92aaf19 2015-09-15)", + "target": { + "i686-unknown-linux-gnu": { + "available": true, + "url": "example.com", + "hash": "...", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "example.com", + "hash": "...", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-unknown-linux-musl": { + "available": true, + "url": "example.com", + "hash": "...", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + } + }, + "renames": {}, + "profiles": {} +} \ No newline at end of file diff --git a/src/dist/manifest/tests/channel-rust-nightly-example2.json b/src/dist/manifest/tests/channel-rust-nightly-example2.json new file mode 100644 index 0000000000..3b6b3b4a63 --- /dev/null +++ b/src/dist/manifest/tests/channel-rust-nightly-example2.json @@ -0,0 +1,1367 @@ +{ + "manifest-version": "2", + "date": "2016-03-04", + "pkg": { + "rust": { + "version": "1.9.0-nightly (d31d8a9a9 2016-03-04)", + "target": { + "x86_64-pc-windows-msvc": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "x86_64-pc-windows-msvc", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "x86_64-pc-windows-msvc", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "x86_64-pc-windows-msvc", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + }, + "i686-apple-darwin": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "i686-apple-darwin", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "i686-apple-darwin", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "i686-apple-darwin", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + }, + "x86_64-apple-darwin": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "x86_64-apple-darwin", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "x86_64-apple-darwin", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "x86_64-apple-darwin", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + }, + "x86_64-pc-windows-gnu": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "x86_64-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "x86_64-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "x86_64-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "rust-mingw", + "target": "x86_64-pc-windows-gnu", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + }, + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-04/rust-nightly-x86_64-unknown-linux-gnu.tar.gz", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "x86_64-unknown-linux-gnu", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + }, + "i686-pc-windows-msvc": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "i686-pc-windows-msvc", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "i686-pc-windows-msvc", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "i686-pc-windows-msvc", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + }, + "i686-unknown-linux-gnu": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "i686-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "i686-unknown-linux-gnu", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "i686-unknown-linux-gnu", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + }, + "i686-pc-windows-gnu": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [ + { + "pkg": "rustc", + "target": "i686-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "rust-docs", + "target": "i686-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "cargo", + "target": "i686-pc-windows-gnu", + "is_extension": false + }, + { + "pkg": "rust-mingw", + "target": "i686-pc-windows-gnu", + "is_extension": false + } + ], + "extensions": [ + { + "pkg": "rust-std", + "target": "aarch64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-linux-androideabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabi", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "arm-unknown-linux-gnueabihf", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "i686-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mips-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "mipsel-unknown-linux", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-apple-darwin", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-pc-windows-msvc", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-gnu", + "is_extension": true + }, + { + "pkg": "rust-std", + "target": "x86_64-unknown-linux-musl", + "is_extension": true + } + ] + } + } + }, + "rust-docs": { + "version": "1.9.0-nightly (d31d8a9a9 2016-03-04)", + "target": { + "x86_64-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-x86_64-pc-windows-gnu.tar.gz", + "hash": "7a217384e1b5f018f7bd768fdc2bfed9530ca5f261c8a3f68648e8aace70a617", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-i686-unknown-linux-gnu.tar.gz", + "hash": "db36ce902d932bcb4625675e35db36f21112ca4e7084e1d594b6f57137bbf018", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-i686-pc-windows-msvc.tar.gz", + "hash": "74ec0a09590606f8436a71c8bd815148a2a0bf06b12a8c2e99a099990555dce7", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-x86_64-pc-windows-msvc.tar.gz", + "hash": "67c45fe1619b5e3b2553b5ffee3f2a39465ca0c8efcc8f46eb2f06e11a09df76", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-i686-apple-darwin.tar.gz", + "hash": "1e5df676b576def78293913ecad7d0df50fe7a11bd4b4e79a5fd6c2ee46acfb1", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-i686-pc-windows-gnu.tar.gz", + "hash": "626d0abc1f8df848ad5765b8a0de38a656ad81957bab91942fb28487149ff41a", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-x86_64-unknown-linux-gnu.tar.gz", + "hash": "32d0b1266b995d0c8e29db85b8788b33c573fafcc36a7aef580c887a02951eb4", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-docs-nightly-x86_64-apple-darwin.tar.gz", + "hash": "2ea3021e34c4e023f6d47fddc5a6cd5a80d649b898984a730730e0bb192d9cd9", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + }, + "rust-std": { + "version": "1.9.0-nightly (d31d8a9a9 2016-03-04)", + "target": { + "arm-unknown-linux-gnueabi": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-i686-pc-windows-gnu.tar.gz", + "hash": "0661c920ffc4e9cff76aabb546371f4be53b8d92563bc41d257b0e00e9d05ef1", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-i686-apple-darwin.tar.gz", + "hash": "17095a3f448ca7cc3ae85ea5b8d0181a34e6c0784967e9bfc2ad1ed8352a7591", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "arm-linux-androideabi": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-arm-linux-androideabi.tar.gz", + "hash": "be7d3d475296ac18d5e52e1cc042d8b9063b9366c5363850479b863bb786c05b", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-i686-unknown-linux-gnu.tar.gz", + "hash": "e5b2e67f777069c5f2e11e341d23d2e727c86e8a9a0017cba77d58d8673f8207", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "aarch64-unknown-linux-gnu": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-x86_64-pc-windows-msvc.tar.gz", + "hash": "e649b56460ff226aa12db0858d7c0ac3bdb90fcad612c210dc2f5430faf25ba8", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-x86_64-unknown-linux-gnu.tar.gz", + "hash": "557e942caea2397eb331620847ce79547ce6242f36ad7e30e9fb8290ebe03d24", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-unknown-linux-musl": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-x86_64-unknown-linux-musl.tar.gz", + "hash": "c9bc2c18ec67d4d7eb97e7ef2669bc422883b50a61867f87998ba45694b7082f", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-x86_64-pc-windows-gnu.tar.gz", + "hash": "756ba9c65883e42213a50fe0e8667842d3a64518294ee8b3b4d3b7eaca3c4a10", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "arm-unknown-linux-gnueabihf": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "mips-unknown-linux": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "mipsel-unknown-linux": { + "available": false, + "url": null, + "hash": null, + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-x86_64-apple-darwin.tar.gz", + "hash": "07e060958d3cb325021a653f36ba8175bfc192794890647f975f05e3abcc24dd", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-std-nightly-i686-pc-windows-msvc.tar.gz", + "hash": "3d57245a7cc7f527e0069fc775134d980cb046b8c14ffff69fbd18790906c6ea", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + }, + "rust-mingw": { + "version": "1.9.0-nightly (d31d8a9a9 2016-03-04)", + "target": { + "i686-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-mingw-nightly-i686-pc-windows-gnu.tar.gz", + "hash": "33ee3f66dfe7012abeb4cf8f88548283d60ad4bbd3cd10082d90202301e079cd", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rust-mingw-nightly-x86_64-pc-windows-gnu.tar.gz", + "hash": "2a091f4b2159283468e43e4bb45e4b5506a3d1bf5779299bd17897499c68adce", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + }, + "cargo": { + "version": "0.9.0-nightly (34269d0 2016-02-18)", + "target": { + "x86_64-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-x86_64-pc-windows-msvc.tar.gz", + "hash": "6a68687e68397581494ecc453f89e1a03eabf71be84dd90ecd4daadfbe1dbe46", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-i686-pc-windows-gnu.tar.gz", + "hash": "da9c3bac5a0a04d7c967efba4203a536240a1741dd7a87ad0fd1e62b11210be6", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz", + "hash": "ba812247cab6ab6b5387228d916aef38a0f86f4d779d427bda507cac5d4a8178", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-i686-apple-darwin.tar.gz", + "hash": "2a27507b46cb235de9baa49111fcb72a4e37c7ba6b3a00ee07c50be76f6b40de", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-i686-pc-windows-msvc.tar.gz", + "hash": "890fca92cd4dbcc2b969fd7bc70db8c63fd999e38d31488f2ad4cf49aeb0e660", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-x86_64-pc-windows-gnu.tar.gz", + "hash": "6161c10b04c617bd6dd61f260ea1a0dbf1e43809f2431199ab58336380e66bd1", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-i686-unknown-linux-gnu.tar.gz", + "hash": "972f01ec69b7601719f72e1a6a9d25a3e7c233cc896e6fa0111d618320316bb4", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/cargo-dist/2016-02-19/cargo-nightly-x86_64-apple-darwin.tar.gz", + "hash": "bc9f16958a2fb529956c1b7fbf5b29c81981e50aa609717725d389d32a8b7293", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + }, + "rustc": { + "version": "1.9.0-nightly (d31d8a9a9 2016-03-04)", + "target": { + "i686-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-i686-pc-windows-msvc.tar.gz", + "hash": "d6360a18d8123a4309cb05dbfa62c15371313439733d03894f505d4aa4f6a910", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-x86_64-pc-windows-gnu.tar.gz", + "hash": "16c2490e2698fa28a47ff814bd128b491a43c044f61d3e329f709db38423edd7", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-i686-unknown-linux-gnu.tar.gz", + "hash": "c3affbe7663e8ede07bd5bed7d53ff34aef0578ec4457176dca2d764322e1b41", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-i686-apple-darwin.tar.gz", + "hash": "ee9a368744ef36d66e3405754b76cfb4ea4c32c5ea49bb1946dd349249aa0871", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "i686-pc-windows-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-i686-pc-windows-gnu.tar.gz", + "hash": "14dcf873331b4cd5332dd323ec60cd7f2147f739a38027b1494a538f1fac1fa4", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-pc-windows-msvc": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-x86_64-pc-windows-msvc.tar.gz", + "hash": "a7fe5a58707282186e673863d9518211d61cd29651b49b21d864008c12aeefa5", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-apple-darwin": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-x86_64-apple-darwin.tar.gz", + "hash": "6ea9a4fa0f74016417e9e8187364243787347a9ddd1272dad8e8ebc58c1fa147", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + }, + "x86_64-unknown-linux-gnu": { + "available": true, + "url": "https://dev-static.rust-lang.org/dist/2016-03-05/rustc-nightly-x86_64-unknown-linux-gnu.tar.gz", + "hash": "1b0736d7e49652989269017fc8ea224ecd5e2549da7abf7b92109b4e00256b34", + "xz_url": null, + "xz_hash": null, + "zst_url": null, + "zst_hash": null, + "components": [], + "extensions": [] + } + } + } + }, + "renames": { + "cargo-old": { + "to": "cargo" + } + }, + "profiles": {} +} \ No newline at end of file diff --git a/src/dist/manifestation.rs b/src/dist/manifestation.rs index 210f8e98ac..abd406a469 100644 --- a/src/dist/manifestation.rs +++ b/src/dist/manifestation.rs @@ -23,7 +23,12 @@ use crate::errors::RustupError; use crate::process::Process; use crate::utils; -pub(crate) const DIST_MANIFEST: &str = "multirust-channel-manifest.toml"; +// This manifest used to be stored in the TOML format, but since it was quite large, +// it was causing performance issues when parsing the TOML. +pub(crate) const DIST_MANIFEST_LEGACY: &str = "multirust-channel-manifest.toml"; +// The format has thus been changed to JSON for better performance. +pub(crate) const DIST_MANIFEST: &str = "multirust-channel-manifest.json"; + pub(crate) const CONFIG_FILE: &str = "multirust-config.toml"; #[derive(Debug)] @@ -113,8 +118,6 @@ impl Manifestation { // Some vars we're going to need a few times let tmp_cx = download_cfg.tmp_cx; let prefix = self.installation.prefix(); - let rel_installed_manifest_path = prefix.rel_manifest_file(DIST_MANIFEST); - let installed_manifest_path = prefix.path().join(&rel_installed_manifest_path); // Create the lists of components needed for installation let config = self.read_config()?; @@ -297,10 +300,23 @@ impl Manifestation { } // Install new distribution manifest - let new_manifest_str = new_manifest.clone().stringify()?; + let new_manifest_str = new_manifest.clone().stringify_to_json()?; + + let rel_installed_manifest_path = prefix.rel_manifest_file(DIST_MANIFEST); + let installed_manifest_path = prefix.path().join(&rel_installed_manifest_path); + tx.modify_file(rel_installed_manifest_path)?; utils::write_file("manifest", &installed_manifest_path, &new_manifest_str)?; + // In case there was an old legacy manifest on disk, delete it, to avoid having lingering + // legacy and out-of-date data on the disk. We do not care if this operation fails. + let _ = utils::remove_file( + "legacy manifest", + &prefix + .path() + .join(prefix.rel_manifest_file(DIST_MANIFEST_LEGACY)), + ); + // Write configuration. // // NB: This configuration is mostly for keeping track of the name/target pairs @@ -404,15 +420,28 @@ impl Manifestation { #[tracing::instrument(level = "trace")] pub fn load_manifest(&self) -> Result> { let prefix = self.installation.prefix(); + + let old_legacy_manifest_path = prefix.manifest_file(DIST_MANIFEST_LEGACY); let old_manifest_path = prefix.manifest_file(DIST_MANIFEST); + + // If we have the JSON manifest on disk, read it. + // If not, try to read a previously installed legacy TOML manifest. if utils::path_exists(&old_manifest_path) { let manifest_str = utils::read_file("installed manifest", &old_manifest_path)?; - Ok(Some(Manifest::parse(&manifest_str).with_context(|| { - RustupError::ParsingFile { + Ok(Some(Manifest::parse_json(&manifest_str).with_context( + || RustupError::ParsingFile { name: "manifest", path: old_manifest_path, - } - })?)) + }, + )?)) + } else if utils::path_exists(&old_legacy_manifest_path) { + let manifest_str = utils::read_file("installed manifest", &old_legacy_manifest_path)?; + Ok(Some(Manifest::parse_toml(&manifest_str).with_context( + || RustupError::ParsingFile { + name: "manifest", + path: old_legacy_manifest_path, + }, + )?)) } else { Ok(None) } diff --git a/src/dist/manifestation/tests.rs b/src/dist/manifestation/tests.rs index fcc743ed68..fb97125593 100644 --- a/src/dist/manifestation/tests.rs +++ b/src/dist/manifestation/tests.rs @@ -498,7 +498,7 @@ impl TestContext { let manifest_file = self.tmp_cx.new_file()?; download_file(&manifest_url, &manifest_file, None, &|_| {}, dl_cfg.process).await?; let manifest_str = utils::read_file("manifest", &manifest_file)?; - let manifest = Manifest::parse(&manifest_str)?; + let manifest = Manifest::parse_toml(&manifest_str)?; // Read the manifest to update the components let trip = self.toolchain.target.clone(); diff --git a/src/dist/mod.rs b/src/dist/mod.rs index d68c460029..2226feaa31 100644 --- a/src/dist/mod.rs +++ b/src/dist/mod.rs @@ -1238,11 +1238,12 @@ pub(crate) async fn dl_v2_manifest( return Ok(None); }; let manifest_str = utils::read_file("manifest", &manifest_file)?; - let manifest = - ManifestV2::parse(&manifest_str).with_context(|| RustupError::ParsingFile { + let manifest = ManifestV2::parse_toml(&manifest_str).with_context(|| { + RustupError::ParsingFile { name: "manifest", path: manifest_file.to_path_buf(), - })?; + } + })?; Ok(Some((manifest, manifest_hash))) } diff --git a/src/test/dist.rs b/src/test/dist.rs index a2e8398acb..e02ef760d0 100644 --- a/src/test/dist.rs +++ b/src/test/dist.rs @@ -827,7 +827,7 @@ impl MockDistServer { let manifest_name = format!("dist/channel-rust-{}", channel.name); let manifest_path = self.path.join(format!("{manifest_name}.toml")); - let manifest_content = manifest.stringify().unwrap(); + let manifest_content = manifest.stringify_to_toml().unwrap(); write_file(&manifest_path, &manifest_content); let hash_path = self.path.join(format!("{manifest_name}.toml.sha256")); diff --git a/tests/suite/cli_v2.rs b/tests/suite/cli_v2.rs index c09bfdf826..61235d8f64 100644 --- a/tests/suite/cli_v2.rs +++ b/tests/suite/cli_v2.rs @@ -407,7 +407,7 @@ async fn bad_manifest() { for_host!("nightly-{}"), "lib", "rustlib", - "multirust-channel-manifest.toml", + "multirust-channel-manifest.json", ] .into_iter() .collect::(); @@ -417,7 +417,7 @@ async fn bad_manifest() { // corrupt the manifest file by inserting a NUL byte at some position let old = fs::read_to_string(&path).unwrap(); - let pattern = "[[pkg.rust.targ"; + let pattern = r#""target":"#; let (prefix, suffix) = old.split_once(pattern).unwrap(); let new = format!("{prefix}{pattern}\u{0}{suffix}"); fs::write(&path, new).unwrap(); @@ -1320,14 +1320,14 @@ fn make_component_unavailable(config: &Config, name: &str, target: String) { .unwrap() .join("dist/channel-rust-nightly.toml"); let manifest_str = fs::read_to_string(&manifest_path).unwrap(); - let mut manifest = Manifest::parse(&manifest_str).unwrap(); + let mut manifest = Manifest::parse_toml(&manifest_str).unwrap(); { let std_pkg = manifest.packages.get_mut(name).unwrap(); let target = TargetTriple::new(target); let target_pkg = std_pkg.targets.get_mut(&target).unwrap(); target_pkg.bins = Vec::new(); } - let manifest_str = manifest.stringify().unwrap(); + let manifest_str = manifest.stringify_to_toml().unwrap(); rustup::utils::raw::write_file(&manifest_path, &manifest_str).unwrap(); // Have to update the hash too