From cc9a8d6fd13cd4afa3aecad9672683be4e3767fc Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Wed, 16 Apr 2025 15:14:37 +0800 Subject: [PATCH 1/2] fix: should throw correct error when switching to a unexist version --- crates/loro-internal/src/loro.rs | 2 +- crates/loro/tests/loro_rust_test.rs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/crates/loro-internal/src/loro.rs b/crates/loro-internal/src/loro.rs index b16d7906d..7d2d3c96f 100644 --- a/crates/loro-internal/src/loro.rs +++ b/crates/loro-internal/src/loro.rs @@ -1326,7 +1326,7 @@ impl LoroDoc { let frontiers = if to_shrink_frontiers { shrink_frontiers(frontiers, &oplog.dag) - .map_err(|_| LoroError::SwitchToVersionBeforeShallowRoot)? + .map_err(|id| LoroError::FrontiersNotFound(id))? } else { frontiers.clone() }; diff --git a/crates/loro/tests/loro_rust_test.rs b/crates/loro/tests/loro_rust_test.rs index e578ae6c2..819212d32 100644 --- a/crates/loro/tests/loro_rust_test.rs +++ b/crates/loro/tests/loro_rust_test.rs @@ -3358,3 +3358,16 @@ fn test_from_shallow_snapshot() { .insert("text".into(), LoroValue::String("Hello".into())); assert_eq!(new_doc.get_deep_value(), LoroValue::Map(expected)); } + +#[test] +fn test_checkout_to_unknown_version() { + let doc = LoroDoc::new(); + doc.set_peer_id(1).unwrap(); + doc.get_text("text").insert(0, "Hello").unwrap(); + let result = doc.checkout(&Frontiers::from([ID::new(2, 2), ID::new(1, 1)])); + assert!(result.is_err()); + assert!(matches!( + result.err().unwrap(), + LoroError::FrontiersNotFound(..) + )); +} From dabdf5297e181318dccc89117582e0d88b0f4bf4 Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Wed, 23 Apr 2025 23:08:50 +0800 Subject: [PATCH 2/2] chore: fix warning --- crates/loro-internal/src/loro.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/loro-internal/src/loro.rs b/crates/loro-internal/src/loro.rs index 7d2d3c96f..2a55cce14 100644 --- a/crates/loro-internal/src/loro.rs +++ b/crates/loro-internal/src/loro.rs @@ -1325,8 +1325,7 @@ impl LoroDoc { } let frontiers = if to_shrink_frontiers { - shrink_frontiers(frontiers, &oplog.dag) - .map_err(|id| LoroError::FrontiersNotFound(id))? + shrink_frontiers(frontiers, &oplog.dag).map_err(LoroError::FrontiersNotFound)? } else { frontiers.clone() };