Files
komodo/lib/git/src/lib.rs
T

98 lines
2.3 KiB
Rust

use std::path::Path;
use anyhow::anyhow;
use command::run_standard_command;
use formatting::{bold, muted};
use komodo_client::entities::{
LatestCommit, komodo_timestamp, update::Log,
};
mod clone;
mod commit;
mod init;
mod pull;
mod pull_or_clone;
pub use crate::{
clone::clone,
commit::{commit_all, commit_file, write_commit_file},
init::init_folder_as_repo,
pull::pull,
pull_or_clone::pull_or_clone,
};
pub async fn get_commit_hash_info(
repo_dir: &Path,
) -> anyhow::Result<LatestCommit> {
let hash =
run_standard_command("git rev-parse --short HEAD", repo_dir)
.await;
let hash = if hash.status.success() {
hash.stdout.trim().to_string()
} else {
return Err(anyhow!(
"Failed to get short hash | {}",
hash.stderr
));
};
let message =
run_standard_command("git log -1 --pretty=%B", repo_dir).await;
let message = if message.status.success() {
message.stdout.trim().to_string()
} else {
return Err(anyhow!(
"Failed to get commit message | {}",
message.stderr
));
};
Ok(LatestCommit { hash, message })
}
/// returns (Log, commit hash, commit message)
pub async fn get_commit_hash_log(
repo_dir: &Path,
) -> anyhow::Result<(Log, String, String)> {
let start_ts = komodo_timestamp();
let LatestCommit { hash, message } =
get_commit_hash_info(repo_dir).await?;
let log = Log {
stage: "Latest Commit".into(),
command: String::from(
"git rev-parse --short HEAD && git log -1 --pretty=%B",
),
stdout: format!(
"{} {}\n{} {}",
muted("hash:"),
bold(&hash),
muted("message:"),
bold(&message),
),
stderr: String::new(),
success: true,
start_ts,
end_ts: komodo_timestamp(),
};
Ok((log, hash, message))
}
/// Gets the remote url, with `.git` stripped from the end.
pub async fn get_remote_url(path: &Path) -> anyhow::Result<String> {
let output =
run_standard_command("git remote show origin", path).await;
if output.success() {
Ok(
output
.stdout
.trim()
.strip_suffix(".git")
.map(str::to_string)
.unwrap_or(output.stdout),
)
} else {
Err(anyhow!(
"Failed to get remote url | stdout: {} | stderr: {}",
output.stdout,
output.stderr
))
}
}