@@ -145,11 +145,12 @@ let read_source_template_files ?(download_git = false) source =
145
145
let rec of_dec
146
146
?(use_defaults = false )
147
147
?(files = Hashtbl. create 256 )
148
- ?( ignore_configs = false )
149
- ?( ignore_actions = false )
150
- ?( ignore_example_commands = false )
148
+ ?ignore_configs
149
+ ?ignore_actions
150
+ ?ignore_example_commands
151
151
~source
152
152
~context
153
+ ~depth
153
154
(dec : Dec_template.t )
154
155
=
155
156
let open Result.Syntax in
@@ -161,13 +162,25 @@ let rec of_dec
161
162
|> Result. map_error (fun reason ->
162
163
Spin_error. invalid_template ~msg: reason dec.name)
163
164
in
164
- read
165
+ let ignore_configs =
166
+ Option. value ignore_configs ~default: base.ignore_configs
167
+ in
168
+ let ignore_actions =
169
+ Option. value ignore_actions ~default: base.ignore_actions
170
+ in
171
+ let ignore_example_commands =
172
+ Option. value
173
+ ignore_example_commands
174
+ ~default: base.ignore_example_commands
175
+ in
176
+ read_template
165
177
source
166
178
~use_defaults
167
179
~context
168
- ~ignore_configs: base.ignore_configs
169
- ~ignore_actions: base.ignore_actions
170
- ~ignore_example_commands: base.ignore_example_commands
180
+ ~ignore_configs
181
+ ~ignore_actions
182
+ ~ignore_example_commands
183
+ ~depth: (depth + 1 )
171
184
| None ->
172
185
Result. ok
173
186
{ name = " "
@@ -182,6 +195,29 @@ let rec of_dec
182
195
; source
183
196
}
184
197
in
198
+ let compute_ignore v f =
199
+ match depth, v, dec.base_template with
200
+ | 0 , _ , _ ->
201
+ false
202
+ | _ , Some x , _ ->
203
+ x
204
+ | _ , None , Some base_template ->
205
+ f base_template
206
+ | _ , None , None ->
207
+ false
208
+ in
209
+ let ignore_configs =
210
+ compute_ignore ignore_configs (fun x ->
211
+ x.Dec_template.Base_template. ignore_configs)
212
+ in
213
+ let ignore_actions =
214
+ compute_ignore ignore_actions (fun x ->
215
+ x.Dec_template.Base_template. ignore_actions)
216
+ in
217
+ let ignore_example_commands =
218
+ compute_ignore ignore_example_commands (fun x ->
219
+ x.Dec_template.Base_template. ignore_example_commands)
220
+ in
185
221
let * () =
186
222
if ignore_configs then
187
223
Result. ok ()
@@ -235,27 +271,34 @@ let rec of_dec
235
271
; source
236
272
}
237
273
238
- and read
274
+ and read_template
239
275
?(use_defaults = false )
240
- ?( ignore_configs = false )
241
- ?( ignore_actions = false )
242
- ?( ignore_example_commands = false )
276
+ ?ignore_configs
277
+ ?ignore_actions
278
+ ?ignore_example_commands
243
279
?context
280
+ ~depth
244
281
source
245
282
=
246
283
let open Result.Syntax in
247
284
let context = Option. value context ~default: (Hashtbl. create 256 ) in
248
- let * spin_file = read_source_spin_file source ~download_git: true in
285
+ let * (spin_file : Dec_template.t ) =
286
+ read_source_spin_file source ~download_git: true
287
+ in
249
288
let * files = read_source_template_files source ~download_git: false in
250
289
of_dec
251
290
spin_file
252
- ~ ignore_configs
253
- ~ ignore_actions
254
- ~ ignore_example_commands
291
+ ? ignore_configs
292
+ ? ignore_actions
293
+ ? ignore_example_commands
255
294
~files
256
295
~context
257
296
~source
258
297
~use_defaults
298
+ ~depth
299
+
300
+ let read ?(use_defaults = false ) ?context source =
301
+ read_template ~use_defaults ?context ~depth: 0 source
259
302
260
303
let run_actions ~path actions =
261
304
let open Result.Syntax in
0 commit comments