Skip to main content

resolve

Function resolve 

Source
pub fn resolve(
    referenced_aliases: &HashSet<String>,
    workspace_config_paths: &[PathBuf],
    cargo_home_config_path: Option<&Path>,
    config_cache: &ConfigFileCache,
    policy: &RegistryAccessPolicy,
) -> (CargoConfig, SourceReplacement)
Expand description

Resolves referenced_aliases against the .cargo/config.toml hierarchy and $CARGO_HOME/config.toml.

Separately resolves the [source.crates-io] replace-with chain (if any) for plain dependencies.

referenced_aliases is every distinct registry = "<alias>" value this manifest’s dependencies declared; workspace_config_paths and cargo_home_config_path come from crate::parser’s merged ancestor walk (closest-first); config_cache memoizes each distinct config file’s raw contents (spec NFR-005); policy gates every WorkspaceDeclared RegistryIndex this call constructs.

§Precedence

For one alias (or the [source] chain): the closest workspace .cargo/config.toml entry wins outright — if it resolves, the $CARGO_HOME tier (config file and environment variables alike) is never consulted for that alias at all. This is a deliberate divergence from Cargo’s own env-beats-all-config-files precedence: since environment variables and $CARGO_HOME/config.toml are folded into one $CARGO_HOME-provenance tier here, an environment variable can never resurrect a credential for an alias a workspace file has shadowed (spec FR-009/US-004) — see the module-level security-model docs.

§Examples

use deps_cargo::config::{ConfigFileCache, SourceReplacement, resolve};
use deps_core::net_policy::RegistryAccessPolicy;
use std::collections::HashSet;

let aliases: HashSet<String> = std::iter::once("unconfigured".to_string()).collect();
let cache = ConfigFileCache::new();
let policy = RegistryAccessPolicy::default();
let (config, source_replacement) = resolve(&aliases, &[], None, &cache, &policy);
assert!(config.get("unconfigured").is_none());
assert_eq!(source_replacement, SourceReplacement::None);