@@ -228,6 +228,7 @@ parse_file_as_subdoc_and_validate (const gchar *filename,
228228 guint64 version ;
229229 g_autoptr (GObject ) object = NULL ;
230230
231+ /* Open the file and determine a document type */
231232 file = fopen (filename , "r" );
232233 if (!file )
233234 {
@@ -311,42 +312,51 @@ parse_file_as_subdoc_and_validate (const gchar *filename,
311312 );
312313 return FALSE;
313314 }
314- if (type == MODULEMD_YAML_DOC_DEFAULTS )
315- /* validates implicitly */
316- object = G_OBJECT (modulemd_defaults_v1_parse_yaml (subdoc , TRUE, error ));
317- else if (type == MODULEMD_YAML_DOC_MODULESTREAM )
318- {
319- object = G_OBJECT (modulemd_module_stream_v1_parse_yaml (subdoc , TRUE, error ));
320- if (!object )
321- return FALSE;
322- if (!modulemd_module_stream_validate ( MODULEMD_MODULE_STREAM (object ), error ))
323- return FALSE;
324- }
325- else if (type == MODULEMD_YAML_DOC_OBSOLETES )
326- /* validates implicitly */
327- object = G_OBJECT (modulemd_obsoletes_parse_yaml (subdoc , TRUE, error ));
328- else if (type == MODULEMD_YAML_DOC_PACKAGER )
315+
316+ /* Parse and validate the document body */
317+ switch (validation_type )
329318 {
330- object = G_OBJECT (modulemd_module_stream_v2_parse_yaml (subdoc ,
331- TRUE, TRUE, error ));
332- if (!object )
333- return FALSE;
334- if (!modulemd_module_stream_validate ( MODULEMD_MODULE_STREAM (object ), error ))
335- return FALSE;
319+ case MMD_TYPE_MODULEMD_V1 :
320+ object = G_OBJECT (modulemd_module_stream_v1_parse_yaml (subdoc ,
321+ TRUE, error ));
322+ if (object && !modulemd_module_stream_validate (
323+ MODULEMD_MODULE_STREAM (object ), error ))
324+ g_clear_object (& object );
325+ break ;
326+ case MMD_TYPE_MODULEMD_DEFAULTS_V1 :
327+ object = G_OBJECT (modulemd_defaults_v1_parse_yaml (subdoc ,
328+ TRUE, error ));
329+ /* validated implicitly */
330+ break ;
331+ case MMD_TYPE_MODULEMD_OBSOLETES_V1 :
332+ object = G_OBJECT (modulemd_obsoletes_parse_yaml (subdoc , TRUE, error ));
333+ /* validated implicitly */
334+ break ;
335+ case MMD_TYPE_MODULEMD_PACKAGER_V2 :
336+ object = G_OBJECT (modulemd_module_stream_v2_parse_yaml (subdoc ,
337+ TRUE, TRUE, error ));
338+ if (object && !modulemd_module_stream_validate (
339+ MODULEMD_MODULE_STREAM (object ), error ))
340+ g_clear_object (& object );
341+ break ;
342+ case MMD_TYPE_MODULEMD_TRANSLATIONS_V1 :
343+ object = G_OBJECT (modulemd_translation_parse_yaml (subdoc ,
344+ TRUE, error ));
345+ /* validated implicitly */
346+ break ;
347+ default :
348+ g_set_error (
349+ error ,
350+ MODULEMD_ERROR ,
351+ 0 ,
352+ "Internal error: %s type is not supported" ,
353+ mmd_type2astring (validation_type )
354+ );
355+ return FALSE;
336356 }
337- else if (type == MODULEMD_YAML_DOC_TRANSLATIONS )
338- /* validates implicitly */
339- object = G_OBJECT (modulemd_translation_parse_yaml (subdoc , TRUE, error ));
340- else {
341- g_set_error (
342- error ,
343- MODULEMD_ERROR ,
344- 0 ,
345- "Internal error: %s type is not supported" ,
346- mmd_type2astring (validation_type )
347- );
357+ if (!object )
348358 return FALSE;
349- }
359+
350360 /* Check for a garbage past the first document */
351361 if (!yaml_parser_parse (& parser , & event ))
352362 {
@@ -367,8 +377,7 @@ parse_file_as_subdoc_and_validate (const gchar *filename,
367377 }
368378 }
369379 yaml_event_delete (& event );
370- /* Already validated by modulemd_defaults_v1_parse_yaml() etc. call. */
371- return (NULL != object );
380+ return TRUE;
372381}
373382
374383static gboolean
@@ -388,18 +397,6 @@ parse_file (const gchar *filename, GPtrArray **failures, GError **error)
388397 return modulemd_module_index_update_from_file_ext (
389398 index , filename , TRUE, TRUE, failures , error );
390399 }
391- case MMD_TYPE_MODULEMD_DEFAULTS_V1 :
392- return parse_file_as_subdoc_and_validate (filename ,
393- options .type ,
394- MODULEMD_YAML_DOC_DEFAULTS ,
395- 1u ,
396- error );
397- case MMD_TYPE_MODULEMD_OBSOLETES_V1 :
398- return parse_file_as_subdoc_and_validate (filename ,
399- options .type ,
400- MODULEMD_YAML_DOC_OBSOLETES ,
401- 1u ,
402- error );
403400 case MMD_TYPE_MODULEMD_V1 :
404401 return parse_file_as_subdoc_and_validate (filename ,
405402 options .type ,
@@ -427,6 +424,18 @@ parse_file (const gchar *filename, GPtrArray **failures, GError **error)
427424 return modulemd_module_stream_validate (MODULEMD_MODULE_STREAM (object ),
428425 error );
429426 }
427+ case MMD_TYPE_MODULEMD_DEFAULTS_V1 :
428+ return parse_file_as_subdoc_and_validate (filename ,
429+ options .type ,
430+ MODULEMD_YAML_DOC_DEFAULTS ,
431+ 1u ,
432+ error );
433+ case MMD_TYPE_MODULEMD_OBSOLETES_V1 :
434+ return parse_file_as_subdoc_and_validate (filename ,
435+ options .type ,
436+ MODULEMD_YAML_DOC_OBSOLETES ,
437+ 1u ,
438+ error );
430439 case MMD_TYPE_MODULEMD_PACKAGER_V2 :
431440 return parse_file_as_subdoc_and_validate (filename ,
432441 options .type ,
0 commit comments