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