git.rs
1 use crate::error::JournalError; 2 use log::debug; 3 use std::ffi::OsString; 4 use std::path::Path; 5 use std::process::Command; 6 7 pub fn init<P: AsRef<Path>>(dirname: P) -> Result<(), JournalError> { 8 let dirname = dirname.as_ref(); 9 debug!("git init {}", dirname.display()); 10 11 let output = Command::new("git") 12 .arg("init") 13 .current_dir(dirname) 14 .output() 15 .map_err(|err| JournalError::SpawnGit(dirname.to_path_buf(), err))?; 16 debug!("git init exit code was {:?}", output.status.code()); 17 if !output.status.success() { 18 let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); 19 return Err(JournalError::GitInit(dirname.to_path_buf(), stderr)); 20 } 21 Ok(()) 22 } 23 24 pub fn add<P: AsRef<Path>>(dirname: P, files: &[P]) -> Result<(), JournalError> { 25 let args = &["add", "--"]; 26 let mut args: Vec<OsString> = args.iter().map(OsString::from).collect(); 27 for f in files { 28 args.push(OsString::from(f.as_ref())); 29 } 30 31 let dirname = dirname.as_ref(); 32 debug!("git add in {}", dirname.display()); 33 34 let output = Command::new("git") 35 .args(&args) 36 .current_dir(dirname) 37 .output() 38 .map_err(|err| JournalError::SpawnGit(dirname.to_path_buf(), err))?; 39 debug!("git exit code was {:?}", output.status.code()); 40 if !output.status.success() { 41 let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); 42 return Err(JournalError::GitAdd(dirname.to_path_buf(), stderr)); 43 } 44 Ok(()) 45 } 46 47 pub fn commit<P: AsRef<Path>>(dirname: P, msg: &str) -> Result<(), JournalError> { 48 let dirname = dirname.as_ref(); 49 debug!("git commit in {}", dirname.display()); 50 51 let output = Command::new("git") 52 .args(["commit", "-m", msg]) 53 .current_dir(dirname) 54 .output() 55 .map_err(|err| JournalError::SpawnGit(dirname.to_path_buf(), err))?; 56 debug!("git exit code was {:?}", output.status.code()); 57 if !output.status.success() { 58 let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); 59 return Err(JournalError::GitCommit(dirname.to_path_buf(), stderr)); 60 } 61 Ok(()) 62 }