Skip to content

Commit c6cf9d5

Browse files
committed
testutils: add an enum for TestRepo backend
I plan to add another backend for use in tests.
1 parent 79527d7 commit c6cf9d5

File tree

1 file changed

+36
-27
lines changed

1 file changed

+36
-27
lines changed

lib/testutils/src/lib.rs

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -84,41 +84,50 @@ pub struct TestRepo {
8484
pub repo: Arc<ReadonlyRepo>,
8585
}
8686

87+
#[derive(PartialEq, Eq, Copy, Clone)]
88+
pub enum TestRepoBackend {
89+
Git,
90+
Local,
91+
}
92+
93+
impl TestRepoBackend {
94+
fn init_backend(&self, store_path: &Path) -> Result<Box<dyn Backend>, BackendInitError> {
95+
match self {
96+
TestRepoBackend::Git => Ok(Box::new(GitBackend::init_internal(store_path)?)),
97+
TestRepoBackend::Local => Ok(Box::new(LocalBackend::init(store_path))),
98+
}
99+
}
100+
}
101+
87102
impl TestRepo {
88103
pub fn init(use_git: bool) -> Self {
104+
let backend = if use_git {
105+
TestRepoBackend::Git
106+
} else {
107+
TestRepoBackend::Local
108+
};
109+
Self::init_with_backend(backend)
110+
}
111+
112+
pub fn init_with_backend(backend: TestRepoBackend) -> Self {
89113
let settings = user_settings();
90114
let temp_dir = new_temp_dir();
91115

92116
let repo_dir = temp_dir.path().join("repo");
93117
fs::create_dir(&repo_dir).unwrap();
94118

95-
let repo = if use_git {
96-
ReadonlyRepo::init(
97-
&settings,
98-
&repo_dir,
99-
|store_path| -> Result<Box<dyn Backend>, BackendInitError> {
100-
Ok(Box::new(GitBackend::init_internal(store_path)?))
101-
},
102-
ReadonlyRepo::default_op_store_factory(),
103-
ReadonlyRepo::default_op_heads_store_factory(),
104-
ReadonlyRepo::default_index_store_factory(),
105-
ReadonlyRepo::default_submodule_store_factory(),
106-
)
107-
.unwrap()
108-
} else {
109-
ReadonlyRepo::init(
110-
&settings,
111-
&repo_dir,
112-
|store_path| -> Result<Box<dyn Backend>, BackendInitError> {
113-
Ok(Box::new(LocalBackend::init(store_path)))
114-
},
115-
ReadonlyRepo::default_op_store_factory(),
116-
ReadonlyRepo::default_op_heads_store_factory(),
117-
ReadonlyRepo::default_index_store_factory(),
118-
ReadonlyRepo::default_submodule_store_factory(),
119-
)
120-
.unwrap()
121-
};
119+
let repo = ReadonlyRepo::init(
120+
&settings,
121+
&repo_dir,
122+
|store_path| -> Result<Box<dyn Backend>, BackendInitError> {
123+
backend.init_backend(store_path)
124+
},
125+
ReadonlyRepo::default_op_store_factory(),
126+
ReadonlyRepo::default_op_heads_store_factory(),
127+
ReadonlyRepo::default_index_store_factory(),
128+
ReadonlyRepo::default_submodule_store_factory(),
129+
)
130+
.unwrap();
122131

123132
Self {
124133
_temp_dir: temp_dir,

0 commit comments

Comments
 (0)