builder: Only create one locale extension

Given that each app can have 100 locates, ostree just doesn't scale
to having a branch per app/locale combo. For 100 apps and 100 locales
that would be 10000 branches.

Also, things like xdg-app remote-list doesn't properly handle that
either.

We need to handle this by e.g. supporting subsetting the pull of
the locale extension.
tingping/wmclass
Alexander Larsson 2016-04-07 13:00:01 +02:00
parent 4beaa990c2
commit 545a699698
2 changed files with 24 additions and 114 deletions

View File

@ -1634,10 +1634,9 @@ builder_manifest_finish (BuilderManifest *self,
{
g_autoptr(GFile) metadata_file = NULL;
g_autofree char *extension_contents = NULL;
g_autoptr(GFileEnumerator) dir_enum = NULL;
g_autoptr(GFileOutputStream) output = NULL;
gboolean found_locale = FALSE;
GFileInfo *next;
g_autoptr(GFile) metadata_locale_file = NULL;
g_autofree char *metadata_contents = NULL;
metadata_file = g_file_get_child (app_dir, "metadata");
@ -1656,51 +1655,16 @@ builder_manifest_finish (BuilderManifest *self,
NULL, NULL, error))
return FALSE;
dir_enum = g_file_enumerate_children (locale_parent_dir, "standard::name,standard::type",
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
NULL, NULL);
while (dir_enum != NULL &&
(next = g_file_enumerator_next_file (dir_enum, NULL, NULL)))
{
g_autoptr(GFileInfo) child_info = next;
const char *name = g_file_info_get_name (child_info);
if (g_file_info_get_file_type (child_info) == G_FILE_TYPE_DIRECTORY)
{
g_autoptr(GFile) metadata_locale_file = NULL;
g_autofree char *metadata_contents = NULL;
g_autofree char *filename = g_strdup_printf ("metadata.locale.%s", name);
metadata_locale_file = g_file_get_child (app_dir, filename);
metadata_contents = g_strdup_printf("[Runtime]\n"
"name=%s.Locale.%s\n", self->id, name);
if (!g_file_replace_contents (metadata_locale_file,
metadata_contents, strlen (metadata_contents),
NULL, FALSE,
G_FILE_CREATE_REPLACE_DESTINATION,
NULL, NULL, error))
return FALSE;
found_locale = TRUE;
}
}
if (found_locale)
{
g_autoptr(GFile) metadata_locale_file = NULL;
g_autofree char *metadata_contents = NULL;
metadata_locale_file = g_file_get_child (app_dir, "metadata.locale");
metadata_contents = g_strdup_printf("[Runtime]\n"
"name=%s.Locale\n", self->id);
if (!g_file_replace_contents (metadata_locale_file,
metadata_contents, strlen (metadata_contents),
NULL, FALSE,
G_FILE_CREATE_REPLACE_DESTINATION,
NULL, NULL, error))
return FALSE;
}
metadata_locale_file = g_file_get_child (app_dir, "metadata.locale");
metadata_contents = g_strdup_printf("[Runtime]\n"
"name=%s.Locale\n", self->id);
if (!g_file_replace_contents (metadata_locale_file,
metadata_contents, strlen (metadata_contents),
NULL, FALSE,
G_FILE_CREATE_REPLACE_DESTINATION,
NULL, NULL, error))
return FALSE;
}
@ -1920,11 +1884,10 @@ builder_manifest_create_platform (BuilderManifest *self,
{
g_autoptr(GFile) metadata_file = NULL;
g_autofree char *extension_contents = NULL;
g_autoptr(GFileEnumerator) dir_enum = NULL;
g_autoptr(GFileOutputStream) output = NULL;
g_autoptr(GFile) locale_parent_dir = NULL;
GFileInfo *next;
gboolean found_locale = FALSE;
g_autoptr(GFile) metadata_locale_file = NULL;
g_autofree char *metadata_contents = NULL;
metadata_file = g_file_get_child (app_dir, "metadata.platform");
@ -1943,54 +1906,16 @@ builder_manifest_create_platform (BuilderManifest *self,
NULL, NULL, error))
return FALSE;
locale_parent_dir = g_file_resolve_relative_path (platform_dir, "share/runtime/locale");
dir_enum = g_file_enumerate_children (locale_parent_dir, "standard::name,standard::type",
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
NULL, NULL);
while (dir_enum != NULL &&
(next = g_file_enumerator_next_file (dir_enum, NULL, NULL)))
{
g_autoptr(GFileInfo) child_info = next;
const char *name = g_file_info_get_name (child_info);
if (g_file_info_get_file_type (child_info) == G_FILE_TYPE_DIRECTORY)
{
g_autoptr(GFile) metadata_locale_file = NULL;
g_autofree char *metadata_contents = NULL;
g_autofree char *filename = g_strdup_printf ("metadata.platform.locale.%s", name);
metadata_locale_file = g_file_get_child (app_dir, filename);
metadata_contents = g_strdup_printf("[Runtime]\n"
"name=%s.Locale.%s\n", self->id_platform, name);
if (!g_file_replace_contents (metadata_locale_file,
metadata_contents, strlen (metadata_contents),
NULL, FALSE,
G_FILE_CREATE_REPLACE_DESTINATION,
NULL, NULL, error))
return FALSE;
found_locale = TRUE;
}
}
if (found_locale)
{
g_autoptr(GFile) metadata_locale_file = NULL;
g_autofree char *metadata_contents = NULL;
metadata_locale_file = g_file_get_child (app_dir, "metadata.platform.locale");
metadata_contents = g_strdup_printf("[Runtime]\n"
"name=%s.Locale\n", self->id_platform);
if (!g_file_replace_contents (metadata_locale_file,
metadata_contents, strlen (metadata_contents),
NULL, FALSE,
G_FILE_CREATE_REPLACE_DESTINATION,
NULL, NULL, error))
return FALSE;
}
metadata_locale_file = g_file_get_child (app_dir, "metadata.platform.locale");
metadata_contents = g_strdup_printf("[Runtime]\n"
"name=%s.Locale\n", self->id_platform);
if (!g_file_replace_contents (metadata_locale_file,
metadata_contents, strlen (metadata_contents),
NULL, FALSE,
G_FILE_CREATE_REPLACE_DESTINATION,
NULL, NULL, error))
return FALSE;
}
if (!builder_cache_commit (cache, "Created platform", error))

