dkl apply-config --dry-run

This commit is contained in:
Mikaël Cluseau
2026-02-21 18:15:39 +01:00
parent ddc82199fb
commit d449fc8dcf
5 changed files with 56 additions and 13 deletions

View File

@@ -5,25 +5,59 @@ use tokio::fs;
use crate::base64_decode;
pub async fn files(files: &[crate::File], root: &str) -> Result<()> {
pub async fn files(files: &[crate::File], root: &str, dry_run: bool) -> Result<()> {
for file in files {
let path = chroot(root, &file.path);
let path = Path::new(&path);
if let Some(parent) = path.parent() {
if !dry_run && let Some(parent) = path.parent() {
fs::create_dir_all(parent).await?;
}
use crate::FileKind as K;
match &file.kind {
K::Content(content) => fs::write(path, content.as_bytes()).await?,
K::Content(content) => {
if dry_run {
info!(
"would create {} ({} bytes from content)",
file.path,
content.len()
);
} else {
fs::write(path, content.as_bytes()).await?;
}
}
K::Content64(content) => {
let content = base64_decode(content)?;
fs::write(path, content).await?
if dry_run {
info!(
"would create {} ({} bytes from content64)",
file.path,
content.len()
);
} else {
fs::write(path, content).await?
}
}
K::Dir(true) => {
if dry_run {
info!("would create {} (directory)", file.path);
} else {
fs::create_dir(path).await?;
}
}
K::Dir(true) => fs::create_dir(path).await?,
K::Dir(false) => {} // shouldn't happen, but semantic is to ignore
K::Symlink(tgt) => fs::symlink(tgt, path).await?,
K::Symlink(tgt) => {
if dry_run {
info!("would create {} (symlink to {})", file.path, tgt);
} else {
fs::symlink(tgt, path).await?;
}
}
}
if dry_run {
continue;
}
match file.kind {