//! Strongly typed git repository explorer library //! //! This library exposes a read-only view into a git repository. To //! get started, open an existing bare repo, and then call `sync()` to //! build a cache of it. Every time you want your view of the repo to //! update, call `sync()` again. If you want the sync operation to be //! blocking, call `sync_blocking()` instead. //! //! mod branch; pub use branch::{Branch, BranchCommit}; mod commit; pub use commit::{CommitId, Commit}; mod diff; pub use diff::Diff; pub mod raw; use std::sync::atomic::{AtomicUsize, Ordering}; use async_std::sync::{Arc, RwLock}; use raw::RawRepository; /// Represents a git repository with lazy data loading pub struct Repository { raw: RawRepository, } impl Repository { pub fn open(path: &std::path::Path) -> Arc { todo!() } /// Sync the repository with the backing git files /// /// This function can be invoked manually, but should be invoked /// basically every time your program expects changes to have /// happened. Polling this function is not recommended. pub fn sync(&self) { todo!() } } /////////// IDs are created from the same pool to save on code size //////////// const ID_CTR: AtomicUsize = AtomicUsize::new(0); /// Get monotonically increasing IDs for objects pub(crate) fn id() -> usize { ID_CTR.fetch_add(1, Ordering::Relaxed) }