Skip to main content

GitWatcher

Struct GitWatcher 

Source
pub struct GitWatcher { /* private fields */ }
Available on crate feature 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

Source

pub fn new() -> Result<GitWatcher, Error>

Available on crate feature markdown-preview only.

Create a new git watcher with default configuration.

Uses 100ms debounce by default.

§Errors

Returns a notify::Error if the watcher cannot be created.

§Example
use ratatui_toolkit::services::git_watcher::GitWatcher;

let watcher = GitWatcher::new().unwrap();
Source§

impl GitWatcher

Source

pub fn with_config(config: GitWatchConfig) -> Result<GitWatcher, Error>

Available on crate feature 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

Source

pub fn check_for_changes(&mut self) -> bool

Available on crate feature 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!");
}
Source

pub fn has_pending_changes(&self) -> bool

Available on crate feature 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

Source

pub fn drain_events(&mut self)

Available on crate feature 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

Source

pub fn unwatch(&mut self, repo_path: &Path) -> Result<(), Error>

Available on crate feature markdown-preview only.

Stop watching a git repository.

§Arguments
  • repo_path - Path to the repository root (where .git is 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

Source

pub fn watch(&mut self, repo_path: &Path) -> Result<(), Error>

Available on crate feature 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 .git is 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§

Source§

impl Debug for GitWatcher

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more