generated from PlexSheep/rs-base
63 lines
1.7 KiB
Rust
63 lines
1.7 KiB
Rust
use std::process::Command;
|
|
|
|
use git2;
|
|
use libpt::log::error;
|
|
|
|
use crate::error::ConfigError;
|
|
use crate::{config::Config, error::Result};
|
|
|
|
pub(crate) fn get_repo() -> Result<git2::Repository> {
|
|
let repo = match git2::Repository::open_from_env() {
|
|
Ok(repo) => repo,
|
|
Err(_err) => {
|
|
let err = ConfigError::GitRepoNotFound.into();
|
|
error!("{err}");
|
|
return Err(err);
|
|
}
|
|
};
|
|
Ok(repo)
|
|
}
|
|
|
|
pub async fn tag<'repo>(repo: &'repo mut git2::Repository, cfg: &Config) -> Result<git2::Tag<'repo>> {
|
|
// TODO: error handling
|
|
// TODO: allow force
|
|
// TODO: allow setting a message
|
|
// TODO: maybe using git as cmd is fancier?
|
|
let target = repo
|
|
.find_object(
|
|
repo.head().unwrap().target().unwrap(),
|
|
Some(git2::ObjectType::Commit),
|
|
)
|
|
.unwrap();
|
|
let tagger = repo.signature().expect("could not get signature");
|
|
let message = String::new();
|
|
let force = true;
|
|
let tag = repo
|
|
.tag(
|
|
&cfg.yaml.version.get_version(),
|
|
// "importantversion",
|
|
&target,
|
|
&tagger,
|
|
&message,
|
|
force,
|
|
)
|
|
.unwrap();
|
|
let tag: git2::Tag = repo.find_tag(tag).unwrap();
|
|
Ok(tag)
|
|
}
|
|
|
|
pub async fn push(_cfg: &Config) -> Result<()> {
|
|
// TODO: error handling
|
|
// TODO: maybe using git as lib is fancier?
|
|
Command::new("git").arg("push").status().unwrap();
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn get_commit_sig<'repo>(repo: &'repo git2::Repository) -> Result<String> {
|
|
// TODO: error handling
|
|
// TODO: maybe using git as cmd is fancier?
|
|
let target = repo
|
|
.find_commit(repo.head().unwrap().target().unwrap())
|
|
.unwrap();
|
|
Ok(target.id().to_string())
|
|
}
|