Skip to content

Commit b1f8b5c

Browse files
committed
fix target path when in container
1 parent 37c27b4 commit b1f8b5c

File tree

3 files changed

+35
-29
lines changed

3 files changed

+35
-29
lines changed

.changes/994.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "fixed",
3+
"description": "fixed wrong path used for target when pre-building in container in container mode",
4+
"issues": [993]
5+
}

src/bin/commands/containers.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ pub fn create_persistent_volume(
401401
if let Some(channel) = channel {
402402
toolchain = toolchain.with_picked(&config, channel.clone(), msg_info)?;
403403
};
404-
let (metadata, dirs) = docker::get_package_info(engine, toolchain.clone(), msg_info)?;
404+
let (dirs, metadata) = docker::get_package_info(engine, toolchain.clone(), msg_info)?;
405405
let container = docker::remote::unique_container_identifier(&toolchain_host, &metadata, &dirs)?;
406406
let volume = dirs.toolchain.unique_toolchain_identifier()?;
407407

@@ -490,7 +490,7 @@ pub fn remove_persistent_volume(
490490
if let Some(channel) = channel {
491491
toolchain = toolchain.with_picked(&config, channel.clone(), msg_info)?;
492492
};
493-
let (_, dirs) = docker::get_package_info(engine, toolchain.clone(), msg_info)?;
493+
let (dirs, _) = docker::get_package_info(engine, toolchain.clone(), msg_info)?;
494494
let volume = dirs.toolchain.unique_toolchain_identifier()?;
495495

496496
if !docker::remote::volume_exists(engine, &volume, msg_info)? {

src/docker/shared.rs

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ impl DockerPaths {
201201
toolchain: QualifiedToolchain,
202202
) -> Result<Self> {
203203
let mount_finder = MountFinder::create(engine)?;
204-
let directories = Directories::create(&mount_finder, &metadata, &cwd, toolchain)?;
204+
let (directories, metadata) = Directories::new(&mount_finder, metadata, &cwd, toolchain)?;
205205
Ok(Self {
206206
mount_finder,
207207
metadata,
@@ -259,12 +259,12 @@ pub struct Directories {
259259
}
260260

261261
impl Directories {
262-
pub fn create(
262+
pub fn new(
263263
mount_finder: &MountFinder,
264-
metadata: &CargoMetadata,
264+
mut metadata: CargoMetadata,
265265
cwd: &Path,
266266
mut toolchain: QualifiedToolchain,
267-
) -> Result<Self> {
267+
) -> Result<(Self, CargoMetadata)> {
268268
let home_dir =
269269
home::home_dir().ok_or_else(|| eyre::eyre!("could not find home directory"))?;
270270
let cargo = home::cargo_home()?;
@@ -313,7 +313,7 @@ impl Directories {
313313

314314
let cargo = mount_finder.find_mount_path(cargo);
315315
let xargo = mount_finder.find_mount_path(xargo);
316-
let target = mount_finder.find_mount_path(target);
316+
metadata.target_directory = mount_finder.find_mount_path(target);
317317

318318
// root is either workspace_root, or, if we're outside the workspace root, the current directory
319319
let host_root = mount_finder.find_mount_path(if metadata.workspace_root.starts_with(cwd) {
@@ -332,19 +332,22 @@ impl Directories {
332332
// canonicalize these once to avoid syscalls
333333
let sysroot_mount_path = toolchain.get_sysroot().as_posix_absolute()?;
334334

335-
Ok(Directories {
336-
cargo,
337-
xargo,
338-
target,
339-
nix_store,
340-
host_root,
341-
mount_root,
342-
mount_cwd,
343-
toolchain,
344-
cargo_mount_path,
345-
xargo_mount_path,
346-
sysroot_mount_path,
347-
})
335+
Ok((
336+
Directories {
337+
cargo,
338+
xargo,
339+
target: metadata.target_directory.clone(),
340+
nix_store,
341+
host_root,
342+
mount_root,
343+
mount_cwd,
344+
toolchain,
345+
cargo_mount_path,
346+
xargo_mount_path,
347+
sysroot_mount_path,
348+
},
349+
metadata,
350+
))
348351
}
349352

350353
pub fn get_sysroot(&self) -> &Path {
@@ -422,14 +425,12 @@ pub fn get_package_info(
422425
engine: &Engine,
423426
toolchain: QualifiedToolchain,
424427
msg_info: &mut MessageInfo,
425-
) -> Result<(CargoMetadata, Directories)> {
428+
) -> Result<(Directories, CargoMetadata)> {
426429
let metadata = cargo_metadata_with_args(None, None, msg_info)?
427430
.ok_or(eyre::eyre!("unable to get project metadata"))?;
428431
let mount_finder = MountFinder::create(engine)?;
429432
let cwd = std::env::current_dir()?;
430-
let dirs = Directories::create(&mount_finder, &metadata, &cwd, toolchain)?;
431-
432-
Ok((metadata, dirs))
433+
Directories::new(&mount_finder, metadata, &cwd, toolchain)
433434
}
434435

435436
/// Register binfmt interpreters
@@ -1114,12 +1115,12 @@ mod tests {
11141115
}
11151116

11161117
fn get_directories(
1117-
metadata: &CargoMetadata,
1118+
metadata: CargoMetadata,
11181119
mount_finder: &MountFinder,
1119-
) -> Result<Directories> {
1120+
) -> Result<(Directories, CargoMetadata)> {
11201121
let cwd = get_cwd()?;
11211122
let toolchain = get_toolchain()?;
1122-
Directories::create(mount_finder, metadata, &cwd, toolchain)
1123+
Directories::new(mount_finder, metadata, &cwd, toolchain)
11231124
}
11241125

11251126
#[track_caller]
@@ -1134,7 +1135,7 @@ mod tests {
11341135
let vars = unset_env();
11351136
let mount_finder = MountFinder::new(vec![]);
11361137
let metadata = cargo_metadata(false, &mut MessageInfo::default())?;
1137-
let directories = get_directories(&metadata, &mount_finder)?;
1138+
let (directories, metadata) = get_directories(metadata, &mount_finder)?;
11381139
paths_equal(&directories.cargo, &home()?.join(".cargo"))?;
11391140
paths_equal(&directories.xargo, &home()?.join(".xargo"))?;
11401141
paths_equal(&directories.host_root, &metadata.workspace_root)?;
@@ -1179,7 +1180,7 @@ mod tests {
11791180

11801181
let mount_finder = MountFinder::create(&engine)?;
11811182
let metadata = cargo_metadata(true, &mut msg_info)?;
1182-
let directories = get_directories(&metadata, &mount_finder)?;
1183+
let (directories, _) = get_directories(metadata, &mount_finder)?;
11831184
let mount_finder = MountFinder::new(docker_read_mount_paths(&engine)?);
11841185
let mount_path = |p| mount_finder.find_mount_path(p);
11851186

0 commit comments

Comments
 (0)