pub struct WatchContext {
pub repo: Repo,
pub config: ProjectConfig,
pub project_dir: String,
pub id: String,
pub paused: bool,
pub logger: Logger,
}
Expand description
§WatchContext
§Description
The WatchContext
structure represents the execution context for monitoring a Git repository branch.
It acts as the central object passed around the orchestrator, containing all the necessary metadata, configuration, and logging utilities required to monitor and process changes.
Each context is associated with:
- A specific Git branch.
- A repository definition (
Repo
). - Project configuration (
ProjectConfig
). - A unique identifier (
id
) and project directory path. - A logger for runtime logging.
The paused
flag indicates whether monitoring is currently active or suspended.
§Fields
branch: String
– The name of the branch being monitored.repo: Repo
– Repository information, including remote and last commit hash.config: ProjectConfig
– Project-specific configuration.project_dir: String
– Filesystem path to the project root directory.id: String
– Unique identifier for this context (used in log file naming).paused: bool
– Whether the watcher is currently paused.logger: Logger
– The logger used for output and persistent logging.
§Associated Methods
§stop(&mut self)
Pauses monitoring by setting the paused
flag to true
.
This does not destroy the context but signals that no new operations should be triggered until resumed.
Example:
ctx.stop();
assert!(ctx.paused);
§run(&mut self)
Resumes monitoring by setting the paused
flag back to false
.
Example:
ctx.run();
assert!(!ctx.paused);
§log_path(&self) -> PathBuf
Returns the full path to the log file associated with this context.
The path is resolved under the user’s home directory:
~/.fleet/logs/<id>.log
Example:
let log_file = ctx.log_path();
println!("Log file: {}", log_file.display());
§log_path_by_id(id: &str) -> PathBuf
Static method returning the log file path for a given context id
, without requiring an instance of WatchContext
.
Example:
let log_file = WatchContext::log_path_by_id("project-123");
println!("Log file: {}", log_file.display());
§init_logs() -> Result<()>
Asynchronously initializes the logs directory under:
~/.fleet/logs/
If the directory does not exist, it is created.
If it already exists, nothing happens.
Example:
WatchContext::init_logs().await?;
§Notes
WatchContext
is cloneable (Clone
), making it safe to pass across async tasks if needed.- The log file is tied to the context
id
, ensuring each project has its own persistent log. - Pausing/resuming does not affect the internal state of the repository, only whether actions are triggered.
Fields§
§repo: Repo
§config: ProjectConfig
§project_dir: String
§id: String
§paused: bool
§logger: Logger
Implementations§
Trait Implementations§
Source§impl Clone for WatchContext
impl Clone for WatchContext
Source§fn clone(&self) -> WatchContext
fn clone(&self) -> WatchContext
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for WatchContext
impl Debug for WatchContext
Source§impl<'de> Deserialize<'de> for WatchContext
impl<'de> Deserialize<'de> for WatchContext
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for WatchContext
impl !RefUnwindSafe for WatchContext
impl Send for WatchContext
impl Sync for WatchContext
impl Unpin for WatchContext
impl !UnwindSafe for WatchContext
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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