diff --git a/lib/src/repo.rs b/lib/src/repo.rs index 31b5e86e4..5f1777991 100644 --- a/lib/src/repo.rs +++ b/lib/src/repo.rs @@ -114,18 +114,19 @@ impl ReadonlyRepo { user_settings: &UserSettings, repo_path: &Path, backend_factory: impl FnOnce(&Path) -> Box, - ) -> Arc { - let repo_path = repo_path.canonicalize().unwrap(); + ) -> Result, PathError> { + let repo_path = repo_path.canonicalize().context(repo_path)?; let store_path = repo_path.join("store"); - fs::create_dir(&store_path).unwrap(); + fs::create_dir(&store_path).context(&store_path)?; let backend = backend_factory(&store_path); - fs::write(&store_path.join("backend"), backend.name()).unwrap(); + let backend_path = store_path.join("backend"); + fs::write(&backend_path, backend.name()).context(&backend_path)?; let store = Store::new(backend); let repo_settings = user_settings.with_repo(&repo_path).unwrap(); let op_store_path = repo_path.join("op_store"); - fs::create_dir(&op_store_path).unwrap(); + fs::create_dir(&op_store_path).context(&op_store_path)?; let op_store: Arc = Arc::new(SimpleOpStore::init(op_store_path)); let mut root_view = op_store::View::default(); root_view.head_ids.insert(store.root_commit_id().clone()); @@ -134,16 +135,16 @@ impl ReadonlyRepo { .insert(store.root_commit_id().clone()); let op_heads_path = repo_path.join("op_heads"); - fs::create_dir(&op_heads_path).unwrap(); + fs::create_dir(&op_heads_path).context(&op_heads_path)?; let (op_heads_store, init_op) = OpHeadsStore::init(op_heads_path, &op_store, &root_view); let op_heads_store = Arc::new(op_heads_store); let index_path = repo_path.join("index"); - fs::create_dir(&index_path).unwrap(); + fs::create_dir(&index_path).context(&index_path)?; let index_store = Arc::new(IndexStore::init(index_path)); let view = View::new(root_view); - Arc::new(ReadonlyRepo { + Ok(Arc::new(ReadonlyRepo { repo_path, store, op_store, @@ -153,7 +154,7 @@ impl ReadonlyRepo { index_store, index: Mutex::new(None), view, - }) + })) } pub fn load_at_head( diff --git a/lib/src/testutils.rs b/lib/src/testutils.rs index 543fe05bb..77a647e39 100644 --- a/lib/src/testutils.rs +++ b/lib/src/testutils.rs @@ -96,10 +96,12 @@ impl TestRepo { ReadonlyRepo::init(&settings, &repo_dir, |store_path| { Box::new(GitBackend::init_external(store_path, &git_path)) }) + .unwrap() } else { ReadonlyRepo::init(&settings, &repo_dir, |store_path| { Box::new(LocalBackend::init(store_path)) }) + .unwrap() }; Self { diff --git a/lib/src/workspace.rs b/lib/src/workspace.rs index 304daf359..2865e9481 100644 --- a/lib/src/workspace.rs +++ b/lib/src/workspace.rs @@ -148,7 +148,7 @@ impl Workspace { let jj_dir = create_jj_dir(workspace_root)?; let repo_dir = jj_dir.join("repo"); std::fs::create_dir(&repo_dir).context(&repo_dir)?; - let repo = ReadonlyRepo::init(user_settings, &repo_dir, backend_factory); + let repo = ReadonlyRepo::init(user_settings, &repo_dir, backend_factory)?; let (working_copy, repo) = init_working_copy( user_settings, &repo, diff --git a/lib/tests/test_git.rs b/lib/tests/test_git.rs index 3cb771eb3..61d6f79bd 100644 --- a/lib/tests/test_git.rs +++ b/lib/tests/test_git.rs @@ -287,7 +287,8 @@ impl GitRepoData { std::fs::create_dir(&jj_repo_dir).unwrap(); let repo = ReadonlyRepo::init(&settings, &jj_repo_dir, |store_path| { Box::new(GitBackend::init_external(store_path, &git_repo_dir)) - }); + }) + .unwrap(); Self { settings, _temp_dir: temp_dir, @@ -525,7 +526,8 @@ fn test_init() { std::fs::create_dir(&jj_repo_dir).unwrap(); let repo = ReadonlyRepo::init(&settings, &jj_repo_dir, |store_path| { Box::new(GitBackend::init_external(store_path, &git_repo_dir)) - }); + }) + .unwrap(); // The refs were *not* imported -- it's the caller's responsibility to import // any refs they care about. assert!(!repo.view().heads().contains(&initial_commit_id)); @@ -689,7 +691,8 @@ fn set_up_push_repos(settings: &UserSettings, temp_dir: &TempDir) -> PushTestSet std::fs::create_dir(&jj_repo_dir).unwrap(); let jj_repo = ReadonlyRepo::init(settings, &jj_repo_dir, |store_path| { Box::new(GitBackend::init_external(store_path, &clone_repo_dir)) - }); + }) + .unwrap(); let mut tx = jj_repo.start_transaction("test"); let new_commit = testutils::create_random_commit(settings, &jj_repo) .set_parents(vec![initial_commit_id])