use crate::error::Result;
use crate::porcelain::workspace_snapshot::{
capture_workspace_snapshot, restore_workspace_snapshot, WorkspaceCaptureOptions,
WorkspaceRestoreOptions, WorkspaceSnapshot,
};
use crate::progress::{Cancel, ProgressSink};
use crate::repo::Repository;
#[derive(Debug, Copy, Clone)]
pub struct RepositoryWorkspaceSnapshot<'repo> {
repo: &'repo Repository,
}
impl<'repo> RepositoryWorkspaceSnapshot<'repo> {
pub(crate) fn new(repo: &'repo Repository) -> Self {
Self { repo }
}
#[must_use]
pub fn repository(&self) -> &'repo Repository {
self.repo
}
pub fn capture(&self, options: &WorkspaceCaptureOptions) -> Result<WorkspaceSnapshot> {
capture_workspace_snapshot(self.repo, options)
}
pub fn restore(
&self,
snapshot: &WorkspaceSnapshot,
options: &WorkspaceRestoreOptions,
progress: &mut dyn ProgressSink,
cancel: &dyn Cancel,
) -> Result<()> {
restore_workspace_snapshot(self.repo, snapshot, options, progress, cancel)
}
}