Skip to content

Commit 5efec13

Browse files
fix(storage): preserve git storage configs on clone (#247)
Co-authored-by: Andrew Briscoe <awb@presempathy.com>
1 parent 24e994c commit 5efec13

1 file changed

Lines changed: 28 additions & 1 deletion

File tree

src/storage/git.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl<const N: usize> Clone for GitNodeStorage<N> {
4747
let cloned = Self {
4848
_repository: self._repository.clone(),
4949
cache: Mutex::new(LruCache::new(DEFAULT_CACHE_SIZE)),
50-
configs: Mutex::new(HashMap::new()),
50+
configs: Mutex::new(self.configs.lock().clone()),
5151
hash_to_object_id: Mutex::new(HashMap::new()),
5252
dataset_dir: self.dataset_dir.clone(),
5353
};
@@ -440,6 +440,33 @@ mod tests {
440440
assert!(cached.is_some());
441441
}
442442

443+
#[test]
444+
fn clone_preserves_memory_only_tree_config() {
445+
let (temp_dir, repo) = create_test_repo();
446+
let dataset_dir = temp_dir.path().join("dataset");
447+
std::fs::create_dir_all(&dataset_dir).unwrap();
448+
let storage = GitNodeStorage::<32>::new(repo, dataset_dir.clone()).unwrap();
449+
let config = br#"{"root_hash":null}"#;
450+
451+
storage.save_config("tree_config", config);
452+
assert_eq!(
453+
storage.get_config("tree_config").as_deref(),
454+
Some(&config[..])
455+
);
456+
assert!(
457+
!dataset_dir.join("prolly_config_tree_config").exists(),
458+
"tree_config is intentionally memory-only for GitNodeStorage"
459+
);
460+
461+
let cloned = storage.clone();
462+
463+
assert_eq!(
464+
cloned.get_config("tree_config").as_deref(),
465+
Some(&config[..]),
466+
"cloning GitNodeStorage must preserve memory-only tree_config"
467+
);
468+
}
469+
443470
#[test]
444471
fn failed_insert_does_not_populate_cache() {
445472
let (temp_dir, repo) = create_test_repo();

0 commit comments

Comments
 (0)