From 742a111df368f856fe18369321ba85e6b9cdf443 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 22 Sep 2025 10:13:23 -0500 Subject: [PATCH] Abstract away ws_roots --- src/cargo/core/workspace.rs | 2 +- src/cargo/util/context/mod.rs | 4 ++++ src/cargo/util/toml/mod.rs | 9 +++------ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/cargo/core/workspace.rs b/src/cargo/core/workspace.rs index 1db728d81..096b333d1 100644 --- a/src/cargo/core/workspace.rs +++ b/src/cargo/core/workspace.rs @@ -2037,7 +2037,7 @@ fn find_workspace_root_with_loader( ) -> CargoResult> { // Check if there are any workspace roots that have already been found that would work { - let roots = gctx.ws_roots.borrow(); + let roots = gctx.ws_roots(); // Iterate through the manifests parent directories until we find a workspace // root. Note we skip the first item since that is just the path itself for current in manifest_path.ancestors().skip(1) { diff --git a/src/cargo/util/context/mod.rs b/src/cargo/util/context/mod.rs index 1a03e4b58..2152be496 100644 --- a/src/cargo/util/context/mod.rs +++ b/src/cargo/util/context/mod.rs @@ -2133,6 +2133,10 @@ impl GlobalContext { Ok(WarningHandling::default()) } } + + pub fn ws_roots(&self) -> RefMut<'_, HashMap> { + self.ws_roots.borrow_mut() + } } /// Internal error for serde errors. diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index d0a7ced2e..cf20471ca 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -81,8 +81,7 @@ pub fn read_manifest( to_workspace_config(&original_toml, path, is_embedded, gctx, &mut warnings)?; if let WorkspaceConfig::Root(ws_root_config) = &workspace_config { let package_root = path.parent().unwrap(); - gctx.ws_roots - .borrow_mut() + gctx.ws_roots() .insert(package_root.to_owned(), ws_root_config.clone()); } let normalized_toml = normalize_toml( @@ -996,7 +995,7 @@ fn inheritable_from_path( // Let the borrow exit scope so that it can be picked up if there is a need to // read a manifest - if let Some(ws_root) = gctx.ws_roots.borrow().get(workspace_path_root) { + if let Some(ws_root) = gctx.ws_roots().get(workspace_path_root) { return Ok(ws_root.inheritable().clone()); }; @@ -1004,9 +1003,7 @@ fn inheritable_from_path( let man = read_manifest(&workspace_path, source_id, gctx)?; match man.workspace_config() { WorkspaceConfig::Root(root) => { - gctx.ws_roots - .borrow_mut() - .insert(workspace_path, root.clone()); + gctx.ws_roots().insert(workspace_path, root.clone()); Ok(root.inheritable().clone()) } _ => bail!(