pub struct GitStore { /* private fields */ }Implementations§
Source§impl GitStore
impl GitStore
Sourcepub fn open(root: impl Into<PathBuf>) -> Result<Self>
pub fn open(root: impl Into<PathBuf>) -> Result<Self>
Open an existing git repo at root, or initialize one if absent.
Sourcepub fn with_ancestor_cap(self, cap: usize) -> Result<Self>
pub fn with_ancestor_cap(self, cap: usize) -> Result<Self>
Bound the ancestor list this store keeps on every write (spec §3.9).
A cap of 0 is rejected.
Sourcepub async fn pull(&self, remote: &str, branch: &str) -> Result<PullReport>
pub async fn pull(&self, remote: &str, branch: &str) -> Result<PullReport>
Pull branch from remote (typically “origin”). A fast-forward advances
the branch; a divergence is reconciled by a content-aware 3-way merge
(gonzalo merge() per record, ADR 0017), with tombstones decided by
kind and revision first (spec §3.5), and unresolved records kept local
and reported in the PullReport.
Trait Implementations§
Source§impl Store for GitStore
impl Store for GitStore
Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
) -> Pin<Box<dyn Future<Output = Result<Option<Record>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
) -> Pin<Box<dyn Future<Output = Result<Option<Record>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Fetch a record by key. Returns
None for an absent key and for a
tombstoned one: a delete is invisible on this surface, and only
get_raw shows the tombstone. See ADR 0021.Source§fn put<'life0, 'async_trait>(
&'life0 self,
record: Record,
expected: Option<Revision>,
) -> Pin<Box<dyn Future<Output = Result<PutResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put<'life0, 'async_trait>(
&'life0 self,
record: Record,
expected: Option<Revision>,
) -> Pin<Box<dyn Future<Output = Result<PutResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Conditionally write
record. expected is the revision the caller
believes is current (None means “expect no existing record”). If the
store’s current revision differs, returns PutResult::Conflict. Read moreSource§fn put_raw<'life0, 'async_trait>(
&'life0 self,
record: Record,
expected: Option<Revision>,
) -> Pin<Box<dyn Future<Output = Result<PutResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_raw<'life0, 'async_trait>(
&'life0 self,
record: Record,
expected: Option<Revision>,
) -> Pin<Box<dyn Future<Output = Result<PutResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Replication write: store
record exactly as given, never re-stamping.
A create (expected == None) that finds anything stored, tombstones
included, is a Conflict carrying it. Sync and pull use this; consumers
must use put. A store must never implement this by calling put,
whose recreation rule would resurrect records mid-sync. See ADR 0021.Source§fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 KeyPrefix,
) -> Pin<Box<dyn Future<Output = Result<Vec<RecordKey>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 KeyPrefix,
) -> Pin<Box<dyn Future<Output = Result<Vec<RecordKey>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List keys matching
prefix, excluding tombstoned keys. See
list_raw for a listing that includes them.Source§fn delete_as<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
expected: Option<Revision>,
author: Option<Identity>,
) -> Pin<Box<dyn Future<Output = Result<DeleteResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_as<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
expected: Option<Revision>,
author: Option<Identity>,
) -> Pin<Box<dyn Future<Output = Result<DeleteResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Conditionally delete the record at
key. expected is the revision the
caller believes is current: None deletes unconditionally; Some(rev)
deletes only if the current revision matches, else
DeleteResult::Conflict. Deleting an absent key is a no-op Deleted.
Some(author) records who deleted (stores that write tombstones stamp
it on the tombstone’s meta.author). See ADR 0018 and ADR 0021.Source§fn get_raw<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
) -> Pin<Box<dyn Future<Output = Result<Option<Record>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_raw<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
) -> Pin<Box<dyn Future<Output = Result<Option<Record>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Like
get, but also returns tombstones. For replication
(sync, pull, collection) only: consumers must use get. A store must
never implement this by calling get, which would hide the deletions
replication exists to carry. See ADR 0021.Source§fn list_raw<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 KeyPrefix,
) -> Pin<Box<dyn Future<Output = Result<Vec<RecordKey>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_raw<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 KeyPrefix,
) -> Pin<Box<dyn Future<Output = Result<Vec<RecordKey>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Like
list, but also includes tombstoned keys. For
replication only. See ADR 0021.Source§fn purge<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
expected: Revision,
) -> Pin<Box<dyn Future<Output = Result<DeleteResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn purge<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
expected: Revision,
) -> Pin<Box<dyn Future<Output = Result<DeleteResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Physically remove the record at
key only if its current revision is
expected; otherwise DeleteResult::Conflict. Absent is an idempotent
Deleted. The only physical removal in the system: used by tombstone
collection, which must pass the tombstone’s revision so a record
recreated in the meantime survives. See ADR 0021.Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
expected: Option<Revision>,
) -> Pin<Box<dyn Future<Output = Result<DeleteResult, CoreError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 RecordKey,
expected: Option<Revision>,
) -> Pin<Box<dyn Future<Output = Result<DeleteResult, CoreError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
delete_as without an author. Provided; stores
implement delete_as.Auto Trait Implementations§
impl Freeze for GitStore
impl RefUnwindSafe for GitStore
impl Send for GitStore
impl Sync for GitStore
impl Unpin for GitStore
impl UnsafeUnpin for GitStore
impl UnwindSafe for GitStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more