diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 25 |
1 files changed, 8 insertions, 17 deletions
@@ -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>( |