Expand description
Git provider driver for reovim.
This driver defines the interface for git data access. Following the mechanism/policy separation:
- Mechanism (this driver):
GitProvidertrait, typed data structs,GitProviderStorefor service discovery - Policy (modules): Implementations such as subprocess-based git access or library-based (libgit2)
§Architecture (#530)
Cross-cutting git data (branches, status, log, diff hunks) is provided
once at the driver layer and consumed by multiple modules (pickers,
statusline, gutter signs, blame) through ServiceRegistry.
┌─────────────────────────────────────────────────────────┐
│ Consumers (pickers, statusline, gutter, blame) │
│ → services.get::<GitProviderStore>()?.get()? │
├─────────────────────────────────────────────────────────┤
│ ServiceRegistry │
│ → GitProviderStore holds Arc<dyn GitProvider> │
├─────────────────────────────────────────────────────────┤
│ Driver (this crate) │
│ → GitProvider trait, typed data structs │
├─────────────────────────────────────────────────────────┤
│ Module (reovim-module-git) │
│ → SubprocessGitProvider implementation │
└─────────────────────────────────────────────────────────┘§Example
ⓘ
use reovim_driver_git::{GitProviderStore, GitProvider};
// In module init():
let store = ctx.services.get_or_create::<GitProviderStore>();
store.register(Arc::new(SubprocessGitProvider));
// In any consumer:
let store = ctx.services.get::<GitProviderStore>()?;
let git = store.get()?;
let branches = git.branches(&cwd);Modules§
- types
- Typed data structures for git operations.
Structs§
- GitProvider
Store - Stores the registered
GitProviderimplementation.
Traits§
- GitProvider
- Trait contract for git data access.