aboutsummaryrefslogtreecommitdiff
path: root/supergit/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'supergit/src/lib.rs')
-rw-r--r--supergit/src/lib.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/supergit/src/lib.rs b/supergit/src/lib.rs
new file mode 100644
index 0000000..3e02d30
--- /dev/null
+++ b/supergit/src/lib.rs
@@ -0,0 +1,39 @@
+//! Strongly typed git repository explorer library
+//!
+
+mod branch;
+pub use branch::{Branch, BranchCommit};
+
+mod commit;
+pub use commit::{CommitId, Commit};
+
+pub(crate) mod raw;
+
+use std::sync::atomic::{AtomicUsize, Ordering};
+
+/// Represents a git repository with lazy data loading
+pub struct Repository {}
+
+impl Repository {
+ pub fn open(path: &std::path::Path) -> Self {
+ 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) {
+
+ }
+}
+
+/////////// 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)
+}