forked from Mirrors/flatpak-builder
Builder: Add a resolved version of the manifest to the built app
parent
dfc11d5e87
commit
b716e0d8eb
|
@ -690,6 +690,8 @@ builder_manifest_build (BuilderManifest *self,
|
|||
return FALSE;
|
||||
|
||||
builder_module_set_changes (m, changes);
|
||||
|
||||
builder_module_update (m, context, error);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
@ -1095,10 +1097,14 @@ builder_manifest_finish (BuilderManifest *self,
|
|||
GError **error)
|
||||
{
|
||||
GFile *app_dir = builder_context_get_app_dir (context);
|
||||
g_autoptr(GFile) manifest_file = NULL;
|
||||
g_autofree char *app_dir_path = g_file_get_path (app_dir);
|
||||
g_autofree char *json = NULL;
|
||||
g_autoptr(GPtrArray) args = NULL;
|
||||
g_autoptr(GSubprocess) subp = NULL;
|
||||
int i;
|
||||
JsonNode *node;
|
||||
JsonGenerator *generator;
|
||||
|
||||
builder_manifest_checksum_for_finish (self, cache, context);
|
||||
if (!builder_cache_lookup (cache))
|
||||
|
@ -1129,6 +1135,19 @@ builder_manifest_finish (BuilderManifest *self,
|
|||
!g_subprocess_wait_check (subp, NULL, error))
|
||||
return FALSE;
|
||||
|
||||
node = json_gobject_serialize (G_OBJECT (self));
|
||||
generator = json_generator_new ();
|
||||
json_generator_set_pretty (generator, TRUE);
|
||||
json_generator_set_root (generator, node);
|
||||
json = json_generator_to_data (generator, NULL);
|
||||
g_object_unref (generator);
|
||||
json_node_free (node);
|
||||
manifest_file = g_file_resolve_relative_path (app_dir, "files/manifest.json");
|
||||
|
||||
if (!g_file_replace_contents (manifest_file, json, strlen (json), NULL, FALSE,
|
||||
0, NULL, NULL, error))
|
||||
return FALSE;
|
||||
|
||||
if (!builder_cache_commit (cache, "Finish", error))
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -827,6 +827,24 @@ builder_module_build (BuilderModule *self,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
builder_module_update (BuilderModule *self,
|
||||
BuilderContext *context,
|
||||
GError **error)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
for (l = self->sources; l != NULL; l = l->next)
|
||||
{
|
||||
BuilderSource *source = l->data;
|
||||
|
||||
if (!builder_source_update (source, context, error))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
builder_module_checksum (BuilderModule *self,
|
||||
BuilderCache *cache,
|
||||
|
|
|
@ -55,6 +55,9 @@ gboolean builder_module_extract_sources (BuilderModule *self,
|
|||
gboolean builder_module_build (BuilderModule *self,
|
||||
BuilderContext *context,
|
||||
GError **error);
|
||||
gboolean builder_module_update (BuilderModule *self,
|
||||
BuilderContext *context,
|
||||
GError **error);
|
||||
|
||||
void builder_module_checksum (BuilderModule *self,
|
||||
BuilderCache *cache,
|
||||
|
|
|
@ -252,6 +252,24 @@ builder_source_bzr_checksum (BuilderSource *source,
|
|||
g_warning ("Failed to get current bzr checksum: %s", error->message);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
builder_source_bzr_update (BuilderSource *source,
|
||||
BuilderContext *context,
|
||||
GError **error)
|
||||
{
|
||||
BuilderSourceBzr *self = BUILDER_SOURCE_BZR (source);
|
||||
char *current_commit;
|
||||
|
||||
current_commit = get_current_commit (self, context, NULL);
|
||||
if (current_commit)
|
||||
{
|
||||
g_free (self->revision);
|
||||
self->revision = current_commit;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
builder_source_bzr_class_init (BuilderSourceBzrClass *klass)
|
||||
{
|
||||
|
@ -264,6 +282,7 @@ builder_source_bzr_class_init (BuilderSourceBzrClass *klass)
|
|||
|
||||
source_class->download = builder_source_bzr_download;
|
||||
source_class->extract = builder_source_bzr_extract;
|
||||
source_class->update = builder_source_bzr_update;
|
||||
source_class->checksum = builder_source_bzr_checksum;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
|
|
|
@ -381,6 +381,25 @@ builder_source_file_extract (BuilderSource *source,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (is_local)
|
||||
{
|
||||
g_autofree char *data = NULL;
|
||||
g_autofree char *base64 = NULL;
|
||||
gsize len;
|
||||
|
||||
if (!g_file_load_contents (src, NULL, &data, &len, NULL, error))
|
||||
return FALSE;
|
||||
|
||||
base64 = g_base64_encode ((const guchar *)data, len);
|
||||
g_free (self->url);
|
||||
self->url = g_strdup_printf ("data:text/plain;charset=utf8;base64,%s", base64);
|
||||
if (self->dest_filename == NULL || *self->dest_filename == 0)
|
||||
{
|
||||
g_free (self->dest_filename);
|
||||
self->dest_filename = g_file_get_basename (src);
|
||||
}
|
||||
}
|
||||
|
||||
if (!g_file_copy (src, dest_file,
|
||||
G_FILE_COPY_OVERWRITE,
|
||||
NULL,
|
||||
|
@ -392,6 +411,43 @@ builder_source_file_extract (BuilderSource *source,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
builder_source_file_update (BuilderSource *source,
|
||||
BuilderContext *context,
|
||||
GError **error)
|
||||
{
|
||||
BuilderSourceFile *self = BUILDER_SOURCE_FILE (source);
|
||||
g_autoptr(GFile) src = NULL;
|
||||
g_autoptr(GFile) dest_file = NULL;
|
||||
g_autofree char *dest_filename = NULL;
|
||||
gboolean is_local, is_inline;
|
||||
|
||||
src = get_source_file (self, context, &is_local, &is_inline, error);
|
||||
if (src == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (is_local)
|
||||
{
|
||||
g_autofree char *data = NULL;
|
||||
g_autofree char *base64 = NULL;
|
||||
gsize len;
|
||||
|
||||
if (!g_file_load_contents (src, NULL, &data, &len, NULL, error))
|
||||
return FALSE;
|
||||
|
||||
base64 = g_base64_encode ((const guchar *)data, len);
|
||||
g_free (self->url);
|
||||
self->url = g_strdup_printf ("data:text/plain;charset=utf8;base64,%s", base64);
|
||||
if (self->dest_filename == NULL || *self->dest_filename == 0)
|
||||
{
|
||||
g_free (self->dest_filename);
|
||||
self->dest_filename = g_file_get_basename (src);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
builder_source_file_checksum (BuilderSource *source,
|
||||
BuilderCache *cache,
|
||||
|
@ -429,6 +485,7 @@ builder_source_file_class_init (BuilderSourceFileClass *klass)
|
|||
|
||||
source_class->download = builder_source_file_download;
|
||||
source_class->extract = builder_source_file_extract;
|
||||
source_class->update = builder_source_file_update;
|
||||
source_class->checksum = builder_source_file_checksum;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
|
|
|
@ -518,6 +518,33 @@ builder_source_git_checksum (BuilderSource *source,
|
|||
g_warning ("No url");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
builder_source_git_update (BuilderSource *source,
|
||||
BuilderContext *context,
|
||||
GError **error)
|
||||
{
|
||||
BuilderSourceGit *self = BUILDER_SOURCE_GIT (source);
|
||||
g_autoptr(GFile) mirror_dir = NULL;
|
||||
char *current_commit;
|
||||
g_autofree char *url = NULL;
|
||||
|
||||
url = get_url (self, context, error);
|
||||
if (url == NULL)
|
||||
return FALSE;
|
||||
|
||||
mirror_dir = git_get_mirror_dir (url, context);
|
||||
|
||||
current_commit = git_get_current_commit (mirror_dir, get_branch (self), context, NULL);
|
||||
g_print ("current commit %s\n", current_commit);
|
||||
if (current_commit)
|
||||
{
|
||||
g_free (self->branch);
|
||||
self->branch = current_commit;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
builder_source_git_class_init (BuilderSourceGitClass *klass)
|
||||
{
|
||||
|
@ -530,6 +557,7 @@ builder_source_git_class_init (BuilderSourceGitClass *klass)
|
|||
|
||||
source_class->download = builder_source_git_download;
|
||||
source_class->extract = builder_source_git_extract;
|
||||
source_class->update = builder_source_git_update;
|
||||
source_class->checksum = builder_source_git_checksum;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
|
|
|
@ -118,6 +118,14 @@ builder_source_real_extract (BuilderSource *self,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
builder_source_real_update (BuilderSource *self,
|
||||
BuilderContext *context,
|
||||
GError **error)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
builder_source_class_init (BuilderSourceClass *klass)
|
||||
{
|
||||
|
@ -129,6 +137,7 @@ builder_source_class_init (BuilderSourceClass *klass)
|
|||
|
||||
klass->download = builder_source_real_download;
|
||||
klass->extract = builder_source_real_extract;
|
||||
klass->update = builder_source_real_update;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_DEST,
|
||||
|
@ -246,6 +255,16 @@ builder_source_extract (BuilderSource *self,
|
|||
return class->extract (self, real_dest, context, error);
|
||||
}
|
||||
|
||||
gboolean
|
||||
builder_source_update (BuilderSource *self,
|
||||
BuilderContext *context,
|
||||
GError **error)
|
||||
{
|
||||
BuilderSourceClass *class = BUILDER_SOURCE_GET_CLASS (self);
|
||||
|
||||
return class->update (self, context, error);
|
||||
}
|
||||
|
||||
void
|
||||
builder_source_checksum (BuilderSource *self,
|
||||
BuilderCache *cache,
|
||||
|
|
|
@ -53,6 +53,9 @@ typedef struct {
|
|||
GFile *dest,
|
||||
BuilderContext *context,
|
||||
GError **error);
|
||||
gboolean (* update) (BuilderSource *self,
|
||||
BuilderContext *context,
|
||||
GError **error);
|
||||
void (* checksum) (BuilderSource *self,
|
||||
BuilderCache *cache,
|
||||
BuilderContext *context);
|
||||
|
@ -70,6 +73,9 @@ gboolean builder_source_extract (BuilderSource *self,
|
|||
GFile *dest,
|
||||
BuilderContext *context,
|
||||
GError **error);
|
||||
gboolean builder_source_update (BuilderSource *self,
|
||||
BuilderContext *context,
|
||||
GError **error);
|
||||
|
||||
void builder_source_checksum (BuilderSource *self,
|
||||
BuilderCache *cache,
|
||||
|
|
Loading…
Reference in New Issue