Apply rustfmt to entire workspace

Runs cargo fmt --all; all 573 tests still passing, clippy still clean.
No logic changes — formatting only.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
osobh
2026-04-04 20:31:33 -05:00
co-authored by Claude Sonnet 4.6
parent 3d524e2d63
commit 1c107fe58a
69 changed files with 2790 additions and 1325 deletions
+101 -59
View File
@@ -41,11 +41,7 @@ impl OnionFile {
/// Create a new named branch forked from the current HEAD of `source_branch`.
///
/// Returns the new branch ID.
pub fn create_branch(
&mut self,
name: &str,
source_branch: &str,
) -> Result<u32, OnionError> {
pub fn create_branch(&mut self, name: &str, source_branch: &str) -> Result<u32, OnionError> {
if self.branch_by_name(name).is_some() {
return Err(OnionError::BranchExists(name.to_string()));
}
@@ -133,11 +129,7 @@ impl OnionFile {
}
}
fn merge_latest_wins(
&mut self,
source_id: u32,
target_id: u32,
) -> Result<u64, OnionError> {
fn merge_latest_wins(&mut self, source_id: u32, target_id: u32) -> Result<u64, OnionError> {
let fork_rev = self
.branches
.iter()
@@ -231,21 +223,21 @@ impl OnionFile {
self.commit_session(session, Some(&annotation))
}
fn merge_three_way(
&mut self,
source_id: u32,
target_id: u32,
) -> Result<u64, OnionError> {
fn merge_three_way(&mut self, source_id: u32, target_id: u32) -> Result<u64, OnionError> {
let source_head = self
.index
.branch_head(source_id)
.ok_or_else(|| OnionError::Malformed(format!("source branch {source_id} has no revisions")))?
.ok_or_else(|| {
OnionError::Malformed(format!("source branch {source_id} has no revisions"))
})?
.revision;
let target_head = self
.index
.branch_head(target_id)
.ok_or_else(|| OnionError::Malformed(format!("target branch {target_id} has no revisions")))?
.ok_or_else(|| {
OnionError::Malformed(format!("target branch {target_id} has no revisions"))
})?
.revision;
// Find common ancestor of the two branch HEADs
@@ -253,13 +245,24 @@ impl OnionFile {
.index
.common_ancestor(source_head, target_head)
.ok_or_else(|| {
let src_name = self.branches.iter().find(|b| b.id == source_id)
let src_name = self
.branches
.iter()
.find(|b| b.id == source_id)
.and_then(|b| self.annotations.get(b.name_off))
.unwrap_or("?").to_owned();
let tgt_name = self.branches.iter().find(|b| b.id == target_id)
.unwrap_or("?")
.to_owned();
let tgt_name = self
.branches
.iter()
.find(|b| b.id == target_id)
.and_then(|b| self.annotations.get(b.name_off))
.unwrap_or("?").to_owned();
OnionError::NoCommonAncestor { a: src_name, b: tgt_name }
.unwrap_or("?")
.to_owned();
OnionError::NoCommonAncestor {
a: src_name,
b: tgt_name,
}
})?;
// Collect source delta since ancestor (latest write per offset)
@@ -321,7 +324,8 @@ impl OnionFile {
if merged.is_empty() {
return Err(OnionError::Malformed(
"three-way merge: no source changes to apply (target already has all changes)".to_string(),
"three-way merge: no source changes to apply (target already has all changes)"
.to_string(),
));
}
@@ -329,9 +333,8 @@ impl OnionFile {
for (h5_off, bytes) in &merged {
session.record_page(*h5_off, bytes);
}
let annotation = format!(
"3-way merge {source_id}{target_id} [ancestor rev {ancestor_rev}]"
);
let annotation =
format!("3-way merge {source_id}{target_id} [ancestor rev {ancestor_rev}]");
self.commit_session(session, Some(&annotation))
}
@@ -371,11 +374,7 @@ impl OnionFile {
.iter()
.map(|b| BranchInfo {
id: b.id,
name: self
.annotations
.get(b.name_off)
.unwrap_or("?")
.to_owned(),
name: self.annotations.get(b.name_off).unwrap_or("?").to_owned(),
head_rev: b.head_rev,
fork_rev: b.fork_rev,
})
@@ -383,7 +382,10 @@ impl OnionFile {
}
/// Return revision entries for a named branch in chronological order.
pub fn branch_history(&self, name: &str) -> Result<Vec<&crate::format::RevisionEntry>, OnionError> {
pub fn branch_history(
&self,
name: &str,
) -> Result<Vec<&crate::format::RevisionEntry>, OnionError> {
let branch = self
.branch_by_name(name)
.ok_or_else(|| OnionError::BranchNotFound(name.to_string()))?;
@@ -414,7 +416,9 @@ impl OnionFile {
.branch_by_name(name)
.ok_or_else(|| OnionError::BranchNotFound(name.to_string()))?;
if branch.id == crate::format::BRANCH_MAIN {
return Err(OnionError::Malformed("cannot delete the main branch".into()));
return Err(OnionError::Malformed(
"cannot delete the main branch".into(),
));
}
let id = branch.id;
self.branches.retain(|b| b.id != id);
@@ -605,14 +609,18 @@ mod tests {
fn merge_latest_wins_produces_new_revision() {
let (_h5, mut onion, _feat_id) = make_fork_scenario();
let pre_count = onion.revision_count();
onion.merge_into("feat", "main", MergeStrategy::LatestWins).unwrap();
onion
.merge_into("feat", "main", MergeStrategy::LatestWins)
.unwrap();
assert_eq!(onion.revision_count(), pre_count + 1);
}
#[test]
fn merge_latest_wins_page_content_correct() {
let (h5, mut onion, _feat_id) = make_fork_scenario();
onion.merge_into("feat", "main", MergeStrategy::LatestWins).unwrap();
onion
.merge_into("feat", "main", MergeStrategy::LatestWins)
.unwrap();
onion.flush().unwrap();
// Reload from disk and reconstruct main HEAD
@@ -621,8 +629,10 @@ mod tests {
let base = std::fs::read(&h5).unwrap();
let state = onion2.reconstruct_revision(main_head, &base).unwrap();
// Page 0 should now be BB (from feat)
assert!(state[0..4096].iter().all(|&b| b == 0xBB),
"page 0 should be BB after latest-wins merge");
assert!(
state[0..4096].iter().all(|&b| b == 0xBB),
"page 0 should be BB after latest-wins merge"
);
}
#[test]
@@ -646,15 +656,19 @@ mod tests {
s2.record_page(0, &vec![0x22u8; 4096]);
onion.commit_session(s2, None).unwrap();
onion.merge_into("feat", "main", MergeStrategy::LatestWins).unwrap();
onion
.merge_into("feat", "main", MergeStrategy::LatestWins)
.unwrap();
onion.flush().unwrap();
let onion2 = OnionFile::open(&h5).unwrap();
let head = onion2.revision_count() - 1;
let base = std::fs::read(&h5).unwrap();
let state = onion2.reconstruct_revision(head, &base).unwrap();
assert!(state[0..4096].iter().all(|&b| b == 0x22),
"latest write (0x22) must win in LatestWins merge");
assert!(
state[0..4096].iter().all(|&b| b == 0x22),
"latest write (0x22) must win in LatestWins merge"
);
}
#[test]
@@ -666,7 +680,9 @@ mod tests {
onion.commit_session(s, None).unwrap();
// fork but make no commits on feat
onion.create_branch("feat", "main").unwrap();
let err = onion.merge_into("feat", "main", MergeStrategy::LatestWins).unwrap_err();
let err = onion
.merge_into("feat", "main", MergeStrategy::LatestWins)
.unwrap_err();
assert!(matches!(err, OnionError::Malformed(_)));
}
@@ -682,20 +698,30 @@ mod tests {
source.to_vec() // just return source
};
onion
.merge_into("feat", "main", MergeStrategy::DatasetLevel(Box::new(resolver)))
.merge_into(
"feat",
"main",
MergeStrategy::DatasetLevel(Box::new(resolver)),
)
.unwrap();
assert!(called.load(std::sync::atomic::Ordering::SeqCst), "resolver must be called");
assert!(
called.load(std::sync::atomic::Ordering::SeqCst),
"resolver must be called"
);
}
#[test]
fn merge_dataset_level_resolver_controls_output() {
let (h5, mut onion, _feat_id) = make_fork_scenario();
// Resolver always returns 0xCC regardless of inputs
let resolver = |_path: &str, _target: &[u8], _source: &[u8]| -> Vec<u8> {
vec![0xCCu8; 4096]
};
let resolver =
|_path: &str, _target: &[u8], _source: &[u8]| -> Vec<u8> { vec![0xCCu8; 4096] };
onion
.merge_into("feat", "main", MergeStrategy::DatasetLevel(Box::new(resolver)))
.merge_into(
"feat",
"main",
MergeStrategy::DatasetLevel(Box::new(resolver)),
)
.unwrap();
onion.flush().unwrap();
@@ -703,8 +729,10 @@ mod tests {
let head = onion2.revision_count() - 1;
let base = std::fs::read(&h5).unwrap();
let state = onion2.reconstruct_revision(head, &base).unwrap();
assert!(state[0..4096].iter().all(|&b| b == 0xCC),
"resolver output 0xCC should be in merged state");
assert!(
state[0..4096].iter().all(|&b| b == 0xCC),
"resolver output 0xCC should be in merged state"
);
}
// ── Merge: ThreeWay ──────────────────────────────────────────────────────
@@ -736,7 +764,9 @@ mod tests {
sf.record_page(0, &vec![0xBBu8; 4096]);
onion.commit_session(sf, None).unwrap();
onion.merge_into("feat", "main", MergeStrategy::ThreeWay).unwrap();
onion
.merge_into("feat", "main", MergeStrategy::ThreeWay)
.unwrap();
onion.flush().unwrap();
let onion2 = OnionFile::open(&h5).unwrap();
@@ -744,10 +774,14 @@ mod tests {
let base = std::fs::read(&h5).unwrap();
let state = onion2.reconstruct_revision(head, &base).unwrap();
assert!(state[0..4096].iter().all(|&b| b == 0xBB),
"page 0 should be BB (from feat)");
assert!(state[4096..8192].iter().all(|&b| b == 0xCC),
"page 4096 should stay CC (from main — not overwritten by 3-way)");
assert!(
state[0..4096].iter().all(|&b| b == 0xBB),
"page 0 should be BB (from feat)"
);
assert!(
state[4096..8192].iter().all(|&b| b == 0xCC),
"page 4096 should stay CC (from main — not overwritten by 3-way)"
);
}
#[test]
@@ -772,22 +806,28 @@ mod tests {
sf.record_page(0, &vec![0xCCu8; 4096]);
onion.commit_session(sf, None).unwrap();
onion.merge_into("feat", "main", MergeStrategy::ThreeWay).unwrap();
onion
.merge_into("feat", "main", MergeStrategy::ThreeWay)
.unwrap();
onion.flush().unwrap();
let onion2 = OnionFile::open(&h5).unwrap();
let head = onion2.revision_count() - 1;
let base = std::fs::read(&h5).unwrap();
let state = onion2.reconstruct_revision(head, &base).unwrap();
assert!(state[0..4096].iter().all(|&b| b == 0xCC),
"on conflict, source (CC) should win");
assert!(
state[0..4096].iter().all(|&b| b == 0xCC),
"on conflict, source (CC) should win"
);
}
#[test]
fn merge_nonexistent_source_errors() {
let h5 = tmp_h5();
let mut onion = OnionFile::create(&h5, 4096).unwrap();
let err = onion.merge_into("no-such", "main", MergeStrategy::LatestWins).unwrap_err();
let err = onion
.merge_into("no-such", "main", MergeStrategy::LatestWins)
.unwrap_err();
assert!(matches!(err, OnionError::BranchNotFound(_)));
}
@@ -799,7 +839,9 @@ mod tests {
s.record_page(0, &vec![0u8; 4096]);
onion.commit_session(s, None).unwrap();
onion.create_branch("feat", "main").unwrap();
let err = onion.merge_into("feat", "no-target", MergeStrategy::LatestWins).unwrap_err();
let err = onion
.merge_into("feat", "no-target", MergeStrategy::LatestWins)
.unwrap_err();
assert!(matches!(err, OnionError::BranchNotFound(_)));
}
}