diff options
author | Alexander Larsson <alexl@redhat.com> | 2016-02-03 10:57:50 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2016-02-03 10:57:50 +0100 |
commit | 43ac6421f9ac8bed2935d6cf6e676938f891619c (patch) | |
tree | 10ef0db2315bd2235e2b7cc77faa0e295542b0a4 /builder | |
parent | 1d5fb6438b3953e05522c1a2db1c994d315a90e4 (diff) | |
download | xdg-app-43ac6421f9ac8bed2935d6cf6e676938f891619c.tar.gz |
builder: Store exact sdk commit id in the build cache and manifest
This means we rebuild everything if the sdk changes, and you can also
see what version an app was built against.
Diffstat (limited to 'builder')
-rw-r--r-- | builder/builder-manifest.c | 66 | ||||
-rw-r--r-- | builder/builder-manifest.h | 3 | ||||
-rw-r--r-- | builder/xdg-app-builder-main.c | 6 |
3 files changed, 75 insertions, 0 deletions
diff --git a/builder/builder-manifest.c b/builder/builder-manifest.c index 3d4bfb1..404149a 100644 --- a/builder/builder-manifest.c +++ b/builder/builder-manifest.c @@ -41,8 +41,10 @@ struct BuilderManifest { char *id_platform; char *branch; char *runtime; + char *runtime_commit; char *runtime_version; char *sdk; + char *sdk_commit; char *metadata; char *metadata_platform; char **cleanup; @@ -83,6 +85,7 @@ enum { PROP_RUNTIME, PROP_RUNTIME_VERSION, PROP_SDK, + PROP_SDK_COMMIT, PROP_METADATA, PROP_METADATA_PLATFORM, PROP_BUILD_OPTIONS, @@ -114,8 +117,10 @@ builder_manifest_finalize (GObject *object) g_free (self->id); g_free (self->branch); g_free (self->runtime); + g_free (self->runtime_commit); g_free (self->runtime_version); g_free (self->sdk); + g_free (self->sdk_commit); g_free (self->metadata); g_free (self->metadata_platform); g_free (self->command); @@ -172,6 +177,10 @@ builder_manifest_get_property (GObject *object, g_value_set_string (value, self->sdk); break; + case PROP_SDK_COMMIT: + g_value_set_string (value, self->sdk_commit); + break; + case PROP_METADATA: g_value_set_string (value, self->metadata); break; @@ -303,6 +312,11 @@ builder_manifest_set_property (GObject *object, self->sdk = g_value_dup_string (value); break; + case PROP_SDK_COMMIT: + g_free (self->sdk_commit); + self->sdk_commit = g_value_dup_string (value); + break; + case PROP_METADATA: g_free (self->metadata); self->metadata = g_value_dup_string (value); @@ -469,6 +483,13 @@ builder_manifest_class_init (BuilderManifestClass *klass) NULL, G_PARAM_READWRITE)); g_object_class_install_property (object_class, + PROP_SDK_COMMIT, + g_param_spec_string ("sdk-commit", + "", + "", + NULL, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_METADATA, g_param_spec_string ("metadata", "", @@ -744,6 +765,49 @@ builder_manifest_get_runtime_version (BuilderManifest *self) return self->runtime_version ? self->runtime_version : "master"; } + +static char * +xdg_app (GError **error, + ...) +{ + gboolean res; + g_autofree char *output = NULL; + va_list ap; + + va_start (ap, error); + res = xdg_app_spawn (NULL, &output, error, "xdg-app", ap); + va_end (ap); + + if (res) + { + g_strchomp (output); + return g_steal_pointer (&output); + } + return NULL; +} + +gboolean +builder_manifest_start (BuilderManifest *self, + BuilderContext *context, + GError **error) +{ + self->sdk_commit = xdg_app (NULL, "info", "--show-commit", self->sdk, + builder_manifest_get_runtime_version (self), NULL); + if (self->sdk_commit == NULL) + return xdg_app_fail (error, "Unable to find sdk %s version %s", + self->sdk, + builder_manifest_get_runtime_version (self)); + + self->runtime_commit = xdg_app (NULL, "info", "--show-commit", self->runtime, + builder_manifest_get_runtime_version (self), NULL); + if (self->runtime_commit == NULL) + return xdg_app_fail (error, "Unable to find runtime %s version %s", + self->runtime, + builder_manifest_get_runtime_version (self)); + + return TRUE; +} + gboolean builder_manifest_init_app_dir (BuilderManifest *self, BuilderContext *context, @@ -822,6 +886,7 @@ builder_manifest_checksum (BuilderManifest *self, builder_cache_checksum_str (cache, self->runtime); builder_cache_checksum_str (cache, builder_manifest_get_runtime_version (self)); builder_cache_checksum_str (cache, self->sdk); + builder_cache_checksum_str (cache, self->sdk_commit); builder_cache_checksum_str (cache, self->metadata); builder_cache_checksum_boolean (cache, self->writable_sdk); builder_cache_checksum_strv (cache, self->sdk_extensions); @@ -888,6 +953,7 @@ builder_manifest_checksum_for_platform (BuilderManifest *self, { builder_cache_checksum_str (cache, BUILDER_MANIFEST_CHECKSUM_PLATFORM_VERSION); builder_cache_checksum_str (cache, self->id_platform); + builder_cache_checksum_str (cache, self->runtime_commit); builder_cache_checksum_str (cache, self->metadata); builder_cache_checksum_strv (cache, self->cleanup_platform); builder_cache_checksum_strv (cache, self->platform_extensions); diff --git a/builder/builder-manifest.h b/builder/builder-manifest.h index 007394b..d983c37 100644 --- a/builder/builder-manifest.h +++ b/builder/builder-manifest.h @@ -48,6 +48,9 @@ const char * builder_manifest_get_id_platform (BuilderManifest *self); BuilderOptions *builder_manifest_get_build_options (BuilderManifest *self); GList * builder_manifest_get_modules (BuilderManifest *self); +gboolean builder_manifest_start (BuilderManifest *self, + BuilderContext *context, + GError **error); gboolean builder_manifest_init_app_dir (BuilderManifest *self, BuilderContext *context, GError **error); diff --git a/builder/xdg-app-builder-main.c b/builder/xdg-app-builder-main.c index 1835239..801e21a 100644 --- a/builder/xdg-app-builder-main.c +++ b/builder/xdg-app-builder-main.c @@ -234,6 +234,12 @@ main (int argc, return 1; } + if (!builder_manifest_start (manifest, build_context, &error)) + { + g_print ("Failed to init: %s\n", error->message); + return 1; + } + if (!opt_disable_download && !builder_manifest_download (manifest, !opt_disable_updates, build_context, &error)) { |