@@ -201,7 +201,8 @@ impl DockerPaths {
201
201
toolchain : QualifiedToolchain ,
202
202
) -> Result < Self > {
203
203
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) ?;
205
206
Ok ( Self {
206
207
mount_finder,
207
208
metadata,
@@ -259,12 +260,12 @@ pub struct Directories {
259
260
}
260
261
261
262
impl Directories {
262
- pub fn create (
263
+ pub fn assemble (
263
264
mount_finder : & MountFinder ,
264
- metadata : & CargoMetadata ,
265
+ mut metadata : CargoMetadata ,
265
266
cwd : & Path ,
266
267
mut toolchain : QualifiedToolchain ,
267
- ) -> Result < Self > {
268
+ ) -> Result < ( Self , CargoMetadata ) > {
268
269
let home_dir =
269
270
home:: home_dir ( ) . ok_or_else ( || eyre:: eyre!( "could not find home directory" ) ) ?;
270
271
let cargo = home:: cargo_home ( ) ?;
@@ -313,7 +314,7 @@ impl Directories {
313
314
314
315
let cargo = mount_finder. find_mount_path ( cargo) ;
315
316
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) ;
317
318
318
319
// root is either workspace_root, or, if we're outside the workspace root, the current directory
319
320
let host_root = mount_finder. find_mount_path ( if metadata. workspace_root . starts_with ( cwd) {
@@ -332,19 +333,22 @@ impl Directories {
332
333
// canonicalize these once to avoid syscalls
333
334
let sysroot_mount_path = toolchain. get_sysroot ( ) . as_posix_absolute ( ) ?;
334
335
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
+ ) )
348
352
}
349
353
350
354
pub fn get_sysroot ( & self ) -> & Path {
@@ -422,14 +426,12 @@ pub fn get_package_info(
422
426
engine : & Engine ,
423
427
toolchain : QualifiedToolchain ,
424
428
msg_info : & mut MessageInfo ,
425
- ) -> Result < ( CargoMetadata , Directories ) > {
429
+ ) -> Result < ( Directories , CargoMetadata ) > {
426
430
let metadata = cargo_metadata_with_args ( None , None , msg_info) ?
427
431
. ok_or ( eyre:: eyre!( "unable to get project metadata" ) ) ?;
428
432
let mount_finder = MountFinder :: create ( engine) ?;
429
433
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)
433
435
}
434
436
435
437
/// Register binfmt interpreters
@@ -1114,12 +1116,12 @@ mod tests {
1114
1116
}
1115
1117
1116
1118
fn get_directories (
1117
- metadata : & CargoMetadata ,
1119
+ metadata : CargoMetadata ,
1118
1120
mount_finder : & MountFinder ,
1119
- ) -> Result < Directories > {
1121
+ ) -> Result < ( Directories , CargoMetadata ) > {
1120
1122
let cwd = get_cwd ( ) ?;
1121
1123
let toolchain = get_toolchain ( ) ?;
1122
- Directories :: create ( mount_finder, metadata, & cwd, toolchain)
1124
+ Directories :: assemble ( mount_finder, metadata, & cwd, toolchain)
1123
1125
}
1124
1126
1125
1127
#[ track_caller]
@@ -1134,7 +1136,7 @@ mod tests {
1134
1136
let vars = unset_env ( ) ;
1135
1137
let mount_finder = MountFinder :: new ( vec ! [ ] ) ;
1136
1138
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) ?;
1138
1140
paths_equal ( & directories. cargo , & home ( ) ?. join ( ".cargo" ) ) ?;
1139
1141
paths_equal ( & directories. xargo , & home ( ) ?. join ( ".xargo" ) ) ?;
1140
1142
paths_equal ( & directories. host_root , & metadata. workspace_root ) ?;
@@ -1179,7 +1181,7 @@ mod tests {
1179
1181
1180
1182
let mount_finder = MountFinder :: create ( & engine) ?;
1181
1183
let metadata = cargo_metadata ( true , & mut msg_info) ?;
1182
- let directories = get_directories ( & metadata, & mount_finder) ?;
1184
+ let ( directories, _ ) = get_directories ( metadata, & mount_finder) ?;
1183
1185
let mount_finder = MountFinder :: new ( docker_read_mount_paths ( & engine) ?) ;
1184
1186
let mount_path = |p| mount_finder. find_mount_path ( p) ;
1185
1187
0 commit comments