From 676d2e040dfe619d666d5b3068db47346655f23b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 10 Jul 2020 22:28:41 +0200 Subject: Sort cargo metadata See https://github.com/rust-lang/cargo/issues/8477 We need this to prevent spurious workspace reloads --- crates/ra_project_model/src/cargo_workspace.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs index 6d1154056..4182ca156 100644 --- a/crates/ra_project_model/src/cargo_workspace.rs +++ b/crates/ra_project_model/src/cargo_workspace.rs @@ -155,7 +155,7 @@ impl CargoWorkspace { if let Some(target) = cargo_features.target.as_ref() { meta.other_options(vec![String::from("--filter-platform"), target.clone()]); } - let meta = meta.exec().with_context(|| { + let mut meta = meta.exec().with_context(|| { format!("Failed to run `cargo metadata --manifest-path {}`", cargo_toml.display()) })?; @@ -175,6 +175,7 @@ impl CargoWorkspace { let ws_members = &meta.workspace_members; + meta.packages.sort_by(|a, b| a.id.cmp(&b.id)); for meta_pkg in meta.packages { let cargo_metadata::Package { id, edition, name, manifest_path, version, .. } = meta_pkg; @@ -210,7 +211,7 @@ impl CargoWorkspace { } } let resolve = meta.resolve.expect("metadata executed with deps"); - for node in resolve.nodes { + for mut node in resolve.nodes { let source = match pkg_by_id.get(&node.id) { Some(&src) => src, // FIXME: replace this and a similar branch below with `.unwrap`, once @@ -221,6 +222,7 @@ impl CargoWorkspace { continue; } }; + node.deps.sort_by(|a, b| a.pkg.cmp(&b.pkg)); for dep_node in node.deps { let pkg = match pkg_by_id.get(&dep_node.pkg) { Some(&pkg) => pkg, -- cgit v1.2.3