Merge pull request #15 from alexwlchan/also-delete-parents
- ID
dd08671- date
2024-08-21 08:26:32+00:00- author
Alex Chan <alex@alexwlchan.net>- parents
626aff8,bb97012- message
Merge pull request #15 from alexwlchan/also-delete-parents Delete empty parent directories which are above the initial target- changed files
4 files, 43 additions, 15 deletions
Changed files
CHANGELOG.md (481) → CHANGELOG.md (759)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6a89052..e6e0fd8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## v1.2.0 - 2024-08-21
+
+Delete empty parent directories.
+
+If the target directory is the only entry in an otherwise empty directory, then the parent directory will also be deleted (and emptydir will keep going through parent directories until it finds one which is non-empty).
+
## v1.1.3 - 2024-08-21
Delete empty folders which only contain a `.jekyll-cache` folder.
Cargo.lock (13005) → Cargo.lock (13005)
diff --git a/Cargo.lock b/Cargo.lock
index 584c299..6a2c3a9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -115,7 +115,7 @@ dependencies = [
[[package]]
name = "emptydir"
-version = "1.1.3"
+version = "1.2.0"
dependencies = [
"clap",
"colored",
Cargo.toml (203) → Cargo.toml (203)
diff --git a/Cargo.toml b/Cargo.toml
index 62a108c..ecdae58 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "emptydir"
-version = "1.1.3"
+version = "1.2.0"
edition = "2021"
[dependencies]
src/emptydir.rs (4571) → src/emptydir.rs (5270)
diff --git a/src/emptydir.rs b/src/emptydir.rs
index e333c87..39306df 100644
--- a/src/emptydir.rs
+++ b/src/emptydir.rs
@@ -27,6 +27,26 @@ pub fn emptydir(root: &Path) -> u32 {
};
}
+ // Now work our way upward through the parent directories, and
+ // delete any of those which are empty.
+ let mut current_parent = root.parent();
+
+ while let Some(parent) = current_parent {
+ if crate::can_be_deleted::can_be_deleted(parent) {
+ match fs::remove_dir_all(parent) {
+ Ok(_) => {
+ println!("{}", parent.display());
+ count_deleted += 1;
+ }
+ Err(_) => (),
+ };
+
+ current_parent = parent.parent();
+ } else {
+ break;
+ }
+ }
+
count_deleted
}
@@ -47,7 +67,7 @@ mod test_emptydir {
fs::create_dir_all(dir).unwrap();
}
- fn create_file(path: PathBuf) {
+ fn create_file(path: &PathBuf) {
create_dir(&path.parent().unwrap().to_path_buf());
fs::write(&path, "this file is for testing").unwrap();
}
@@ -82,7 +102,7 @@ mod test_emptydir {
// Create the directory, then add a text file
create_dir(&dir);
- create_file(dir.join("greeting.txt"));
+ create_file(&dir.join("greeting.txt"));
assert_eq!(emptydir(&dir), 0);
assert_eq!(dir.exists(), true);
@@ -109,15 +129,15 @@ mod test_emptydir {
create_dir(&dir);
create_dir(&dir.join(".venv"));
- create_file(dir.join(".venv/bin/mypython.py"));
+ create_file(&dir.join(".venv/bin/mypython.py"));
create_dir(&dir.join(".ipynb_checkpoints"));
- create_file(dir.join(".ipynb_checkpoints/analysis-checkpoint.ipynb"));
+ create_file(&dir.join(".ipynb_checkpoints/analysis-checkpoint.ipynb"));
create_dir(&dir.join("__pycache__"));
- create_file(dir.join("__pycache__/myfile.pyc"));
+ create_file(&dir.join("__pycache__/myfile.pyc"));
- create_file(dir.join(".DS_Store"));
+ create_file(&dir.join(".DS_Store"));
assert_eq!(emptydir(&dir), 1);
assert_eq!(dir.exists(), false);
@@ -129,11 +149,12 @@ mod test_emptydir {
create_dir(&dir);
- create_file(dir.join(".DS_Store"));
- create_file(dir.join("greeting.txt"));
+ create_file(&dir.join(".DS_Store"));
+ create_file(&dir.join("greeting.txt"));
assert_eq!(emptydir(&dir), 0);
- assert_eq!(dir.exists(), true);
+ assert!(dir.exists());
+ assert!(dir.join("greeting.txt").exists());
}
#[test]
@@ -157,17 +178,18 @@ mod test_emptydir {
create_dir(&subdir);
create_dir(&subdir.join(".venv"));
- create_file(subdir.join(".venv/bin/mypython.py"));
+ create_file(&subdir.join(".venv/bin/mypython.py"));
create_dir(&subdir.join("__pycache__"));
- create_file(subdir.join("__pycache__/myfile.pyc"));
+ create_file(&subdir.join("__pycache__/myfile.pyc"));
- create_file(subdir.join(".DS_Store"));
+ create_file(&subdir.join(".DS_Store"));
- create_file(dir.join("greeting.txt"));
+ create_file(&dir.join("greeting.txt"));
assert_eq!(emptydir(&dir), 1);
assert_eq!(dir.exists(), true);
assert_eq!(subdir.exists(), false);
+ assert!(dir.join("greeting.txt").exists());
}
}