Skip to content

Commit caaa2ab

Browse files
committed
op_heads_store: propagate initialization error
1 parent 33d6118 commit caaa2ab

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

lib/src/repo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ impl ReadonlyRepo {
161161
}
162162

163163
pub fn default_op_heads_store_initializer() -> &'static OpHeadsStoreInitializer<'static> {
164-
&|_settings, store_path| Ok(Box::new(SimpleOpHeadsStore::init(store_path)))
164+
&|_settings, store_path| Ok(Box::new(SimpleOpHeadsStore::init(store_path)?))
165165
}
166166

167167
pub fn default_index_store_initializer() -> &'static IndexStoreInitializer<'static> {

lib/src/simple_op_heads_store.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,29 @@ use std::io;
2222
use std::path::Path;
2323
use std::path::PathBuf;
2424

25+
use thiserror::Error;
26+
27+
use crate::backend::BackendInitError;
28+
use crate::file_util::IoResultExt as _;
29+
use crate::file_util::PathError;
2530
use crate::lock::FileLock;
2631
use crate::object_id::ObjectId;
2732
use crate::op_heads_store::OpHeadsStore;
2833
use crate::op_heads_store::OpHeadsStoreError;
2934
use crate::op_heads_store::OpHeadsStoreLock;
3035
use crate::op_store::OperationId;
3136

37+
/// Error that may occur during [`SimpleOpHeadsStore`] initialization.
38+
#[derive(Debug, Error)]
39+
#[error("Failed to initialize simple operation heads store")]
40+
pub struct SimpleOpHeadsStoreInitError(#[from] pub PathError);
41+
42+
impl From<SimpleOpHeadsStoreInitError> for BackendInitError {
43+
fn from(err: SimpleOpHeadsStoreInitError) -> Self {
44+
BackendInitError(err.into())
45+
}
46+
}
47+
3248
pub struct SimpleOpHeadsStore {
3349
dir: PathBuf,
3450
}
@@ -46,10 +62,10 @@ impl SimpleOpHeadsStore {
4662
"simple_op_heads_store"
4763
}
4864

49-
pub fn init(dir: &Path) -> Self {
65+
pub fn init(dir: &Path) -> Result<Self, SimpleOpHeadsStoreInitError> {
5066
let op_heads_dir = dir.join("heads");
51-
fs::create_dir(&op_heads_dir).unwrap();
52-
Self { dir: op_heads_dir }
67+
fs::create_dir(&op_heads_dir).context(&op_heads_dir)?;
68+
Ok(Self { dir: op_heads_dir })
5369
}
5470

5571
pub fn load(dir: &Path) -> Self {

0 commit comments

Comments
 (0)