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