Add safe file-root apply

This commit is contained in:
Eric Wendland 2026-05-20 13:30:57 +02:00
commit 5c91635ea2
8 changed files with 394 additions and 14 deletions

View file

@ -86,6 +86,11 @@ pub enum ControlRequest {
name: String,
bearer_secret: Option<String>,
},
CasRootApply {
source: String,
target: PathBuf,
dry_run: bool,
},
CasConflictRecord {
root: String,
path: String,
@ -403,6 +408,15 @@ pub enum ControlResponse {
reason: String,
note: String,
},
CasRootApplied {
source: String,
target: PathBuf,
files_written: usize,
dirs_created: usize,
conflicts: Vec<FileConflict>,
dry_run: bool,
note: String,
},
CasConflictRecorded {
conflict: FileConflict,
},
@ -1444,6 +1458,30 @@ mod tests {
response
);
let request = ControlRequest::CasRootApply {
source: "remote-node-peer-notes".to_owned(),
target: PathBuf::from("/tmp/notes"),
dry_run: true,
};
assert_eq!(
decode_request(&encode_request(&request).expect("encode")).expect("decode"),
request
);
let response = ControlResponse::CasRootApplied {
source: "remote-node-peer-notes".to_owned(),
target: PathBuf::from("/tmp/notes"),
files_written: 1,
dirs_created: 1,
conflicts: Vec::new(),
dry_run: true,
note: "safe apply".to_owned(),
};
assert_eq!(
decode_response(&encode_response(&response).expect("encode")).expect("decode"),
response
);
let request = ControlRequest::CasConflictResolve {
conflict_id: "file-conflict:notes:1".to_owned(),
resolution: "keep-local".to_owned(),