Skip to content

Commit a785e2f

Browse files
committed
Calculate lockfiles in docker.
1 parent 540a892 commit a785e2f

File tree

3 files changed

+42
-39
lines changed

3 files changed

+42
-39
lines changed

src/ex.rs

+5-7
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::fs;
1212
use std::path::{Path, PathBuf};
1313
use std::str::FromStr;
1414
use toml_frobber;
15-
use toolchain::{self, Toolchain};
15+
use toolchain::{self, CargoState, Toolchain};
1616
use util;
1717

1818
#[derive(Serialize, Deserialize)]
@@ -424,10 +424,9 @@ fn capture_lockfile(ex: &Experiment,
424424
path: &Path,
425425
toolchain: &Toolchain)
426426
-> Result<()> {
427-
let manifest_path = path.join("Cargo.toml").to_string_lossy().to_string();
428-
let args = &["generate-lockfile", "--manifest-path", &*manifest_path];
427+
let args = &["generate-lockfile", "--manifest-path", "Cargo.toml"];
429428
toolchain
430-
.run_cargo(&ex.name, args)
429+
.run_cargo(&ex.name, path, args, CargoState::Unlocked)
431430
.chain_err(|| format!("unable to generate lockfile for {}", crate_))?;
432431

433432
let src_lockfile = &path.join("Cargo.lock");
@@ -472,10 +471,9 @@ pub fn fetch_deps(ex: &Experiment, toolchain: &Toolchain) -> Result<()> {
472471
with_frobbed_toml(ex, c, path)?;
473472
with_captured_lockfile(ex, c, path)?;
474473

475-
let manifest_path = path.join("Cargo.toml").to_string_lossy().to_string();
476-
let args = &["fetch", "--locked", "--manifest-path", &*manifest_path];
474+
let args = &["fetch", "--locked", "--manifest-path", "Cargo.toml"];
477475
toolchain
478-
.run_cargo(&ex.name, args)
476+
.run_cargo(&ex.name, path, args, CargoState::Unlocked)
479477
.chain_err(|| format!("unable to fetch deps for {}", c))?;
480478

481479
Ok(())

src/ex_run.rs

+21-10
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use results::{CrateResultWriter, ExperimentResultDB, FileDB, TestResult};
66
use std::collections::HashSet;
77
use std::path::Path;
88
use std::time::Instant;
9-
use toolchain::Toolchain;
9+
use toolchain::{CargoState, Toolchain};
1010
use util;
1111

1212
pub fn delete_all_results(ex_name: &str) -> Result<()> {
@@ -173,19 +173,24 @@ fn test_build_and_test(ex: &Experiment,
173173
source_path: &Path,
174174
toolchain: &Toolchain)
175175
-> Result<TestResult> {
176-
let build_r = toolchain.run_cargo_in_docker(&ex.name, source_path, &["build", "--frozen"]);
176+
let build_r = toolchain.run_cargo(&ex.name,
177+
source_path,
178+
&["build", "--frozen"],
179+
CargoState::Locked);
177180
let mut test_r;
178181

179182
if build_r.is_ok() {
180183
// First build, with --no-run
181-
test_r = Some(toolchain.run_cargo_in_docker(&ex.name,
182-
source_path.into(),
183-
&["test", "--frozen", "--no-run"]));
184+
test_r = Some(toolchain.run_cargo(&ex.name,
185+
source_path.into(),
186+
&["test", "--frozen", "--no-run"],
187+
CargoState::Locked));
184188
// Then run
185189
test_r = test_r.map(|_| {
186-
toolchain.run_cargo_in_docker(&ex.name,
187-
source_path.into(),
188-
&["test", "--frozen"])
190+
toolchain.run_cargo(&ex.name,
191+
source_path.into(),
192+
&["test", "--frozen"],
193+
CargoState::Locked)
189194
});
190195
} else {
191196
test_r = None;
@@ -203,7 +208,10 @@ fn test_build_only(ex: &Experiment,
203208
source_path: &Path,
204209
toolchain: &Toolchain)
205210
-> Result<TestResult> {
206-
let r = toolchain.run_cargo_in_docker(&ex.name, source_path.into(), &["build", "--frozen"]);
211+
let r = toolchain.run_cargo(&ex.name,
212+
source_path.into(),
213+
&["build", "--frozen"],
214+
CargoState::Locked);
207215

208216
if r.is_ok() {
209217
Ok(TestResult::TestPass)
@@ -216,7 +224,10 @@ fn test_check_only(ex: &Experiment,
216224
source_path: &Path,
217225
toolchain: &Toolchain)
218226
-> Result<TestResult> {
219-
let r = toolchain.run_cargo_in_docker(&ex.name, source_path.into(), &["check", "--frozen"]);
227+
let r = toolchain.run_cargo(&ex.name,
228+
source_path.into(),
229+
&["check", "--frozen"],
230+
CargoState::Locked);
220231

221232
if r.is_ok() {
222233
Ok(TestResult::TestPass)

src/toolchain.rs

+16-22
Original file line numberDiff line numberDiff line change
@@ -181,32 +181,22 @@ pub fn ex_target_dir(ex_name: &str) -> PathBuf {
181181
Path::new(TARGET_DIR).join(ex_name)
182182
}
183183

184+
pub enum CargoState {
185+
Locked,
186+
Unlocked,
187+
}
188+
184189
impl Toolchain {
185190
pub fn target_dir(&self, ex_name: &str) -> PathBuf {
186191
ex_target_dir(ex_name).join(self.to_string())
187192
}
188193

189-
pub fn run_cargo(&self, ex_name: &str, args: &[&str]) -> Result<()> {
190-
let toolchain_name = self.rustup_name();
191-
let ex_target_dir = self.target_dir(ex_name);
192-
193-
fs::create_dir_all(&ex_target_dir)?;
194-
195-
let toolchain_arg = "+".to_string() + &toolchain_name;
196-
let mut full_args = vec![&*toolchain_arg];
197-
full_args.extend_from_slice(args);
198-
199-
let cargo = Path::new(CARGO_HOME).join("bin/cargo");
200-
rustup_run(&cargo.to_string_lossy(),
201-
&full_args,
202-
&[("CARGO_TARGET_DIR", &ex_target_dir.to_string_lossy())])
203-
}
204-
205-
pub fn run_cargo_in_docker(&self,
206-
ex_name: &str,
207-
source_dir: &Path,
208-
args: &[&str])
209-
-> Result<()> {
194+
pub fn run_cargo(&self,
195+
ex_name: &str,
196+
source_dir: &Path,
197+
args: &[&str],
198+
cargo_state: CargoState)
199+
-> Result<()> {
210200
let toolchain_name = self.rustup_name();
211201
let ex_target_dir = self.target_dir(ex_name);
212202

@@ -220,7 +210,11 @@ impl Toolchain {
220210
let rust_env = docker::RustEnv {
221211
args: &full_args,
222212
work_dir: (source_dir.into(), docker::Perm::ReadOnly),
223-
cargo_home: (Path::new(CARGO_HOME).into(), docker::Perm::ReadOnly),
213+
cargo_home: (Path::new(CARGO_HOME).into(),
214+
match cargo_state {
215+
CargoState::Locked => docker::Perm::ReadOnly,
216+
CargoState::Unlocked => docker::Perm::ReadWrite,
217+
}),
224218
rustup_home: (Path::new(RUSTUP_HOME).into(), docker::Perm::ReadOnly),
225219
// This is configured as CARGO_TARGET_DIR by the docker container itself
226220
target_dir: (ex_target_dir, docker::Perm::ReadWrite),

0 commit comments

Comments
 (0)