manifest: Prepare expand_modules to report errors

Move the expand_modules call from the modules setter to
builder_manifest_start, where we have a chance to report
errors.
tingping/wmclass
Matthias Clasen 2016-06-09 00:29:02 -04:00
parent e25e379a2a
commit 5225e7b1d0
1 changed files with 12 additions and 10 deletions

View File

@ -150,26 +150,27 @@ builder_manifest_finalize (GObject *object)
G_OBJECT_CLASS (builder_manifest_parent_class)->finalize (object);
}
static GList *
expand_modules (GList *modules)
static gboolean
expand_modules (GList *modules, GList **expanded, GError **error)
{
GList *l;
GList *expanded = NULL;
for (l = modules; l; l = l->next)
{
BuilderModule *m = l->data;
GList *submodules;
GList *submodules = NULL;
if (builder_module_get_disabled (m))
continue;
submodules = expand_modules (builder_module_get_modules (m));
expanded = g_list_concat (expanded, submodules);
expanded = g_list_append (expanded, m);
if (!expand_modules (builder_module_get_modules (m), &submodules, error))
return FALSE;
*expanded = g_list_concat (*expanded, submodules);
*expanded = g_list_append (*expanded, m);
}
return expanded;
return TRUE;
}
static void
@ -381,8 +382,6 @@ builder_manifest_set_property (GObject *object,
g_list_free_full (self->modules, g_object_unref);
/* NOTE: This takes ownership of the list! */
self->modules = g_value_get_pointer (value);
g_list_free (self->expanded_modules);
self->expanded_modules = expand_modules (self->modules);
break;
case PROP_CLEANUP:
@ -893,6 +892,9 @@ builder_manifest_start (BuilderManifest *self,
self->runtime,
builder_manifest_get_runtime_version (self));
if (!expand_modules (self->modules, &self->expanded_modules, error))
return FALSE;
return TRUE;
}