View File

@ -369,27 +369,19 @@ main (int argc,
{
g_autoptr(GFileInfo) child_info = next;
const char *name = g_file_info_get_name (child_info);
const char *language = NULL;
g_autofree char *metadata_arg = NULL;
g_autofree char *files_arg = NULL;
if (strcmp (name, "metadata.locale") == 0)
{
g_print ("exporting %s.Locale to repo\n", builder_manifest_get_id (manifest));
language = NULL;
}
else if (g_str_has_prefix (name, "metadata.locale."))
{
language = name + strlen ("metadata.locale.");
g_print ("exporting %s.Locale.%s to repo\n", builder_manifest_get_id (manifest), language);
}
else
continue;
metadata_arg = g_strdup_printf ("--metadata=%s", name);
files_arg = g_strconcat (builder_context_get_build_runtime (build_context) ? "--files=usr" : "--files=files",
"/share/runtime/locale/", language, NULL);
"/share/runtime/locale/", NULL);
if (!do_export (&error, TRUE,
metadata_arg,
files_arg,
@ -443,25 +435,18 @@ main (int argc,
{
g_autoptr(GFileInfo) child_info = next;
const char *name = g_file_info_get_name (child_info);
const char *language;
g_autofree char *metadata_arg = NULL;
g_autofree char *files_arg = NULL;
if (strcmp (name, "metadata.platform.locale") == 0)
{
g_print ("exporting %s.Locale to repo\n", platform_id);
language = NULL;
}
else if (g_str_has_prefix (name, "metadata.platform.locale."))
{
language = name + strlen ("metadata.platform.locale.");
g_print ("exporting %s.Locale.%s to repo\n", platform_id, language);
}
else
continue;
metadata_arg = g_strdup_printf ("--metadata=%s", name);
files_arg = g_strconcat ("--files=platform/share/runtime/locale/", language, NULL);
files_arg = g_strconcat ("--files=platform/share/runtime/locale/", NULL);
if (!do_export (&error, TRUE,
metadata_arg,
files_arg,