summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2017-03-02 12:23:03 +0000
committerRichard Hughes <richard@hughsie.com>2017-03-02 12:44:24 +0000
commit5365f453856b555ad8dca0722bf19dd5fde4b360 (patch)
tree8c8a7f52a65c7159889227cbc30a843b68bef0e1
parentb3569e4e863083ebbe60f9180a824a5f40995919 (diff)
downloadflatpak-wip/hughsie/build-export-timestamp.tar.gz
Allow specifying an ISO-8601 timestamp when using build-exportwip/hughsie/build-export-timestamp
This allows us to build reproducable repo summaries, for instance in self tests.
-rw-r--r--app/flatpak-builtins-build-commit-from.c2
-rw-r--r--app/flatpak-builtins-build-export.c38
-rw-r--r--app/flatpak-builtins-build-import-bundle.c2
-rw-r--r--app/flatpak-builtins-repo-update.c2
-rw-r--r--common/flatpak-utils.c21
-rw-r--r--common/flatpak-utils.h1
6 files changed, 54 insertions, 12 deletions
diff --git a/app/flatpak-builtins-build-commit-from.c b/app/flatpak-builtins-build-commit-from.c
index 81b57962..a79acdac 100644
--- a/app/flatpak-builtins-build-commit-from.c
+++ b/app/flatpak-builtins-build-commit-from.c
@@ -320,7 +320,7 @@ flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancella
return FALSE;
if (opt_update_appstream &&
- !flatpak_repo_generate_appstream (dst_repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error))
+ !flatpak_repo_generate_appstream (dst_repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, 0, cancellable, error))
return FALSE;
if (!opt_no_update_summary &&
diff --git a/app/flatpak-builtins-build-export.c b/app/flatpak-builtins-build-export.c
index 3a039365..7f85cd3e 100644
--- a/app/flatpak-builtins-build-export.c
+++ b/app/flatpak-builtins-build-export.c
@@ -44,6 +44,7 @@ static char **opt_include;
static char *opt_gpg_homedir;
static char *opt_files;
static char *opt_metadata;
+static char *opt_timestamp = NULL;
static GOptionEntry options[] = {
{ "subject", 's', 0, G_OPTION_ARG_STRING, &opt_subject, N_("One line subject"), N_("SUBJECT") },
@@ -58,6 +59,7 @@ static GOptionEntry options[] = {
{ "exclude", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_exclude, N_("Files to exclude"), N_("PATTERN") },
{ "include", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_include, N_("Excluded files to include"), N_("PATTERN") },
{ "gpg-homedir", 0, 0, G_OPTION_ARG_STRING, &opt_gpg_homedir, N_("GPG Homedir to use when looking for keyrings"), N_("HOMEDIR") },
+ { "timestamp", 0, 0, G_OPTION_ARG_STRING, &opt_timestamp, "Override the timestamp of the commit", "ISO-8601-TIMESTAMP" },
{ NULL }
};
@@ -633,6 +635,7 @@ flatpak_builtin_build_export (int argc, char **argv, GCancellable *cancellable,
g_autoptr(GVariant) metadata_dict_v = NULL;
gboolean is_runtime = FALSE;
gboolean is_extension = FALSE;
+ GTimeVal ts;
context = g_option_context_new (_("LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory"));
g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
@@ -812,10 +815,34 @@ flatpak_builtin_build_export (int argc, char **argv, GCancellable *cancellable,
goto out;
metadata_dict_v = g_variant_ref_sink (g_variant_dict_end (&metadata_dict));
- if (!ostree_repo_write_commit (repo, parent, subject, body, metadata_dict_v,
- OSTREE_REPO_FILE (root),
- &commit_checksum, cancellable, error))
- goto out;
+
+ /* required for the metadata and the AppStream commits */
+ if (opt_timestamp != NULL)
+ {
+ if (!g_time_val_from_iso8601 (opt_timestamp, &ts))
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Could not parse '%s'", opt_timestamp);
+ goto out;
+ }
+ }
+
+ if (opt_timestamp == NULL)
+ {
+ if (!ostree_repo_write_commit (repo, parent, subject, body, metadata_dict_v,
+ OSTREE_REPO_FILE (root),
+ &commit_checksum, cancellable, error))
+ goto out;
+ }
+ else
+ {
+ if (!ostree_repo_write_commit_with_time (repo, parent, subject, body,
+ metadata_dict_v,
+ OSTREE_REPO_FILE (root),
+ ts.tv_sec, &commit_checksum,
+ cancellable, error))
+ goto out;
+ }
if (opt_gpg_key_ids)
{
@@ -841,7 +868,8 @@ flatpak_builtin_build_export (int argc, char **argv, GCancellable *cancellable,
goto out;
if (opt_update_appstream &&
- !flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error))
+ !flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir,
+ ts.tv_sec, cancellable, error))
return FALSE;
if (!opt_no_update_summary &&
diff --git a/app/flatpak-builtins-build-import-bundle.c b/app/flatpak-builtins-build-import-bundle.c
index 0e50e3f0..cdb80b44 100644
--- a/app/flatpak-builtins-build-import-bundle.c
+++ b/app/flatpak-builtins-build-import-bundle.c
@@ -198,7 +198,7 @@ flatpak_builtin_build_import (int argc, char **argv, GCancellable *cancellable,
}
if (opt_update_appstream &&
- !flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error))
+ !flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, 0, cancellable, error))
return FALSE;
if (!opt_no_update_summary &&
diff --git a/app/flatpak-builtins-repo-update.c b/app/flatpak-builtins-repo-update.c
index 6525d6b1..09eadb8b 100644
--- a/app/flatpak-builtins-repo-update.c
+++ b/app/flatpak-builtins-repo-update.c
@@ -384,7 +384,7 @@ flatpak_builtin_build_update_repo (int argc, char **argv,
return FALSE;
g_print (_("Updating appstream branch\n"));
- if (!flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error))
+ if (!flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, 0, cancellable, error))
return FALSE;
if (opt_generate_deltas &&
diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c
index 8f6aaea3..a0542bbf 100644
--- a/common/flatpak-utils.c
+++ b/common/flatpak-utils.c
@@ -3481,6 +3481,7 @@ gboolean
flatpak_repo_generate_appstream (OstreeRepo *repo,
const char **gpg_key_ids,
const char *gpg_homedir,
+ guint64 timestamp,
GCancellable *cancellable,
GError **error)
{
@@ -3616,10 +3617,22 @@ flatpak_repo_generate_appstream (OstreeRepo *repo,
if (!skip_commit)
{
- if (!ostree_repo_write_commit (repo, parent, "Update", NULL, NULL,
- OSTREE_REPO_FILE (root),
- &commit_checksum, cancellable, error))
- goto out;
+ if (timestamp > 0)
+ {
+ if (!ostree_repo_write_commit_with_time (repo, parent, "Update", NULL, NULL,
+ OSTREE_REPO_FILE (root),
+ timestamp,
+ &commit_checksum,
+ cancellable, error))
+ goto out;
+ }
+ else
+ {
+ if (!ostree_repo_write_commit (repo, parent, "Update", NULL, NULL,
+ OSTREE_REPO_FILE (root),
+ &commit_checksum, cancellable, error))
+ goto out;
+ }
if (gpg_key_ids)
{
diff --git a/common/flatpak-utils.h b/common/flatpak-utils.h
index 2568641c..d8e313a4 100644
--- a/common/flatpak-utils.h
+++ b/common/flatpak-utils.h
@@ -556,6 +556,7 @@ GBytes *flatpak_appstream_xml_root_to_data (FlatpakXml *appstream_root,
gboolean flatpak_repo_generate_appstream (OstreeRepo *repo,
const char **gpg_key_ids,
const char *gpg_homedir,
+ guint64 timestamp,
GCancellable *cancellable,
GError **error);