chkpt-core 0.2.0

Core library for chkpt – a fast, content-addressable checkpoint system
Documentation
use crate::config::{project_id_from_path, StoreLayout};
use crate::error::Result;
use crate::store::catalog::{CatalogSnapshot, MetadataCatalog};
use crate::store::snapshot::Snapshot;
use std::path::Path;

pub fn list(workspace_root: &Path, limit: Option<usize>) -> Result<Vec<Snapshot>> {
    let project_id = project_id_from_path(workspace_root);
    let layout = StoreLayout::new(&project_id);
    let catalog = MetadataCatalog::open(layout.catalog_path())?;
    catalog
        .list_snapshots(limit)?
        .into_iter()
        .map(catalog_snapshot_to_public)
        .collect()
}

fn catalog_snapshot_to_public(snapshot: CatalogSnapshot) -> Result<Snapshot> {
    Ok(Snapshot {
        id: snapshot.id,
        created_at: snapshot.created_at,
        message: snapshot.message,
        root_tree_hash: snapshot.root_tree_hash.unwrap_or_default(),
        parent_snapshot_id: snapshot.parent_snapshot_id,
        stats: snapshot.stats,
    })
}