Struct cargo::util::config::Config

source ·
pub struct Config {
Show 36 fields home_path: Filesystem, shell: RefCell<Shell>, values: LazyCell<HashMap<String, ConfigValue>>, credential_values: LazyCell<HashMap<String, ConfigValue>>, cli_config: Option<Vec<String>>, cwd: PathBuf, search_stop_path: Option<PathBuf>, cargo_exe: LazyCell<PathBuf>, rustdoc: LazyCell<PathBuf>, extra_verbose: bool, frozen: bool, locked: bool, offline: bool, jobserver: Option<Client>, unstable_flags: CliUnstable, unstable_flags_cli: Option<Vec<String>>, easy: LazyCell<RefCell<Easy>>, crates_io_source_id: LazyCell<SourceId>, cache_rustc_info: bool, creation_time: Instant, target_dir: Option<Filesystem>, env: HashMap<String, String>, upper_case_env: HashMap<String, String>, updated_sources: LazyCell<RefCell<HashSet<SourceId>>>, credential_cache: LazyCell<RefCell<HashMap<CanonicalUrl, CredentialCacheValue>>>, package_cache_lock: RefCell<Option<(Option<FileLock>, usize)>>, http_config: LazyCell<CargoHttpConfig>, future_incompat_config: LazyCell<CargoFutureIncompatConfig>, net_config: LazyCell<CargoNetConfig>, build_config: LazyCell<CargoBuildConfig>, target_cfgs: LazyCell<Vec<(String, TargetCfgConfig)>>, doc_extern_map: LazyCell<RustdocExternMap>, progress_config: ProgressConfig, env_config: LazyCell<EnvConfig>, pub nightly_features_allowed: bool, pub ws_roots: RefCell<HashMap<PathBuf, WorkspaceRootConfig>>,
}
Expand description

Configuration information for cargo. This is not specific to a build, it is information relating to cargo itself.

Fields§

§home_path: Filesystem

The location of the user’s Cargo home directory. OS-dependent.

§shell: RefCell<Shell>

Information about how to write messages to the shell

§values: LazyCell<HashMap<String, ConfigValue>>

A collection of configuration options

§credential_values: LazyCell<HashMap<String, ConfigValue>>

A collection of configuration options from the credentials file

§cli_config: Option<Vec<String>>

CLI config values, passed in via configure.

§cwd: PathBuf

The current working directory of cargo

§search_stop_path: Option<PathBuf>

Directory where config file searching should stop (inclusive).

§cargo_exe: LazyCell<PathBuf>

The location of the cargo executable (path to current process)

§rustdoc: LazyCell<PathBuf>

The location of the rustdoc executable

§extra_verbose: bool

Whether we are printing extra verbose messages

§frozen: bool

frozen is the same as locked, but additionally will not access the network to determine if the lock file is out-of-date.

§locked: bool

locked is set if we should not update lock files. If the lock file is missing, or needs to be updated, an error is produced.

§offline: bool

offline is set if we should never access the network, but otherwise continue operating if possible.

§jobserver: Option<Client>

A global static IPC control mechanism (used for managing parallel builds)

§unstable_flags: CliUnstable

Cli flags of the form “-Z something” merged with config file values

§unstable_flags_cli: Option<Vec<String>>

Cli flags of the form “-Z something”

§easy: LazyCell<RefCell<Easy>>

A handle on curl easy mode for http calls

§crates_io_source_id: LazyCell<SourceId>

Cache of the SourceId for crates.io

§cache_rustc_info: bool

If false, don’t cache rustc --version --verbose invocations

§creation_time: Instant

Creation time of this config, used to output the total build time

§target_dir: Option<Filesystem>

Target Directory via resolved Cli parameter

§env: HashMap<String, String>

Environment variables, separated to assist testing.

§upper_case_env: HashMap<String, String>

Environment variables, converted to uppercase to check for case mismatch

§updated_sources: LazyCell<RefCell<HashSet<SourceId>>>

Tracks which sources have been updated to avoid multiple updates.

§credential_cache: LazyCell<RefCell<HashMap<CanonicalUrl, CredentialCacheValue>>>

Cache of credentials from configuration or credential providers. Maps from url to credential value.

§package_cache_lock: RefCell<Option<(Option<FileLock>, usize)>>

Lock, if held, of the global package cache along with the number of acquisitions so far.

§http_config: LazyCell<CargoHttpConfig>

Cached configuration parsed by Cargo

§future_incompat_config: LazyCell<CargoFutureIncompatConfig>§net_config: LazyCell<CargoNetConfig>§build_config: LazyCell<CargoBuildConfig>§target_cfgs: LazyCell<Vec<(String, TargetCfgConfig)>>§doc_extern_map: LazyCell<RustdocExternMap>§progress_config: ProgressConfig§env_config: LazyCell<EnvConfig>§nightly_features_allowed: bool

This should be false if:

  • this is an artifact of the rustc distribution process for “stable” or for “beta”
  • this is an #[test] that does not opt in with enable_nightly_features
  • this is an integration test that uses ProcessBuilder that does not opt in with masquerade_as_nightly_cargo This should be true if:
  • this is an artifact of the rustc distribution process for “nightly”
  • this is being used in the rustc distribution process internally
  • this is a cargo executable that was built from source
  • this is an #[test] that called enable_nightly_features
  • this is an integration test that uses ProcessBuilder that called masquerade_as_nightly_cargo It’s public to allow tests use nightly features. NOTE: this should be set before configure(). If calling this from an integration test, consider using ConfigBuilder::enable_nightly_features instead.
§ws_roots: RefCell<HashMap<PathBuf, WorkspaceRootConfig>>

