diff options
| author | Alexander Larsson <alexl@redhat.com> | 2020-03-24 20:12:50 +0100 |
|---|---|---|
| committer | Alexander Larsson <alexl@redhat.com> | 2020-03-24 20:12:50 +0100 |
| commit | 56158a008766e9580b16590b96a3766b1009901e (patch) | |
| tree | e8078f165effae4d04d59b106646368620492700 | |
| parent | 83795c210ca06a5448d36177c2fd93271e7931dc (diff) | |
| download | flatpak-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.h | 4 | ||||
| -rw-r--r-- | common/flatpak-dir.c | 21 |
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], |
