Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
refactor(commit): Make a function to execute all commands with the sa…
…me error handling
  • Loading branch information
alt-art committed Oct 9, 2022
commit e74efd9553ff60d036da8c692744adcd1b86987b
69 changes: 27 additions & 42 deletions src/commit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,38 @@ use anyhow::{anyhow, Result};
use std::fs;
use std::io::Write;
use std::path::PathBuf;
use std::process::{exit, Command};
use std::process::{exit, Command, Output};

pub fn commit_as_hook(commit_message: &str) -> Result<()> {
let output = Command::new("git")
.args(&["rev-parse", "--absolute-git-dir"])
.output();
pub fn git_exec(args: &[&str]) -> Result<Output> {
let output = Command::new("git").args(args).output();
match output {
Ok(output) => {
if !output.status.success() {
return Err(anyhow!("Could not get git directory"));
}
let git_dir = PathBuf::from(String::from_utf8_lossy(&output.stdout).trim());
let commit_file_path = git_dir.join("COMMIT_EDITMSG");
fs::write(commit_file_path, commit_message)?;
}
Err(e) => {
return Err(anyhow!(
"Failed to run git. Make sure git is installed\nAdditional info: {}",
e
));
}
Ok(output) => Ok(output),
Err(e) => Err(anyhow!(
"Failed to run git. Make sure git is installed\nAdditional info: {}",
e
)),
}
}

pub fn commit_as_hook(commit_message: &str) -> Result<()> {
let output = git_exec(&["rev-parse", "--absolute-git-dir"])?;
if !output.status.success() {
return Err(anyhow!("Could not get git directory"));
}
let git_dir = PathBuf::from(String::from_utf8_lossy(&output.stdout).trim());
let commit_file_path = git_dir.join("COMMIT_EDITMSG");
fs::write(commit_file_path, commit_message)?;
Ok(())
}

pub fn commit(commit_message: &str) -> Result<()> {
let output = Command::new("git")
.arg("commit")
.arg("-m")
.arg(commit_message)
.output();
match output {
Ok(output) => {
std::io::stdout().write_all(&output.stdout)?;
std::io::stderr().write_all(&output.stderr)?;
exit(
output
.status
.code()
.ok_or_else(|| anyhow!("Could not get exit code"))?,
);
}
Err(e) => {
return Err(anyhow::anyhow!(
"Failed to run git. Make sure git is installed\nAdditional info: {}",
e
));
}
};
let output = git_exec(&["commit", "-m", commit_message])?;
std::io::stdout().write_all(&output.stdout)?;
std::io::stderr().write_all(&output.stderr)?;
exit(
output
.status
.code()
.ok_or_else(|| anyhow!("Signal terminated"))?,
);
}