@@ -84,41 +84,50 @@ pub struct TestRepo {
84
84
pub repo : Arc < ReadonlyRepo > ,
85
85
}
86
86
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
+
87
102
impl TestRepo {
88
103
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 {
89
113
let settings = user_settings ( ) ;
90
114
let temp_dir = new_temp_dir ( ) ;
91
115
92
116
let repo_dir = temp_dir. path ( ) . join ( "repo" ) ;
93
117
fs:: create_dir ( & repo_dir) . unwrap ( ) ;
94
118
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 ( ) ;
122
131
123
132
Self {
124
133
_temp_dir : temp_dir,
0 commit comments