Add env-var to suppress rustc caching

This commit is contained in:
Aleksey Kladov 2018-04-14 14:09:23 +03:00
parent 6b1dc52b86
commit c473479ab0
3 changed files with 50 additions and 16 deletions

View File

@ -66,6 +66,9 @@ pub struct Config {
easy: LazyCell<RefCell<Easy>>, easy: LazyCell<RefCell<Easy>>,
/// Cache of the `SourceId` for crates.io /// Cache of the `SourceId` for crates.io
crates_io_source_id: LazyCell<SourceId>, crates_io_source_id: LazyCell<SourceId>,
/// If false, don't cache `rustc --version --verbose` invocations
cache_rustc_info: bool,
/// Creation time of this config, used to output the total build time
creation_time: Instant, creation_time: Instant,
} }
@ -82,6 +85,11 @@ impl Config {
} }
}); });
let cache_rustc_info = match env::var("CARGO_CACHE_RUSTC_INFO") {
Ok(cache) => cache != "0",
_ => true,
};
Config { Config {
home_path: Filesystem::new(homedir), home_path: Filesystem::new(homedir),
shell: RefCell::new(shell), shell: RefCell::new(shell),
@ -103,6 +111,7 @@ impl Config {
cli_flags: CliUnstable::default(), cli_flags: CliUnstable::default(),
easy: LazyCell::new(), easy: LazyCell::new(),
crates_io_source_id: LazyCell::new(), crates_io_source_id: LazyCell::new(),
cache_rustc_info,
creation_time: Instant::now(), creation_time: Instant::now(),
} }
} }
@ -162,7 +171,11 @@ impl Config {
Rustc::new( Rustc::new(
self.get_tool("rustc")?, self.get_tool("rustc")?,
self.maybe_get_tool("rustc_wrapper")?, self.maybe_get_tool("rustc_wrapper")?,
cache_location, if self.cache_rustc_info {
cache_location
} else {
None
},
) )
} }

View File

@ -9,29 +9,31 @@ with them:
You can override these environment variables to change Cargo's behavior on your You can override these environment variables to change Cargo's behavior on your
system: system:
* `CARGO_HOME` - Cargo maintains a local cache of the registry index and of git * `CARGO_HOME` Cargo maintains a local cache of the registry index and of git
checkouts of crates. By default these are stored under `$HOME/.cargo`, but checkouts of crates. By default these are stored under `$HOME/.cargo`, but
this variable overrides the location of this directory. Once a crate is cached this variable overrides the location of this directory. Once a crate is cached
it is not removed by the clean command. it is not removed by the clean command.
* `CARGO_TARGET_DIR` - Location of where to place all generated artifacts, * `CARGO_TARGET_DIR` Location of where to place all generated artifacts,
relative to the current working directory. relative to the current working directory.
* `RUSTC` - Instead of running `rustc`, Cargo will execute this specified * `RUSTC` Instead of running `rustc`, Cargo will execute this specified
compiler instead. compiler instead.
* `RUSTC_WRAPPER` - Instead of simply running `rustc`, Cargo will execute this * `RUSTC_WRAPPER` Instead of simply running `rustc`, Cargo will execute this
specified wrapper instead, passing as its commandline arguments the rustc specified wrapper instead, passing as its commandline arguments the rustc
invocation, with the first argument being rustc. invocation, with the first argument being rustc.
* `RUSTDOC` - Instead of running `rustdoc`, Cargo will execute this specified * `RUSTDOC` Instead of running `rustdoc`, Cargo will execute this specified
`rustdoc` instance instead. `rustdoc` instance instead.
* `RUSTDOCFLAGS` - A space-separated list of custom flags to pass to all `rustdoc` * `RUSTDOCFLAGS` A space-separated list of custom flags to pass to all `rustdoc`
invocations that Cargo performs. In contrast with `cargo rustdoc`, this is invocations that Cargo performs. In contrast with `cargo rustdoc`, this is
useful for passing a flag to *all* `rustdoc` instances. useful for passing a flag to *all* `rustdoc` instances.
* `RUSTFLAGS` - A space-separated list of custom flags to pass to all compiler * `RUSTFLAGS` A space-separated list of custom flags to pass to all compiler
invocations that Cargo performs. In contrast with `cargo rustc`, this is invocations that Cargo performs. In contrast with `cargo rustc`, this is
useful for passing a flag to *all* compiler instances. useful for passing a flag to *all* compiler instances.
* `CARGO_INCREMENTAL` - If this is set to 1 then Cargo will force incremental * `CARGO_INCREMENTAL` If this is set to 1 then Cargo will force incremental
compilation to be enabled for the current compilation, and when set to 0 it compilation to be enabled for the current compilation, and when set to 0 it
will force disabling it. If this env var isn't present then cargo's defaults will force disabling it. If this env var isn't present then cargo's defaults
will otherwise be used. will otherwise be used.
* `CARGO_CACHE_RUSTC_INFO` — If this is set to 0 then Cargo will not try to cache
compiler version information.
Note that Cargo will also read environment variables for `.cargo/config` Note that Cargo will also read environment variables for `.cargo/config`
configuration values, as described in [that documentation][config-env] configuration values, as described in [that documentation][config-env]

