1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
use crate::errors::BumperError;
use log::{debug, info};
use std::path::Path;
use std::process::Command;
pub fn tag<P: AsRef<Path>>(dirname: P, version: &str) -> Result<(), BumperError> {
let msg = format!("release version {}", version);
let tag_name = format!("v{}", version);
git(dirname.as_ref(), &["tag", "-am", &msg, &tag_name])?;
Ok(())
}
pub fn commit<P: AsRef<Path>>(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")
.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() {
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(())
}
|