diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 27 | 
1 files changed, 16 insertions, 11 deletions
| @@ -2,7 +2,7 @@  use std::fs; -use std::fs::File; +use std::fs::{File, OpenOptions};  use std::io::{BufRead, BufReader, Write};  use git2::Repository; @@ -11,7 +11,7 @@ use regex::Regex;  use serde::Deserialize;  use serde_json::Value;  use thiserror::Error; -use tempfile::tempfile; +use tempfile::NamedTempFile;  #[derive(Debug, Error)] @@ -106,29 +106,34 @@ impl Suggestion {          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 mut reader = BufReader::new(original); +        // let original = File::open(repo_root.join(&self.path)).unwrap(); +        // let metadata = original.metadata().unwrap(); +        // let created_at = metadata.created().unwrap(); -        let mut new = tempfile().unwrap(); +        let new = NamedTempFile::new().unwrap(); + +        fs::copy(repo_root.join(&self.path), new.path()).unwrap(); + +        let reader = BufReader::new(new); +        let mut original = OpenOptions::new() +            .write(true) +            .truncate(true) +            .open(repo_root.join(&self.path)).unwrap();          for (i, line) in reader.lines().enumerate() {              match line {                  Ok(l) => {                      if i < self.original_start_line                              || i > self.original_end_line { -                        writeln!(new, "{}", l).unwrap(); +                        writeln!(original, "{}", l).unwrap();                      } else if i == self.original_end_line { -                        write!(new, "{}", self.suggestion()).unwrap(); +                        write!(original, "{}", self.suggestion()).unwrap();                      }                  },                  Err(e) => panic!(e),              }          } -        fs::rename(new, original).unwrap(); -          Ok(())      }  } | 
