diff --git a/yama/src/debug.rs b/yama/src/debug.rs index 3e5a375..4bd43a6 100644 --- a/yama/src/debug.rs +++ b/yama/src/debug.rs @@ -15,13 +15,12 @@ You should have received a copy of the GNU General Public License along with Yama. If not, see . */ -use crate::commands::{fully_integrate_pointer_node, retrieve_tree_node, store_tree_node}; +use crate::commands::retrieve_tree_node; use crate::definitions::{FilesystemOwnership, FilesystemPermissions, TreeNode}; +use crate::operations::remove_pointer_safely; use crate::pile::{Pile, PileDescriptor, RawPile}; -use crate::tree::integrate_node_in_place; use anyhow::anyhow; use clap::Parser; -use log::info; use rustyline::error::ReadlineError; use rustyline::Editor; @@ -123,50 +122,7 @@ pub fn debug_command( } } DebugCommand::DeletePointer { name } => { - // retrieve this pointer - let mut this_pointer = pile.read_pointer(name.as_str())?.ok_or_else(|| { - anyhow!("Pointer {:?} does not exist so can not be deleted.", name) - })?; - let mut this_node = retrieve_tree_node(&pile, this_pointer.chunk_ref.clone())?; - - // fully integrate the pointer - fully_integrate_pointer_node(&pile, &mut this_node.node, &mut this_pointer)?; - assert!(this_pointer.parent_pointer.is_none()); - - // now integrate any pointers that rely on this one - // so that they no longer rely on this one. - for pointer in pile.list_pointers()?.iter() { - if pointer == name { - continue; - } - if let Some(mut pointer_data) = pile.read_pointer(pointer.as_str())? { - if let Some(parent_pointer) = pointer_data.parent_pointer.as_ref() { - if parent_pointer == name { - info!("Pointer would be an orphan: {:?}; integrating", pointer); - - // need to integrate this node, so retrieve it - let mut node = retrieve_tree_node(&pile, pointer_data.chunk_ref)?; - - // integrate it in-place - integrate_node_in_place(&mut node.node, &this_node.node)?; - - // mark it as orphaned (no parent) - pointer_data.parent_pointer = None; - - // store the orphaned node - let new_chunk_ref = store_tree_node(&pile, &node)?; - // associate the orphaned node with the orphaned pointer - pointer_data.chunk_ref = new_chunk_ref; - // write the pointer back. - pile.write_pointer(pointer.as_str(), &pointer_data)?; - } - } - } - } - - // then delete the pointer - pile.delete_pointer(name)?; - info!("Deleted pointer: {:?}", name); + remove_pointer_safely(pile, name)?; } DebugCommand::PointerInfo { name } => { let this_pointer = pile