Skip to content

Commit 143e366

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

File tree

3 files changed

+36
-29
lines changed

3 files changed

+36
-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: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ 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) =
205+
Directories::assemble(&mount_finder, metadata, &cwd, toolchain)?;
205206
Ok(Self {
206207
mount_finder,
207208
metadata,
@@ -259,12 +260,12 @@ pub struct Directories {
259260
}
260261

261262
impl Directories {
262-
pub fn create(
263+
pub fn assemble(
263264
mount_finder: &MountFinder,
264-
metadata: &CargoMetadata,
265+
mut metadata: CargoMetadata,
265266
cwd: &Path,
266267
mut toolchain: QualifiedToolchain,
267-
) -> Result<Self> {
268+
) -> Result<(Self, CargoMetadata)> {
268269
let home_dir =
269270
home::home_dir().ok_or_else(|| eyre::eyre!("could not find home directory"))?;
270271
let cargo = home::cargo_home()?;
@@ -313,7 +314,7 @@ impl Directories {
313314

314315
let cargo = mount_finder.find_mount_path(cargo);
315316
let xargo = mount_finder.find_mount_path(xargo);
316-
let target = mount_finder.find_mount_path(target);
317+
metadata.target_directory = mount_finder.find_mount_path(target);
317318

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

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-
})
336+
Ok((
337+
Directories {
338+
cargo,
339+
xargo,
340+
target: metadata.target_directory.clone(),
341+
nix_store,
342+
host_root,
343+
mount_root,
344+
mount_cwd,
345+
toolchain,
346+
cargo_mount_path,
347+
xargo_mount_path,
348+
sysroot_mount_path,
349+
},
350+
metadata,
351+
))
348352
}
349353

350354
pub fn get_sysroot(&self) -> &Path {
@@ -422,14 +426,12 @@ pub fn get_package_info(
422426
engine: &Engine,
423427
toolchain: QualifiedToolchain,
424428
msg_info: &mut MessageInfo,
425-
) -> Result<(CargoMetadata, Directories)> {
429+
) -> Result<(Directories, CargoMetadata)> {
426430
let metadata = cargo_metadata_with_args(None, None, msg_info)?
427431
.ok_or(eyre::eyre!("unable to get project metadata"))?;
428432
let mount_finder = MountFinder::create(engine)?;
429433
let cwd = std::env::current_dir()?;
430-
let dirs = Directories::create(&mount_finder, &metadata, &cwd, toolchain)?;
431-
432-
Ok((metadata, dirs))
434+
Directories::assemble(&mount_finder, metadata, &cwd, toolchain)
433435
}
434436

435437
/// Register binfmt interpreters
@@ -1114,12 +1116,12 @@ mod tests {
11141116
}
11151117

11161118
fn get_directories(
1117-
metadata: &CargoMetadata,
1119+
metadata: CargoMetadata,
11181120
mount_finder: &MountFinder,
1119-
) -> Result<Directories> {
1121+
) -> Result<(Directories, CargoMetadata)> {
11201122
let cwd = get_cwd()?;
11211123
let toolchain = get_toolchain()?;
1122-
Directories::create(mount_finder, metadata, &cwd, toolchain)
1124+
Directories::assemble(mount_finder, metadata, &cwd, toolchain)
11231125
}
11241126

11251127
#[track_caller]
@@ -1134,7 +1136,7 @@ mod tests {
11341136
let vars = unset_env();
11351137
let mount_finder = MountFinder::new(vec![]);
11361138
let metadata = cargo_metadata(false, &mut MessageInfo::default())?;
1137-
let directories = get_directories(&metadata, &mount_finder)?;
1139+
let (directories, metadata) = get_directories(metadata, &mount_finder)?;
11381140
paths_equal(&directories.cargo, &home()?.join(".cargo"))?;
11391141
paths_equal(&directories.xargo, &home()?.join(".xargo"))?;
11401142
paths_equal(&directories.host_root, &metadata.workspace_root)?;
@@ -1179,7 +1181,7 @@ mod tests {
11791181

11801182
let mount_finder = MountFinder::create(&engine)?;
11811183
let metadata = cargo_metadata(true, &mut msg_info)?;
1182-
let directories = get_directories(&metadata, &mount_finder)?;
1184+
let (directories, _) = get_directories(metadata, &mount_finder)?;
11831185
let mount_finder = MountFinder::new(docker_read_mount_paths(&engine)?);
11841186
let mount_path = |p| mount_finder.find_mount_path(p);
11851187

0 commit comments

Comments
 (0)