summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2020-03-24 20:12:50 +0100
committerAlexander Larsson <alexl@redhat.com>2020-03-24 20:12:50 +0100
commit56158a008766e9580b16590b96a3766b1009901e (patch)
treee8078f165effae4d04d59b106646368620492700
parent83795c210ca06a5448d36177c2fd93271e7931dc (diff)
downloadflatpak-56158a008766e9580b16590b96a3766b1009901e.tar.gz
DeployData: Add commit timestamp to deploy data
We want to use this to do quick checks if we need to do an update.
-rw-r--r--common/flatpak-dir-private.h4
-rw-r--r--common/flatpak-dir.c21
2 files changed, 24 insertions, 1 deletions
diff --git a/common/flatpak-dir-private.h b/common/flatpak-dir-private.h
index a6563fc9..ba44849b 100644
--- a/common/flatpak-dir-private.h
+++ b/common/flatpak-dir-private.h
@@ -33,8 +33,9 @@
*
* Version 1 added appdata-name/summary/version/license
* Version 2 added extension-of/appdata-content-rating
+ * Version 3 added timestamp
*/
-#define FLATPAK_DEPLOY_VERSION_CURRENT 2
+#define FLATPAK_DEPLOY_VERSION_CURRENT 3
#define FLATPAK_DEPLOY_VERSION_ANY 0
#define FLATPAK_TYPE_DIR flatpak_dir_get_type ()
@@ -371,6 +372,7 @@ GHashTable * flatpak_deploy_data_get_appdata_content_rating (GBytes *depl
const char ** flatpak_deploy_data_get_subpaths (GBytes *deploy_data);
gboolean flatpak_deploy_data_has_subpaths (GBytes *deploy_data);
guint64 flatpak_deploy_data_get_installed_size (GBytes *deploy_data);
+guint64 flatpak_deploy_data_get_timestamp (GBytes *deploy_data);
const char * flatpak_deploy_data_get_alt_id (GBytes *deploy_data);
const char * flatpak_deploy_data_get_eol (GBytes *deploy_data);
const char * flatpak_deploy_data_get_eol_rebase (GBytes *deploy_data);
diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c
index 7b3d2de2..f91fa863 100644
--- a/common/flatpak-dir.c
+++ b/common/flatpak-dir.c
@@ -2528,6 +2528,16 @@ flatpak_deploy_data_get_version (GBytes *deploy_data)
return var_metadata_lookup_int32 (metadata, "deploy-version", 0);
}
+/* Note: This will return 0 if this is unset, which happens on deloy data updates, so ensure we handle that in all callers */
+guint64
+flatpak_deploy_data_get_timestamp (GBytes *deploy_data)
+{
+ VarDeployDataRef ref = var_deploy_data_from_bytes (deploy_data);
+ VarMetadataRef metadata = var_deploy_data_get_metadata (ref);
+
+ return var_metadata_lookup_uint64 (metadata, "timestamp", 0);
+}
+
static const char *
flatpak_deploy_data_get_string (GBytes *deploy_data, const char *key)
{
@@ -2822,6 +2832,7 @@ add_appdata_to_deploy_data (GVariantBuilder *metadata_builder,
static GBytes *
flatpak_dir_new_deploy_data (FlatpakDir *self,
GFile *deploy_dir,
+ GVariant *commit_data,
GVariant *commit_metadata,
GKeyFile *metadata,
const char *id,
@@ -2854,6 +2865,8 @@ flatpak_dir_new_deploy_data (FlatpakDir *self,
g_variant_builder_init (&metadata_builder, G_VARIANT_TYPE ("a{sv}"));
g_variant_builder_add (&metadata_builder, "{s@v}", "deploy-version",
g_variant_new_variant (g_variant_new_int32 (FLATPAK_DEPLOY_VERSION_CURRENT)));
+ g_variant_builder_add (&metadata_builder, "{s@v}", "timestamp",
+ g_variant_new_variant (g_variant_new_uint64 (ostree_commit_get_timestamp (commit_data))));
if (alt_id)
g_variant_builder_add (&metadata_builder, "{s@v}", "alt-id",
g_variant_new_variant (g_variant_new_string (alt_id)));
@@ -2920,6 +2933,13 @@ upgrade_deploy_data (GBytes *deploy_data, GFile *deploy_dir, const char *ref)
add_appdata_to_deploy_data (&metadata_builder, deploy_dir, ref_parts[1]);
}
+ if (old_version < 3)
+ {
+ /* We don't know what timestamp to use here, use 0 and special case that for update checks */
+ g_variant_builder_add (&metadata_builder, "{s@v}", "timestamp",
+ g_variant_new_variant (g_variant_new_uint64 (0)));
+ }
+
subpaths = flatpak_deploy_data_get_subpaths (deploy_data);
res = g_variant_ref_sink (g_variant_new ("(ss^ast@a{sv})",
flatpak_deploy_data_get_origin (deploy_data),
@@ -7809,6 +7829,7 @@ flatpak_dir_deploy (FlatpakDir *self,
deploy_data = flatpak_dir_new_deploy_data (self,
checkoutdir,
+ commit_data,
commit_metadata,
keyfile,
ref_parts[1],