@@ -19,6 +19,7 @@ use std::time::SystemTime;
1919#[ derive( Debug , Clone ) ]
2020pub struct SourceFileMeta {
2121 pub modified : SystemTime ,
22+ pub is_type_dev : bool ,
2223}
2324
2425#[ derive( Debug , Clone ) ]
@@ -112,6 +113,13 @@ impl Package {
112113 . expect ( "namespace should be set for mlmap module" ) ;
113114 self . get_build_path ( ) . join ( format ! ( "{}.cmi" , suffix) )
114115 }
116+
117+ pub fn is_source_file_type_dev ( & self , path : & Path ) -> bool {
118+ self . source_files
119+ . as_ref ( )
120+ . and_then ( |sf| sf. get ( path) . map ( |sfm| sfm. is_type_dev ) )
121+ . unwrap_or ( false )
122+ }
115123}
116124
117125impl PartialEq for Package {
@@ -138,6 +146,7 @@ pub fn read_folders(
138146 package_dir : & Path ,
139147 path : & Path ,
140148 recurse : bool ,
149+ is_type_dev : bool ,
141150) -> Result < AHashMap < PathBuf , SourceFileMeta > , Box < dyn error:: Error > > {
142151 let mut map: AHashMap < PathBuf , SourceFileMeta > = AHashMap :: new ( ) ;
143152 let path_buf = PathBuf :: from ( path) ;
@@ -147,6 +156,7 @@ pub fn read_folders(
147156 path. to_owned ( ) ,
148157 SourceFileMeta {
149158 modified : meta. modified ( ) . unwrap ( ) ,
159+ is_type_dev,
150160 } ,
151161 )
152162 } ) ;
@@ -159,7 +169,7 @@ pub fn read_folders(
159169 let path_ext = entry_path_buf. extension ( ) . and_then ( |x| x. to_str ( ) ) ;
160170 let new_path = path_buf. join ( & name) ;
161171 if metadata. file_type ( ) . is_dir ( ) && recurse {
162- match read_folders ( filter, package_dir, & new_path, recurse) {
172+ match read_folders ( filter, package_dir, & new_path, recurse, is_type_dev ) {
163173 Ok ( s) => map. extend ( s) ,
164174 Err ( e) => log:: error!( "Could not read directory: {}" , e) ,
165175 }
@@ -174,6 +184,7 @@ pub fn read_folders(
174184 path,
175185 SourceFileMeta {
176186 modified : metadata. modified ( ) . unwrap ( ) ,
187+ is_type_dev,
177188 } ,
178189 ) ;
179190 }
@@ -297,11 +308,16 @@ fn read_dependencies(
297308 project_root : & Path ,
298309 workspace_root : & Option < PathBuf > ,
299310 show_progress : bool ,
311+ build_dev_deps : bool ,
300312) -> Vec < Dependency > {
301- return parent_config
302- . bs_dependencies
303- . to_owned ( )
304- . unwrap_or_default ( )
313+ let mut dependencies = parent_config. bs_dependencies . to_owned ( ) . unwrap_or_default ( ) ;
314+
315+ // Concatenate dev dependencies if build_dev_deps is true
316+ if build_dev_deps && let Some ( dev_deps) = parent_config. bs_dev_dependencies . to_owned ( ) {
317+ dependencies. extend ( dev_deps) ;
318+ }
319+
320+ dependencies
305321 . iter ( )
306322 . filter_map ( |package_name| {
307323 if registered_dependencies_set. contains ( package_name) {
@@ -360,7 +376,8 @@ fn read_dependencies(
360376 & canonical_path,
361377 project_root,
362378 workspace_root,
363- show_progress
379+ show_progress,
380+ build_dev_deps
364381 ) ;
365382
366383 Dependency {
@@ -371,7 +388,7 @@ fn read_dependencies(
371388 dependencies,
372389 }
373390 } )
374- . collect :: < Vec < Dependency > > ( ) ;
391+ . collect ( )
375392}
376393
377394fn flatten_dependencies ( dependencies : Vec < Dependency > ) -> Vec < Dependency > {
@@ -461,6 +478,7 @@ fn read_packages(
461478 project_root : & Path ,
462479 workspace_root : & Option < PathBuf > ,
463480 show_progress : bool ,
481+ build_dev_deps : bool ,
464482) -> Result < AHashMap < String , Package > > {
465483 let root_config = read_config ( project_root) ?;
466484
@@ -477,6 +495,7 @@ fn read_packages(
477495 project_root,
478496 workspace_root,
479497 show_progress,
498+ build_dev_deps,
480499 ) ) ;
481500 dependencies. iter ( ) . for_each ( |d| {
482501 if !map. contains_key ( & d. name ) {
@@ -515,9 +534,14 @@ pub fn get_source_files(
515534 } ;
516535
517536 let path_dir = Path :: new ( & source. dir ) ;
537+ let is_type_dev = type_
538+ . as_ref ( )
539+ . map ( |t| t. as_str ( ) == "dev" )
540+ . unwrap_or ( false )
541+ . clone ( ) ;
518542 match ( build_dev_deps, type_) {
519543 ( false , Some ( type_) ) if type_ == "dev" => ( ) ,
520- _ => match read_folders ( filter, package_dir, path_dir, recurse) {
544+ _ => match read_folders ( filter, package_dir, path_dir, recurse, is_type_dev ) {
521545 Ok ( files) => map. extend ( files) ,
522546
523547 Err ( _e) => log:: error!(
@@ -596,7 +620,7 @@ pub fn make(
596620 show_progress : bool ,
597621 build_dev_deps : bool ,
598622) -> Result < AHashMap < String , Package > > {
599- let map = read_packages ( root_folder, workspace_root, show_progress) ?;
623+ let map = read_packages ( root_folder, workspace_root, show_progress, build_dev_deps ) ?;
600624
601625 /* Once we have the deduplicated packages, we can add the source files for each - to minimize
602626 * the IO */
@@ -720,6 +744,8 @@ pub fn parse_packages(build_state: &mut BuildState) {
720744 compile_dirty : false ,
721745 last_compiled_cmt : None ,
722746 last_compiled_cmi : None ,
747+ // Not sure if this is correct
748+ is_type_dev : false ,
723749 } ,
724750 ) ;
725751 } ) ;
@@ -772,6 +798,7 @@ pub fn parse_packages(build_state: &mut BuildState) {
772798 compile_dirty : true ,
773799 last_compiled_cmt : None ,
774800 last_compiled_cmi : None ,
801+ is_type_dev : metadata. is_type_dev ,
775802 } ) ;
776803 } else {
777804 // remove last character of string: resi -> res, rei -> re, mli -> ml
@@ -833,6 +860,7 @@ pub fn parse_packages(build_state: &mut BuildState) {
833860 compile_dirty : true ,
834861 last_compiled_cmt : None ,
835862 last_compiled_cmi : None ,
863+ is_type_dev : metadata. is_type_dev ,
836864 } ) ;
837865 }
838866 }
0 commit comments