Properly clean up dnagling unmanaged entries in the state file.
This commit is contained in:
parent
16b3a09558
commit
5b91600523
1 changed files with 26 additions and 10 deletions
|
|
@ -125,7 +125,7 @@ impl EtcTree {
|
||||||
where
|
where
|
||||||
F: Fn(&Path) -> bool,
|
F: Fn(&Path) -> bool,
|
||||||
{
|
{
|
||||||
let new_tree = self.nested.clone().keys().fold(self, |mut new_tree, name| {
|
let new_tree = self.nested.keys().fold(self.clone(), |mut new_tree, name| {
|
||||||
new_tree.nested = new_tree.nested.alter(
|
new_tree.nested = new_tree.nested.alter(
|
||||||
|subtree| subtree.and_then(|subtree| subtree.deactivate(delete_action)),
|
|subtree| subtree.and_then(|subtree| subtree.deactivate(delete_action)),
|
||||||
name.to_owned(),
|
name.to_owned(),
|
||||||
|
|
@ -133,12 +133,16 @@ impl EtcTree {
|
||||||
new_tree
|
new_tree
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if new_tree.nested.is_empty() {
|
||||||
if let EtcFileStatus::Managed = new_tree.status {
|
if let EtcFileStatus::Managed = new_tree.status {
|
||||||
if new_tree.nested.is_empty() && delete_action(&new_tree.path) {
|
if delete_action(&new_tree.path) {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(new_tree)
|
Some(new_tree)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Some(new_tree)
|
Some(new_tree)
|
||||||
}
|
}
|
||||||
|
|
@ -185,6 +189,11 @@ impl EtcTree {
|
||||||
new_tree
|
new_tree
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if merged.nested.is_empty() {
|
||||||
|
if let EtcFileStatus::Unmanaged = merged.status {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
}
|
||||||
Some(merged)
|
Some(merged)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -291,7 +300,11 @@ mod tests {
|
||||||
.register_managed_entry(&PathBuf::from("/").join("foo3").join("baz2").join("bar"))
|
.register_managed_entry(&PathBuf::from("/").join("foo3").join("baz2").join("bar"))
|
||||||
.register_managed_entry(&PathBuf::from("/").join("foo4"))
|
.register_managed_entry(&PathBuf::from("/").join("foo4"))
|
||||||
.register_managed_entry(&PathBuf::from("/").join("foo4").join("baz"))
|
.register_managed_entry(&PathBuf::from("/").join("foo4").join("baz"))
|
||||||
.register_managed_entry(&PathBuf::from("/").join("foo4").join("baz").join("bar"));
|
.register_managed_entry(&PathBuf::from("/").join("foo4").join("baz").join("bar"))
|
||||||
|
.register_managed_entry(&PathBuf::from("/").join("foo5"))
|
||||||
|
.register_managed_entry(&PathBuf::from("/").join("foo5").join("baz"))
|
||||||
|
.register_managed_entry(&PathBuf::from("/").join("foo5").join("baz2"))
|
||||||
|
.register_managed_entry(&PathBuf::from("/").join("foo5").join("baz").join("bar"));
|
||||||
let tree2 = tree1
|
let tree2 = tree1
|
||||||
.clone()
|
.clone()
|
||||||
.deactivate_managed_entry(&PathBuf::from("/").join("foo4"), &|p| {
|
.deactivate_managed_entry(&PathBuf::from("/").join("foo4"), &|p| {
|
||||||
|
|
@ -302,19 +315,22 @@ mod tests {
|
||||||
println!("Deactivating: {}", p.display());
|
println!("Deactivating: {}", p.display());
|
||||||
true
|
true
|
||||||
})
|
})
|
||||||
// Since foo3 is unmanaged, it should not be removed
|
|
||||||
.deactivate_managed_entry(&PathBuf::from("/").join("foo3"), &|p| {
|
.deactivate_managed_entry(&PathBuf::from("/").join("foo3"), &|p| {
|
||||||
println!("Deactivating: {}", p.display());
|
println!("Deactivating: {}", p.display());
|
||||||
true
|
true
|
||||||
|
})
|
||||||
|
.deactivate_managed_entry(&PathBuf::from("/").join("foo5").join("baz"), &|p| {
|
||||||
|
println!("Deactivating: {}", p.display());
|
||||||
|
true
|
||||||
});
|
});
|
||||||
dbg!(&tree1);
|
dbg!(&tree1);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
tree2.nested.keys().sorted().collect::<Vec<_>>(),
|
tree2.nested.keys().sorted().collect::<Vec<_>>(),
|
||||||
["foo", "foo3", "foo4"]
|
["foo", "foo4", "foo5"]
|
||||||
);
|
);
|
||||||
assert!(tree2
|
assert!(tree2
|
||||||
.nested
|
.nested
|
||||||
.get("foo3")
|
.get("foo5")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.nested
|
.nested
|
||||||
.get("baz2")
|
.get("baz2")
|
||||||
|
|
@ -326,7 +342,7 @@ mod tests {
|
||||||
.is_empty());
|
.is_empty());
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
tree1.nested.keys().sorted().collect::<Vec<_>>(),
|
tree1.nested.keys().sorted().collect::<Vec<_>>(),
|
||||||
["foo", "foo2", "foo3", "foo4"]
|
["foo", "foo2", "foo3", "foo4", "foo5"]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue