Skip to main content

Crate reovim_driver_git

Crate reovim_driver_git 

Source
Expand description

Git provider driver for reovim.

This driver defines the interface for git data access. Following the mechanism/policy separation:

  • Mechanism (this driver): GitProvider trait, typed data structs, GitProviderStore for 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§

GitProviderStore
Stores the registered GitProvider implementation.

Traits§

GitProvider
Trait contract for git data access.