@@ -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
261262impl 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