WorkspaceRootConfigs that have been found

Implementations§

Creates a new config instance.

This is typically used for tests or other special cases. default is preferred otherwise.

This does only minimal initialization. In particular, it does not load any config files from disk. Those will be loaded lazily as-needed.

Creates a new Config instance, with all default settings.

This does only minimal initialization. In particular, it does not load any config files from disk. Those will be loaded lazily as-needed.

Gets the user’s Cargo home directory (OS-dependent).

Returns a path to display to the user with the location of their home config file (to only be used for displaying a diagnostics suggestion, such as recommending where to add a config value).

Gets the Cargo Git directory (<cargo_home>/git).

Gets the Cargo base directory for all registry information (<cargo_home>/registry).

Gets the Cargo registry index directory (<cargo_home>/registry/index).

Gets the Cargo registry cache directory (<cargo_home>/registry/path).

Gets the Cargo registry source directory (<cargo_home>/registry/src).

Gets the default Cargo registry.

Gets a reference to the shell, e.g., for writing error messages.

Gets the path to the rustdoc executable.

Gets the path to the rustc executable.

Gets the path to the cargo executable.

Which package sources have been updated, used to ensure it is only done once.

Cached credentials from credential providers or configuration.

Gets all config values from disk.

This will lazy-load the values as necessary. Callers are responsible for checking environment variables. Callers outside of the config module should avoid using this.

Gets a mutable copy of the on-disk config values.

This requires the config values to already have been loaded. This currently only exists for cargo vendor to remove the source entries. This doesn’t respect environment variables. You should avoid using this if possible.

Sets the path where ancestor config file searching will stop. The given path is included, but its ancestors are not.

Reloads on-disk configuration values, starting at the given path and walking up its ancestors.

The current working directory.

The target output directory to use.

Returns None if the user has not chosen an explicit directory.

Callers should prefer Workspace::target_dir instead.

Get a configuration value by key.

This does NOT look at environment variables. See get_cv_with_env for a variant that supports environment variables.

This is a helper for getting a CV from a file or env var.

Helper primarily for testing.

Returns all environment variables.

Check if the Config contains a given ConfigKey.

See ConfigMapAccess for a description of env_prefix_ok.

Get a string config value.

See get for more details.

Get a config value that is expected to be a path.

This returns a relative path if the value does not contain any directory separators. See ConfigRelativePath::resolve_program for more details.

Get a list of strings.

DO NOT USE outside of the config module. pub will be removed in the future.

NOTE: this does not support environment variables. Use get instead if you want that.

Helper for StringList type to get something that is a string or list.

Internal method for getting an environment variable as a list.

Low-level method for getting a config value as an OptValue<HashMap<String, CV>>.

NOTE: This does not read from env. The caller is responsible for that.

Low-level private method for getting a config value as an OptValue.

Low-level private method for getting a config value as an OptValue.

Low-level private method for getting a config value as an OptValue.

Generate an error when the given value is the wrong type.

Update the Config instance based on settings typically passed in on the command-line.

This may also load the config from disk if it hasn’t already been loaded.

Loads configuration from the filesystem.

Like load_values but without merging config values.

This is primarily crafted for cargo config command.

Like load_includes but without merging config values.

This is primarily crafted for cargo config command.

Start a config file discovery from a path and merges all config values found.

Loads a config value from a path.

This is used during config file discovery.

Loads a config value from a path with options.

This is actual implementation of loading a config value from a path.

  • includes determines whether to load configs from config-include.
  • seen is used to check for cyclic includes.
  • why_load tells why a config is being loaded.

Load any include files listed in the given value.

Returns value with the given include files merged into it.

  • seen is used to check for cyclic includes.
  • why_load tells why a config is being loaded.

Converts the include config value to a list of absolute paths.

Parses the CLI config args and returns them as a table.

Add config arguments passed on the command line.

The purpose of this function is to aid in the transition to using .toml extensions on Cargo’s config files, which were historically not used. Both ‘config.toml’ and ‘credentials.toml’ should be valid with or without extension. When both exist, we want to prefer the one without an extension for backwards compatibility, but warn the user appropriately.

Gets the index for a registry.

Returns an error if registry.index is set.

Loads credentials config from the credentials file, if present.

The credentials are loaded into a separate field to enable them to be lazy-loaded after the main configuration has been loaded, without requiring mut access to the Config.

If the credentials are already loaded, this function does nothing.

Looks for a path for tool in an environment variable or the given config, and returns None if it’s not present.

Looks for a path for tool in an environment variable or config path, defaulting to tool as a path.

This is used to validate the term table has valid syntax.

This is necessary because loading the term settings happens very early, and in some situations (like cargo version) we don’t want to fail if there are problems with the config file.

Returns a list of [target.‘cfg()’] tables.

The list is sorted by the table name.

Returns true if the [target] table should be applied to host targets.

Returns the [host] table definition for the given target triple.

Returns the [target] table definition for the given target triple.

Retrieves a config variable.

This supports most serde Deserialize types. Examples:

let v: Option<u32> = config.get("some.nested.key")?;
let v: Option<MyStruct> = config.get("some.key")?;
let v: Option<HashMap<String, MyStruct>> = config.get("foo")?;

The key may be a dotted key, but this does NOT support TOML key quoting. Avoid key components that may have dots. For example, foo.'a.b'.bar" does not work if you try to fetch foo.‘a.b’“. You can fetch foo if it is a map, though.

Acquires an exclusive lock on the global “package cache”

This lock is global per-process and can be acquired recursively. An RAII structure is returned to release the lock, and if this process abnormally terminates the lock is also released.

Trait Implementations§

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Should always be Self
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.

Size: 1888 bytes