2323#include "private/modulemd-defaults-v1-private.h"
2424#include "private/modulemd-subdocument-info-private.h"
2525#include "private/modulemd-module-index-private.h"
26+ #include "private/modulemd-module-stream-private.h"
2627#include "private/modulemd-module-stream-v1-private.h"
2728#include "private/modulemd-module-stream-v2-private.h"
2829#include "private/modulemd-translation-private.h"
@@ -121,11 +122,13 @@ static gboolean
121122add_subdoc (ModulemdModuleIndex * self ,
122123 ModulemdSubdocumentInfo * subdoc ,
123124 gboolean strict ,
125+ gboolean autogen_module_name ,
124126 GError * * error )
125127{
126128 g_autoptr (ModulemdModuleStream ) stream = NULL ;
127129 g_autoptr (ModulemdTranslation ) translation = NULL ;
128130 g_autoptr (ModulemdDefaults ) defaults = NULL ;
131+ g_autofree gchar * name = NULL ;
129132
130133 switch (modulemd_subdocument_info_get_doctype (subdoc ))
131134 {
@@ -135,20 +138,12 @@ add_subdoc (ModulemdModuleIndex *self,
135138 case MD_MODULESTREAM_VERSION_ONE :
136139 stream = MODULEMD_MODULE_STREAM (
137140 modulemd_module_stream_v1_parse_yaml (subdoc , strict , error ));
138- if (stream == NULL )
139- return FALSE;
140- if (!modulemd_module_index_add_module_stream (self , stream , error ))
141- return FALSE;
142141 break ;
143142
144143 case MD_MODULESTREAM_VERSION_TWO :
145144 stream =
146145 (ModulemdModuleStream * )modulemd_module_stream_v2_parse_yaml (
147146 subdoc , strict , error );
148- if (stream == NULL )
149- return FALSE;
150- if (!modulemd_module_index_add_module_stream (self , stream , error ))
151- return FALSE;
152147 break ;
153148
154149 default :
@@ -158,6 +153,32 @@ add_subdoc (ModulemdModuleIndex *self,
158153 "Invalid mdversion for a stream object" );
159154 return FALSE;
160155 }
156+
157+ if (stream == NULL )
158+ return FALSE;
159+
160+ if (autogen_module_name &&
161+ !modulemd_module_stream_get_module_name (stream ))
162+ {
163+ name = g_strdup_printf ("__unnamed_module_%d" ,
164+ g_hash_table_size (self -> modules ) + 1 );
165+ modulemd_module_stream_set_module_name (stream , name );
166+ g_clear_pointer (& name , g_free );
167+ }
168+
169+ if (autogen_module_name &&
170+ !modulemd_module_stream_get_stream_name (stream ))
171+ {
172+ name = g_strdup_printf ("__unnamed_stream_%d" ,
173+ g_hash_table_size (self -> modules ) + 1 );
174+ modulemd_module_stream_set_stream_name (stream , name );
175+ g_clear_pointer (& name , g_free );
176+ }
177+
178+
179+ if (!modulemd_module_index_add_module_stream (self , stream , error ))
180+ return FALSE;
181+
161182 break ;
162183
163184 case MODULEMD_YAML_DOC_DEFAULTS :
@@ -201,10 +222,11 @@ add_subdoc (ModulemdModuleIndex *self,
201222}
202223
203224
204- static gboolean
225+ gboolean
205226modulemd_module_index_update_from_parser (ModulemdModuleIndex * self ,
206227 yaml_parser_t * parser ,
207228 gboolean strict ,
229+ gboolean autogen_module_name ,
208230 GPtrArray * * failures ,
209231 GError * * error )
210232{
@@ -213,6 +235,9 @@ modulemd_module_index_update_from_parser (ModulemdModuleIndex *self,
213235 g_autoptr (ModulemdSubdocumentInfo ) subdoc = NULL ;
214236 MMD_INIT_YAML_EVENT (event );
215237
238+ if (* failures == NULL )
239+ * failures = g_ptr_array_new_with_free_func (g_object_unref );
240+
216241 YAML_PARSER_PARSE_WITH_EXIT_BOOL (parser , & event , error );
217242 if (event .type != YAML_STREAM_START_EVENT )
218243 MMD_YAML_ERROR_EVENT_EXIT_BOOL (
@@ -236,16 +261,17 @@ modulemd_module_index_update_from_parser (ModulemdModuleIndex *self,
236261 else
237262 {
238263 /* Initial parsing worked, parse further */
239- if (!add_subdoc (self , subdoc , strict , error ))
264+ if (!add_subdoc (
265+ self , subdoc , strict , autogen_module_name , error ))
240266 {
241267 modulemd_subdocument_info_set_gerror (subdoc , * error );
242268 g_clear_pointer (error , g_error_free );
243269 /* Add to failures and ignore */
244270 g_ptr_array_add (* failures , g_steal_pointer (& subdoc ));
245271 all_passed = FALSE;
246272 }
247- g_clear_pointer (& subdoc , g_object_unref );
248273 }
274+ g_clear_pointer (& subdoc , g_object_unref );
249275 break ;
250276
251277 case YAML_STREAM_END_EVENT : done = TRUE; break ;
@@ -479,7 +505,7 @@ modulemd_module_index_update_from_string (ModulemdModuleIndex *self,
479505 & parser , (const unsigned char * )yaml_string , strlen (yaml_string ));
480506
481507 return modulemd_module_index_update_from_parser (
482- self , & parser , strict , failures , error );
508+ self , & parser , strict , FALSE, failures , error );
483509}
484510
485511
@@ -507,7 +533,7 @@ modulemd_module_index_update_from_stream (ModulemdModuleIndex *self,
507533 yaml_parser_set_input_file (& parser , yaml_stream );
508534
509535 return modulemd_module_index_update_from_parser (
510- self , & parser , strict , failures , error );
536+ self , & parser , strict , FALSE, failures , error );
511537}
512538
513539
0 commit comments