pub struct GitWatcher { /* private fields */ }git-watcher only.Expand description
A git watcher for detecting git repository state changes.
Uses the notify crate internally to watch the .git directory
for changes. Provides a non-blocking interface suitable for use
in TUI event loops.
This is useful for caching git statistics and only recomputing them when the git state actually changes, rather than polling at a fixed interval.
Implementations§
Source§impl GitWatcher
impl GitWatcher
Sourcepub fn new() -> Result<GitWatcher, Error>
Available on crate feature markdown-preview only.
pub fn new() -> Result<GitWatcher, Error>
markdown-preview only.Source§impl GitWatcher
impl GitWatcher
Sourcepub fn with_config(config: GitWatchConfig) -> Result<GitWatcher, Error>
Available on crate feature markdown-preview only.
pub fn with_config(config: GitWatchConfig) -> Result<GitWatcher, Error>
markdown-preview only.Create a new git watcher with custom configuration.
§Arguments
config- Configuration for the watcher.
§Errors
Returns a notify::Error if the watcher cannot be created.
§Example
use ratatui_toolkit::services::git_watcher::{GitWatcher, GitWatchConfig};
let config = GitWatchConfig::new()
.debounce_ms(200);
let watcher = GitWatcher::with_config(config).unwrap();Source§impl GitWatcher
impl GitWatcher
Sourcepub fn check_for_changes(&mut self) -> bool
Available on crate feature markdown-preview only.
pub fn check_for_changes(&mut self) -> bool
markdown-preview only.Check if there are any pending git state changes.
This is a non-blocking operation that returns true if any
relevant git changes have been detected since the last check.
§Returns
true if git changes were detected, false otherwise.
§Example
use ratatui_toolkit::services::git_watcher::GitWatcher;
use std::path::Path;
let mut watcher = GitWatcher::new().unwrap();
watcher.watch(Path::new("/path/to/repo")).unwrap();
// In your event loop:
if watcher.check_for_changes() {
println!("Git state changed, recompute stats!");
}Sourcepub fn has_pending_changes(&self) -> bool
Available on crate feature markdown-preview only.
pub fn has_pending_changes(&self) -> bool
markdown-preview only.Check if there are pending changes without consuming them.
This is useful when you want to know if there are changes but don’t want to reset the flag yet.
§Returns
true if git changes are pending, false otherwise.
Source§impl GitWatcher
impl GitWatcher
Sourcepub fn drain_events(&mut self)
Available on crate feature markdown-preview only.
pub fn drain_events(&mut self)
markdown-preview only.Drain all pending events without processing them.
This clears the event queue and resets the pending changes flag, useful when you want to ignore accumulated changes (e.g., after a batch operation).
§Example
use ratatui_toolkit::services::git_watcher::GitWatcher;
use std::path::Path;
let mut watcher = GitWatcher::new().unwrap();
watcher.watch(Path::new("/path/to/repo")).unwrap();
// After some operation that causes many changes:
watcher.drain_events();Source§impl GitWatcher
impl GitWatcher
Sourcepub fn unwatch(&mut self, repo_path: &Path) -> Result<(), Error>
Available on crate feature markdown-preview only.
pub fn unwatch(&mut self, repo_path: &Path) -> Result<(), Error>
markdown-preview only.Stop watching a git repository.
§Arguments
repo_path- Path to the repository root (where.gitis located).
§Errors
Returns a notify::Error if the path cannot be unwatched.
§Example
use ratatui_toolkit::services::git_watcher::GitWatcher;
use std::path::Path;
let mut watcher = GitWatcher::new().unwrap();
let path = Path::new("/path/to/repo");
watcher.watch(path).unwrap();
// Later...
watcher.unwatch(path).unwrap();Source§impl GitWatcher
impl GitWatcher
Sourcepub fn watch(&mut self, repo_path: &Path) -> Result<(), Error>
Available on crate feature markdown-preview only.
pub fn watch(&mut self, repo_path: &Path) -> Result<(), Error>
markdown-preview only.Start watching a git repository for changes.
Watches the .git directory recursively to detect any changes
to the repository state (commits, staging, branches, etc.).
§Arguments
repo_path- Path to the repository root (where.gitis located).
§Errors
Returns a notify::Error if the path cannot be watched or
if the .git directory doesn’t exist.
§Example
use ratatui_toolkit::services::git_watcher::GitWatcher;
use std::path::Path;
let mut watcher = GitWatcher::new().unwrap();
watcher.watch(Path::new("/path/to/repo")).unwrap();Trait Implementations§
Auto Trait Implementations§
impl Freeze for GitWatcher
impl RefUnwindSafe for GitWatcher
impl Send for GitWatcher
impl !Sync for GitWatcher
impl Unpin for GitWatcher
impl UnsafeUnpin for GitWatcher
impl UnwindSafe for GitWatcher
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more