From 6863d5d508153283036de6c1cb37433c6e7e19c5 Mon Sep 17 00:00:00 2001 From: Eh2406 Date: Mon, 9 Jul 2018 12:03:17 -0400 Subject: [PATCH 1/3] capture_lockfile with -Zno-index-update --- src/docker.rs | 1 + src/ex.rs | 2 +- src/toolchain.rs | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/docker.rs b/src/docker.rs index 3dbf6a962..c45ecb032 100644 --- a/src/docker.rs +++ b/src/docker.rs @@ -106,6 +106,7 @@ pub fn rust_container(config: RustEnv) -> ContainerConfig { "RUSTFLAGS", format!("--cap-lints={}", config.cap_lints.to_str()), ), + ("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly".to_string()) ]; ContainerConfig { diff --git a/src/ex.rs b/src/ex.rs index 68f2a13c1..ab61c3ff8 100644 --- a/src/ex.rs +++ b/src/ex.rs @@ -374,7 +374,7 @@ fn capture_lockfile_inner( path: &Path, toolchain: &Toolchain, ) -> Result<()> { - let args = &["generate-lockfile", "--manifest-path", "Cargo.toml"]; + let args = &["generate-lockfile", "--manifest-path", "Cargo.toml", "-Zno-index-update"]; toolchain .run_cargo(ex, path, args, CargoState::Unlocked, false) .chain_err(|| format!("unable to generate lockfile for {}", krate))?; diff --git a/src/toolchain.rs b/src/toolchain.rs index b8db4c667..93ea79933 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -44,6 +44,8 @@ impl Toolchain { } } + self.prep_offline_registry()?; + Ok(()) } @@ -101,6 +103,20 @@ impl Toolchain { }; docker::run(&docker::rust_container(rust_env), quiet) } + + pub fn prep_offline_registry(&self) -> Result<()> { + // This nop cargo command is to update the registry + // so we don't have to do it for each crate. + let toolchain_arg = "+".to_string() + &self.rustup_name(); + let full_args = [&toolchain_arg, "search", "lazy_static"]; + RunCommand::new( + &installed_binary("cargo"), + &full_args, + ).local_rustup() + .quiet(true) + .run() + .chain_err(|| format!("unable to update the index for toolchain {}", &self.rustup_name())) + } } impl ToString for Toolchain { From 4e1fe3e89f866bc13cfef7edfd79e468857b572b Mon Sep 17 00:00:00 2001 From: Eh2406 Date: Mon, 9 Jul 2018 12:22:24 -0400 Subject: [PATCH 2/3] only use the override when really needed --- src/docker.rs | 7 +++++-- src/toolchain.rs | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/docker.rs b/src/docker.rs index c45ecb032..8a6244d1a 100644 --- a/src/docker.rs +++ b/src/docker.rs @@ -32,6 +32,7 @@ pub struct RustEnv<'a> { pub rustup_home: (PathBuf, Perm), pub target_dir: (PathBuf, Perm), pub cap_lints: &'a ExCapLints, + pub enable_unstable_cargo_features: bool, } pub struct MountConfig<'a> { @@ -97,7 +98,7 @@ pub fn rust_container(config: RustEnv) -> ContainerConfig { }, ]; - let env = vec![ + let mut env = vec![ ("USER_ID", format!("{}", user_id())), ("CMD", config.args.join(" ")), ("CARGO_INCREMENTAL", "0".to_string()), @@ -106,8 +107,10 @@ pub fn rust_container(config: RustEnv) -> ContainerConfig { "RUSTFLAGS", format!("--cap-lints={}", config.cap_lints.to_str()), ), - ("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly".to_string()) ]; + if config.enable_unstable_cargo_features { + env.push(("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly".to_string())); + } ContainerConfig { image_name: IMAGE_NAME, diff --git a/src/toolchain.rs b/src/toolchain.rs index 93ea79933..0325d2f22 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -92,6 +92,10 @@ impl Toolchain { CargoState::Locked => docker::Perm::ReadOnly, CargoState::Unlocked => docker::Perm::ReadWrite, }; + + let enable_unstable_cargo_features = + !toolchain_name.starts_with("nightly-") && args.iter().any(|a| a.starts_with("-Z")); + let rust_env = docker::RustEnv { args: &full_args, work_dir: (source_dir.into(), perm), @@ -100,6 +104,7 @@ impl Toolchain { // This is configured as CARGO_TARGET_DIR by the docker container itself target_dir: (ex_target_dir, docker::Perm::ReadWrite), cap_lints: &ex.cap_lints, + enable_unstable_cargo_features, }; docker::run(&docker::rust_container(rust_env), quiet) } @@ -109,13 +114,16 @@ impl Toolchain { // so we don't have to do it for each crate. let toolchain_arg = "+".to_string() + &self.rustup_name(); let full_args = [&toolchain_arg, "search", "lazy_static"]; - RunCommand::new( - &installed_binary("cargo"), - &full_args, - ).local_rustup() + RunCommand::new(&installed_binary("cargo"), &full_args) + .local_rustup() .quiet(true) .run() - .chain_err(|| format!("unable to update the index for toolchain {}", &self.rustup_name())) + .chain_err(|| { + format!( + "unable to update the index for toolchain {}", + &self.rustup_name() + ) + }) } } From b7703b3b703ae8e3e28a8d102365148f66e21383 Mon Sep 17 00:00:00 2001 From: Eh2406 Date: Mon, 9 Jul 2018 13:24:14 -0400 Subject: [PATCH 3/3] make ci happy --- src/docker.rs | 5 ++++- src/ex.rs | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/docker.rs b/src/docker.rs index 8a6244d1a..5c41dc69c 100644 --- a/src/docker.rs +++ b/src/docker.rs @@ -109,7 +109,10 @@ pub fn rust_container(config: RustEnv) -> ContainerConfig { ), ]; if config.enable_unstable_cargo_features { - env.push(("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly".to_string())); + env.push(( + "__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", + "nightly".to_string(), + )); } ContainerConfig { diff --git a/src/ex.rs b/src/ex.rs index ab61c3ff8..02db4b0e3 100644 --- a/src/ex.rs +++ b/src/ex.rs @@ -374,7 +374,12 @@ fn capture_lockfile_inner( path: &Path, toolchain: &Toolchain, ) -> Result<()> { - let args = &["generate-lockfile", "--manifest-path", "Cargo.toml", "-Zno-index-update"]; + let args = &[ + "generate-lockfile", + "--manifest-path", + "Cargo.toml", + "-Zno-index-update", + ]; toolchain .run_cargo(ex, path, args, CargoState::Unlocked, false) .chain_err(|| format!("unable to generate lockfile for {}", krate))?;