MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / merge_layer_directory

Function merge_layer_directory

crates/openshell-driver-vm/src/driver.rs:3852–3930  ·  view source on GitHub ↗
(source_dir: &Path, target_dir: &Path)

Source from the content-addressed store, hash-verified

3850}
3851
3852fn merge_layer_directory(source_dir: &Path, target_dir: &Path) -> Result<(), String> {
3853 fs::create_dir_all(target_dir)
3854 .map_err(|err| format!("create {}: {err}", target_dir.display()))?;
3855
3856 let mut entries = fs::read_dir(source_dir)
3857 .map_err(|err| format!("read {}: {err}", source_dir.display()))?
3858 .collect::<Result<Vec<_>, _>>()
3859 .map_err(|err| format!("read {}: {err}", source_dir.display()))?;
3860 entries.sort_by_key(fs::DirEntry::file_name);
3861
3862 if entries
3863 .iter()
3864 .any(|entry| entry.file_name().to_string_lossy() == ".wh..wh..opq")
3865 {
3866 clear_directory_contents(target_dir)?;
3867 }
3868
3869 for entry in entries {
3870 let file_name = entry.file_name();
3871 let name = file_name.to_string_lossy();
3872 if name == ".wh..wh..opq" {
3873 continue;
3874 }
3875 if let Some(hidden_name) = name.strip_prefix(".wh.") {
3876 remove_path_if_exists(&target_dir.join(hidden_name))?;
3877 continue;
3878 }
3879
3880 let source_path = entry.path();
3881 let dest_path = target_dir.join(&file_name);
3882 let metadata = fs::symlink_metadata(&source_path)
3883 .map_err(|err| format!("stat {}: {err}", source_path.display()))?;
3884 let file_type = metadata.file_type();
3885
3886 if file_type.is_dir() {
3887 if let Ok(dest_metadata) = fs::symlink_metadata(&dest_path)
3888 && !dest_metadata.file_type().is_dir()
3889 && !path_is_dir_or_symlink_to_dir(&dest_path)?
3890 {
3891 remove_path_if_exists(&dest_path)?;
3892 }
3893 fs::create_dir_all(&dest_path)
3894 .map_err(|err| format!("create {}: {err}", dest_path.display()))?;
3895 merge_layer_directory(&source_path, &dest_path)?;
3896 if fs::symlink_metadata(&dest_path)
3897 .map_err(|err| format!("stat {}: {err}", dest_path.display()))?
3898 .file_type()
3899 .is_dir()
3900 {
3901 fs::set_permissions(&dest_path, metadata.permissions())
3902 .map_err(|err| format!("chmod {}: {err}", dest_path.display()))?;
3903 }
3904 } else if file_type.is_file() {
3905 remove_path_if_exists(&dest_path)?;
3906 if let Some(parent) = dest_path.parent() {
3907 fs::create_dir_all(parent)
3908 .map_err(|err| format!("create {}: {err}", parent.display()))?;
3909 }

Callers 1

Calls 5

clear_directory_contentsFunction · 0.85
remove_path_if_existsFunction · 0.85
copy_symlinkFunction · 0.85
pathMethod · 0.80

Tested by

no test coverage detected