aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib.rs25
1 files changed, 8 insertions, 17 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 7612857..31df669 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -6,8 +6,6 @@ mod url;
pub use crate::url::SuggestionUrl;
-use std::fs;
-use std::fs::{File, OpenOptions};
use std::io::{BufRead, BufReader, BufWriter, Write};
use std::path::Path;
@@ -17,7 +15,6 @@ use regex::Regex;
use serde::Deserialize;
use serde_json::Value;
use thiserror::Error;
-use tempfile::NamedTempFile;
#[derive(Debug, Error)]
@@ -177,23 +174,17 @@ impl Suggestion {
pub fn apply(&self) -> Result<(), Error> {
let repo = Repository::open(".").unwrap();
- let repo_root = repo.workdir().unwrap();
- // let original = File::open(repo_root.join(&self.path)).unwrap();
- // let metadata = original.metadata().unwrap();
- // let created_at = metadata.created().unwrap();
+ let diff_text = self.diff_with_repo(&repo);
+ let diff = git2::Diff::from_buffer(diff_text.as_bytes()).unwrap();
- let new = NamedTempFile::new().unwrap();
-
- fs::copy(repo_root.join(&self.path), new.path()).unwrap();
-
- let mut original = OpenOptions::new()
- .write(true)
- .truncate(true)
- .open(repo_root.join(&self.path)).unwrap();
+ repo.apply(
+ &diff,
+ git2::ApplyLocation::WorkDir,
+ None,
+ ).unwrap();
- let new_buffer = BufReader::new(new);
- self.apply_to(new_buffer, &mut original)
+ Ok(())
}
fn apply_to<R: BufRead, W: Write>(