From e1d3132ace342716c20f32737a514abaa0132550 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 4 Apr 2021 15:05:00 +0300 Subject: feat: commit changes made by Bumper The git tag then points at that commit. --- src/git.rs | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'src/git.rs') diff --git a/src/git.rs b/src/git.rs index 38e99d9..563afa1 100644 --- a/src/git.rs +++ b/src/git.rs @@ -1,26 +1,35 @@ use crate::errors::BumperError; use log::{debug, info}; +use std::path::Path; use std::process::Command; -pub fn tag(version: &str) -> Result<(), BumperError> { - debug!("git tag in {}", std::env::current_dir().unwrap().display()); +pub fn tag>(dirname: P, version: &str) -> Result<(), BumperError> { + let msg = format!("release version {}", version); let tag_name = format!("v{}", version); - info!("Create git tag {}", tag_name); + git(dirname.as_ref(), &["tag", "-am", &msg, &tag_name])?; + Ok(()) +} + +pub fn commit>(dirname: P, msg: &str) -> Result<(), BumperError> { + git(dirname.as_ref(), &["commit", "-am", msg])?; + Ok(()) +} + +fn git(dirname: &Path, args: &[&str]) -> Result<(), BumperError> { + info!("git {:?} in {}", args, dirname.display()); let output = Command::new("git") - .arg("tag") - .arg("-am") - .arg(format!("release version {}", version)) - .arg(format!("v{}", version)) - .output(); - let output = match output { - Ok(output) => output, - Err(err) => { - return Err(BumperError::GitInvoke(err)); - } - }; + .args(args) + .current_dir(dirname) + .output() + .map_err(|err| { + let args = args.iter().map(|s| s.to_string()).collect(); + BumperError::GitInvoke(dirname.to_path_buf(), args, err) + })?; debug!("git exit code was {:?}", output.status.code()); if !output.status.success() { - return Err(BumperError::git_tag(&output.stderr)); + let args = args.iter().map(|s| s.to_string()).collect(); + let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); + return Err(BumperError::Git(dirname.to_path_buf(), args, stderr)); } Ok(()) } -- cgit v1.2.1