use std::path::Path;
use git2::{Oid, Repository};
use git_metadata::{MetadataEntry, MetadataIndex, MetadataOptions};
pub fn open_repo(path: Option<&Path>) -> Result<Repository, git2::Error> {
match path {
Some(p) => Repository::open(p),
None => Repository::open_from_env(),
}
}
pub fn resolve_oid(repo: &Repository, rev: &str) -> Result<Oid, git2::Error> {
if let Ok(oid) = Oid::from_str(rev) {
return Ok(oid);
}
let obj = repo.revparse_single(rev)?;
Ok(obj.id())
}
pub fn list(repo: &Repository, ref_name: &str) -> Result<Vec<(Oid, Oid)>, git2::Error> {
repo.metadata_list(ref_name)
}
pub fn show(
repo: &Repository,
ref_name: &str,
target: &Oid,
) -> Result<Vec<MetadataEntry>, git2::Error> {
repo.metadata_show(ref_name, target)
}
pub fn add(
repo: &Repository,
ref_name: &str,
target: &Oid,
path: &str,
content: Option<&[u8]>,
opts: &MetadataOptions,
) -> Result<Oid, git2::Error> {
repo.metadata_add(ref_name, target, path, content, opts)
}
pub fn remove_paths(
repo: &Repository,
ref_name: &str,
target: &Oid,
patterns: &[&str],
keep: bool,
) -> Result<bool, git2::Error> {
repo.metadata_remove_paths(ref_name, target, patterns, keep)
}
pub fn copy(
repo: &Repository,
ref_name: &str,
from: &Oid,
to: &Oid,
opts: &MetadataOptions,
) -> Result<Oid, git2::Error> {
repo.metadata_copy(ref_name, from, to, opts)
}
pub fn prune(repo: &Repository, ref_name: &str, dry_run: bool) -> Result<Vec<Oid>, git2::Error> {
repo.metadata_prune(ref_name, dry_run)
}
pub fn get_ref(repo: &Repository, ref_name: &str) -> String {
repo.metadata_get_ref(ref_name)
}
pub fn link(
repo: &Repository,
ref_name: &str,
a: &str,
b: &str,
forward: &str,
reverse: &str,
meta: Option<&[u8]>,
) -> Result<Oid, git2::Error> {
repo.link(ref_name, a, b, forward, reverse, meta)
}
pub fn unlink(
repo: &Repository,
ref_name: &str,
a: &str,
b: &str,
forward: &str,
reverse: &str,
) -> Result<Oid, git2::Error> {
repo.unlink(ref_name, a, b, forward, reverse)
}
pub fn linked(
repo: &Repository,
ref_name: &str,
key: &str,
relation: Option<&str>,
) -> Result<Vec<(String, String)>, git2::Error> {
repo.linked(ref_name, key, relation)
}