summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2026-04-19 17:50:03 -0400
committerMica White <botahamec@outlook.com>2026-04-19 17:50:03 -0400
commit48920824d7529646d154467bcfdd6107e1e28acd (patch)
tree6990ab5114c9520f996da0646b9fd436b4bbd5c8
parent1495c12ceca5194757765d4dd95889f2d4ab4fcd (diff)
git undo-restore-autosave
-rw-r--r--src/bin/git-undo-restore-autosave.rs16
-rw-r--r--src/lib.rs5
2 files changed, 21 insertions, 0 deletions
diff --git a/src/bin/git-undo-restore-autosave.rs b/src/bin/git-undo-restore-autosave.rs
new file mode 100644
index 0000000..c3d00df
--- /dev/null
+++ b/src/bin/git-undo-restore-autosave.rs
@@ -0,0 +1,16 @@
+use git2::{Repository, build::CheckoutBuilder};
+
+fn main() -> Result<(), anyhow::Error> {
+ let force = std::env::args().any(|arg| arg == "--force");
+
+ let repository = Repository::discover(".")?;
+ let tree = git_autosave::load_undo_tree(&repository)?;
+
+ let mut options = CheckoutBuilder::new();
+ if force {
+ options.force();
+ }
+ repository.checkout_tree(tree.as_object(), Some(&mut options))?;
+
+ Ok(())
+}
diff --git a/src/lib.rs b/src/lib.rs
index 91d82fc..2662948 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -256,3 +256,8 @@ pub fn saved_restored_autosave(
Ok(())
}
+
+pub fn load_undo_tree(repository: &Repository) -> Result<Tree<'_>, git2::Error> {
+ let reference = repository.find_reference(UNDO_RESTORE_REF)?;
+ reference.peel_to_tree()
+}