use anyhow::{Context, Result};
use std::path::{Path, PathBuf};
use super::{
git::{CommitInfo, GitStore},
manifest::Manifest,
permissions::Overrides,
};
pub struct Store {
pub root: PathBuf,
pub git: GitStore,
pub manifest: Manifest,
pub overrides: Overrides,
}
impl Store {
pub fn open(root: &Path) -> Result<Self> {
let git = GitStore::open(root)
.with_context(|| format!("Not an agent-trace store: {}", root.display()))?;
let manifest = Manifest::load(root)
.with_context(|| format!("Failed to load manifest at {}", root.display()))?;
let overrides = Overrides::load(root).with_context(|| "Failed to load overrides")?;
Ok(Self {
root: root.to_path_buf(),
git,
manifest,
overrides,
})
}
pub fn commit(&self, info: &CommitInfo) -> Result<git2::Oid> {
self.git.commit(info)
}
}