reovim-driver-git 0.14.3

Git provider driver for reovim — trait contract and typed data
Documentation
  • Coverage
  • 100%
    55 out of 55 items documented0 out of 7 items with examples
  • Size
  • Source code size: 35.5 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 2.73 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 47s Average build duration of successful builds.
  • all releases: 52s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • ds1sqe/reovim
    11 0 62
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • ds1sqe

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);