View File

@ -19,7 +19,9 @@ fn rustc_info_cache() {
.build(); .build();
let miss = "[..] rustc info cache miss[..]"; let miss = "[..] rustc info cache miss[..]";
let hit = "[..] rustc info cache hit[..]"; let hit = "[..]rustc info cache hit[..]";
let uncached = "[..]rustc info uncached[..]";
let update = "[..]updated rustc info cache[..]";
assert_that( assert_that(
p.cargo("build").env("RUST_LOG", "cargo::util::rustc=info"), p.cargo("build").env("RUST_LOG", "cargo::util::rustc=info"),
@ -27,7 +29,8 @@ fn rustc_info_cache() {
.with_status(0) .with_status(0)
.with_stderr_contains("[..]failed to read rustc info cache[..]") .with_stderr_contains("[..]failed to read rustc info cache[..]")
.with_stderr_contains(miss) .with_stderr_contains(miss)
.with_stderr_does_not_contain(hit), .with_stderr_does_not_contain(hit)
.with_stderr_contains(update),
); );
assert_that( assert_that(
@ -36,7 +39,19 @@ fn rustc_info_cache() {
.with_status(0) .with_status(0)
.with_stderr_contains("[..]reusing existing rustc info cache[..]") .with_stderr_contains("[..]reusing existing rustc info cache[..]")
.with_stderr_contains(hit) .with_stderr_contains(hit)
.with_stderr_does_not_contain(miss), .with_stderr_does_not_contain(miss)
.with_stderr_does_not_contain(update),
);
assert_that(
p.cargo("build")
.env("RUST_LOG", "cargo::util::rustc=info")
.env("CARGO_CACHE_RUSTC_INFO", "0"),
execs()
.with_status(0)
.with_stderr_contains("[..]rustc info cache disabled[..]")
.with_stderr_contains(uncached)
.with_stderr_does_not_contain(update),
); );
let other_rustc = { let other_rustc = {
@ -80,7 +95,8 @@ fn rustc_info_cache() {
.with_status(0) .with_status(0)
.with_stderr_contains("[..]different compiler, creating new rustc info cache[..]") .with_stderr_contains("[..]different compiler, creating new rustc info cache[..]")
.with_stderr_contains(miss) .with_stderr_contains(miss)
.with_stderr_does_not_contain(hit), .with_stderr_does_not_contain(hit)
.with_stderr_contains(update),
); );
assert_that( assert_that(
@ -91,7 +107,8 @@ fn rustc_info_cache() {
.with_status(0) .with_status(0)
.with_stderr_contains("[..]reusing existing rustc info cache[..]") .with_stderr_contains("[..]reusing existing rustc info cache[..]")
.with_stderr_contains(hit) .with_stderr_contains(hit)
.with_stderr_does_not_contain(miss), .with_stderr_does_not_contain(miss)
.with_stderr_does_not_contain(update),
); );
other_rustc.move_into_the_future(); other_rustc.move_into_the_future();
@ -104,7 +121,8 @@ fn rustc_info_cache() {
.with_status(0) .with_status(0)
.with_stderr_contains("[..]different compiler, creating new rustc info cache[..]") .with_stderr_contains("[..]different compiler, creating new rustc info cache[..]")
.with_stderr_contains(miss) .with_stderr_contains(miss)
.with_stderr_does_not_contain(hit), .with_stderr_does_not_contain(hit)
.with_stderr_contains(update),
); );
assert_that( assert_that(
@ -115,6 +133,7 @@ fn rustc_info_cache() {
.with_status(0) .with_status(0)
.with_stderr_contains("[..]reusing existing rustc info cache[..]") .with_stderr_contains("[..]reusing existing rustc info cache[..]")
.with_stderr_contains(hit) .with_stderr_contains(hit)
.with_stderr_does_not_contain(miss), .with_stderr_does_not_contain(miss)
.with_stderr_does_not_contain(update),
); );
} }