Skip to content

Commit b372358

Browse files
committed
modulemd_validator: Unify validation code paths
1 parent d43990c commit b372358

File tree

1 file changed

+56
-47
lines changed

1 file changed

+56
-47
lines changed

modulemd/modulemd-validator.c

Lines changed: 56 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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

374383
static 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

Comments
 (0)