Add operations to manage Source.
Source represents operations with the same source directory.
This commit is contained in:
		
							parent
							
								
									66997b2852
								
							
						
					
					
						commit
						d2656a3571
					
				| @ -223,6 +223,74 @@ impl Target { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | impl Source { | ||||||
|  |     fn get_source_management(&self, workspace_dir: &str, target_dir: &str) -> SourceManagement { | ||||||
|  |         let src_dir = self | ||||||
|  |             .from | ||||||
|  |             .as_deref() | ||||||
|  |             .map(|from| { | ||||||
|  |                 PathBuf::from(workspace_dir) | ||||||
|  |                     .join(from) | ||||||
|  |                     .to_string_lossy() | ||||||
|  |                     .to_string() | ||||||
|  |             }) | ||||||
|  |             .unwrap_or(workspace_dir.to_string()); | ||||||
|  |         let mut dirs_to_copy = self.get_dirs_to_copy(&src_dir, target_dir); | ||||||
|  |         let (files_to_copy, files_autodep) = | ||||||
|  |             self.get_files_to_copy_and_autodep(&src_dir, target_dir); | ||||||
|  |         // if files and dirs are all None, we will copy the entire `from` directory
 | ||||||
|  |         if None == self.files && None == self.dirs { | ||||||
|  |             let src = self.from.as_deref().unwrap_or_else(|| { | ||||||
|  |                 error!("field 'from' cannot be empty"); | ||||||
|  |                 std::process::exit(INVALID_BOM_FILE_ERROR); | ||||||
|  |             }); | ||||||
|  |             // add the "/" to the directory and will copy the entire directory
 | ||||||
|  |             let mut new_src = src.to_string(); | ||||||
|  |             if !new_src.ends_with("/") { | ||||||
|  |                 new_src.push('/'); | ||||||
|  |             } | ||||||
|  |             dirs_to_copy.push((new_src, target_dir.to_string())); | ||||||
|  |         } | ||||||
|  |         SourceManagement { | ||||||
|  |             dirs_to_copy, | ||||||
|  |             files_to_copy, | ||||||
|  |             files_autodep, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn get_files_to_copy_and_autodep( | ||||||
|  |         &self, | ||||||
|  |         src_dir: &str, | ||||||
|  |         target_dir: &str, | ||||||
|  |     ) -> (Vec<(String, String)>, Vec<String>) { | ||||||
|  |         let mut files_to_copy = Vec::new(); | ||||||
|  |         let mut files_autodep = Vec::new(); | ||||||
|  |         if let Some(ref files) = self.files { | ||||||
|  |             for file in files { | ||||||
|  |                 let (file_to_copy, file_autodep) = | ||||||
|  |                     file.get_file_to_copy_and_autodep(src_dir, target_dir); | ||||||
|  |                 files_to_copy.extend(file_to_copy.into_iter()); | ||||||
|  |                 files_autodep.extend(file_autodep.into_iter()); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         (files_to_copy, files_autodep) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn get_dirs_to_copy(&self, src_dir: &str, target_dir: &str) -> Vec<(String, String)> { | ||||||
|  |         let mut dirs_to_copy = Vec::new(); | ||||||
|  |         if let Some(ref dirs) = self.dirs { | ||||||
|  |             for dir in dirs { | ||||||
|  |                 let src_path = PathBuf::from(src_dir).join(dir); | ||||||
|  |                 dirs_to_copy.push(( | ||||||
|  |                     src_path.to_string_lossy().to_string(), | ||||||
|  |                     target_dir.to_string(), | ||||||
|  |                 )); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         dirs_to_copy | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| impl BomManagement { | impl BomManagement { | ||||||
|     fn add_target_management(&mut self, mut target_management: TargetManagement, root_dir: &str) { |     fn add_target_management(&mut self, mut target_management: TargetManagement, root_dir: &str) { | ||||||
|         // First, we need to resolve environmental variables
 |         // First, we need to resolve environmental variables
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user