Skip to main content

weavatrix_worktree/transaction/
mod.rs

1mod commit;
2mod lock;
3mod plan;
4mod prepare;
5mod recovery;
6mod recovery_model;
7#[cfg(test)]
8mod recovery_tests;
9mod rollback;
10mod stage;
11mod stage_cleanup;
12mod util;
13mod verify;
14
15use crate::{
16    filesystem::ControlDir, journal::JournalWriter, options::WorktreeOptions, report::DryRunReport,
17};
18
19use stage::StagedFile;
20
21/// A durably staged transaction holding the exclusive worktree lock.
22#[must_use = "commit, abort, or later recover the prepared transaction"]
23pub struct PreparedTransaction {
24    transaction_id: String,
25    operation: String,
26    preview: DryRunReport,
27    files: Vec<StagedFile>,
28    options: WorktreeOptions,
29    journal: JournalWriter,
30    control: ControlDir,
31    _lock: std::fs::File,
32}
33
34impl core::fmt::Debug for PreparedTransaction {
35    fn fmt(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
36        formatter
37            .debug_struct("PreparedTransaction")
38            .field("transaction_id", &self.transaction_id)
39            .field("operation", &self.operation)
40            .field("prepared_files", &self.files.len())
41            .finish_non_exhaustive()
42    }
43}
44
45impl PreparedTransaction {
46    #[must_use]
47    pub fn transaction_id(&self) -> &str {
48        &self.transaction_id
49    }
50
51    #[must_use]
52    pub const fn preview(&self) -> &DryRunReport {
53        &self.preview
54    }
55}
56
57pub(crate) use lock::acquire;
58pub(crate) use plan::{dry_run_report, project_plan};
59pub(crate) use prepare::prepare_transaction;
60pub(crate) use recovery::recover_transaction;