summaryrefslogtreecommitdiff
path: root/builder
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2016-02-03 10:57:50 +0100
committerAlexander Larsson <alexl@redhat.com>2016-02-03 10:57:50 +0100
commit43ac6421f9ac8bed2935d6cf6e676938f891619c (patch)
tree10ef0db2315bd2235e2b7cc77faa0e295542b0a4 /builder
parent1d5fb6438b3953e05522c1a2db1c994d315a90e4 (diff)
downloadxdg-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.c66
-rw-r--r--builder/builder-manifest.h3
-rw-r--r--builder/xdg-app-builder-main.c6
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))
{