diff options
author | Alexander Larsson <alexl@redhat.com> | 2020-10-21 14:02:20 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2020-10-26 13:50:15 +0100 |
commit | 5f42b5e116032e0c397b7b9c850d45a5711b0996 (patch) | |
tree | 29b511e7d1f4d195177b994a2f1cbcf2bcf93fe9 | |
parent | 2165ba306aea447a02bd82b50413638162a6bc1c (diff) | |
download | flatpak-5f42b5e116032e0c397b7b9c850d45a5711b0996.tar.gz |
Add option to disable generating summary index
This is mainly useful for the tests
-rw-r--r-- | app/flatpak-builtins-build-commit-from.c | 24 | ||||
-rw-r--r-- | app/flatpak-builtins-build-export.c | 24 | ||||
-rw-r--r-- | app/flatpak-builtins-build-import-bundle.c | 24 | ||||
-rw-r--r-- | app/flatpak-builtins-build-update-repo.c | 9 | ||||
-rw-r--r-- | common/flatpak-utils-private.h | 17 | ||||
-rw-r--r-- | common/flatpak-utils.c | 71 |
6 files changed, 118 insertions, 51 deletions
diff --git a/app/flatpak-builtins-build-commit-from.c b/app/flatpak-builtins-build-commit-from.c index f1911dff..90931753 100644 --- a/app/flatpak-builtins-build-commit-from.c +++ b/app/flatpak-builtins-build-commit-from.c @@ -51,6 +51,7 @@ static char **opt_subsets; static char *opt_timestamp; static char **opt_extra_collection_ids; static int opt_token_type = -1; +static gboolean opt_no_summary_index = FALSE; static GOptionEntry options[] = { { "src-repo", 0, 0, G_OPTION_ARG_STRING, &opt_src_repo, N_("Source repo dir"), N_("SRC-REPO") }, @@ -70,6 +71,7 @@ static GOptionEntry options[] = { { "token-type", 0, 0, G_OPTION_ARG_INT, &opt_token_type, N_("Set type of token needed to install this commit"), N_("VAL") }, { "timestamp", 0, 0, G_OPTION_ARG_STRING, &opt_timestamp, N_("Override the timestamp of the commit (NOW for current time)"), N_("TIMESTAMP") }, { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL }, + { "no-summary-index", 0, 0, G_OPTION_ARG_NONE, &opt_no_summary_index, N_("Don't generate a summary index"), NULL }, { NULL } }; @@ -732,13 +734,21 @@ flatpak_builtin_build_commit_from (int argc, char **argv, GCancellable *cancella !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 && - !flatpak_repo_update (dst_repo, - (const char **) opt_gpg_key_ids, - opt_gpg_homedir, - cancellable, - error)) - return FALSE; + if (!opt_no_update_summary) + { + FlatpakRepoUpdateFlags flags = FLATPAK_REPO_UPDATE_FLAG_NONE; + + if (opt_no_summary_index) + flags |= FLATPAK_REPO_UPDATE_FLAG_DISABLE_INDEX; + + g_debug ("Updating summary"); + if (!flatpak_repo_update (dst_repo, flags, + (const char **) opt_gpg_key_ids, + opt_gpg_homedir, + cancellable, + error)) + return FALSE; + } return TRUE; } diff --git a/app/flatpak-builtins-build-export.c b/app/flatpak-builtins-build-export.c index 43fd0563..e78034fb 100644 --- a/app/flatpak-builtins-build-export.c +++ b/app/flatpak-builtins-build-export.c @@ -52,6 +52,7 @@ static char *opt_endoflife; static char *opt_endoflife_rebase; static char *opt_collection_id = NULL; static int opt_token_type = -1; +static gboolean opt_no_summary_index = FALSE; static GOptionEntry options[] = { { "subject", 's', 0, G_OPTION_ARG_STRING, &opt_subject, N_("One line subject"), N_("SUBJECT") }, @@ -73,6 +74,7 @@ static GOptionEntry options[] = { { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id, N_("Collection ID"), "COLLECTION-ID" }, { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL }, { "disable-sandbox", 0, 0, G_OPTION_ARG_NONE, &opt_disable_sandbox, "Do not sandbox icon validator", NULL }, + { "no-summary-index", 0, 0, G_OPTION_ARG_NONE, &opt_no_summary_index, N_("Don't generate a summary index"), NULL }, { NULL } }; @@ -1099,13 +1101,21 @@ flatpak_builtin_build_export (int argc, char **argv, GCancellable *cancellable, (opt_timestamp != NULL) ? ts.tv_sec : 0, cancellable, error)) return FALSE; - if (!opt_no_update_summary && - !flatpak_repo_update (repo, - (const char **) opt_gpg_key_ids, - opt_gpg_homedir, - cancellable, - error)) - goto out; + if (!opt_no_update_summary) + { + FlatpakRepoUpdateFlags flags = FLATPAK_REPO_UPDATE_FLAG_NONE; + + if (opt_no_summary_index) + flags |= FLATPAK_REPO_UPDATE_FLAG_DISABLE_INDEX; + + g_debug ("Updating summary"); + if (!flatpak_repo_update (repo, flags, + (const char **) opt_gpg_key_ids, + opt_gpg_homedir, + cancellable, + error)) + goto out; + } format_size = g_format_size (stats.content_bytes_written); diff --git a/app/flatpak-builtins-build-import-bundle.c b/app/flatpak-builtins-build-import-bundle.c index 10e2f2d6..81464cae 100644 --- a/app/flatpak-builtins-build-import-bundle.c +++ b/app/flatpak-builtins-build-import-bundle.c @@ -39,6 +39,7 @@ static char **opt_gpg_key_ids; static char *opt_gpg_homedir; static gboolean opt_update_appstream; static gboolean opt_no_update_summary; +static gboolean opt_no_summary_index = FALSE; static GOptionEntry options[] = { { "ref", 0, 0, G_OPTION_ARG_STRING, &opt_ref, N_("Override the ref used for the imported bundle"), N_("REF") }, @@ -47,6 +48,7 @@ static GOptionEntry options[] = { { "gpg-homedir", 0, 0, G_OPTION_ARG_STRING, &opt_gpg_homedir, N_("GPG Homedir to use when looking for keyrings"), N_("HOMEDIR") }, { "update-appstream", 0, 0, G_OPTION_ARG_NONE, &opt_update_appstream, N_("Update the appstream branch"), NULL }, { "no-update-summary", 0, 0, G_OPTION_ARG_NONE, &opt_no_update_summary, N_("Don't update the summary"), NULL }, + { "no-summary-index", 0, 0, G_OPTION_ARG_NONE, &opt_no_summary_index, N_("Don't generate a summary index"), NULL }, { NULL } }; @@ -239,13 +241,21 @@ flatpak_builtin_build_import (int argc, char **argv, GCancellable *cancellable, !flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, 0, cancellable, error)) return FALSE; - if (!opt_no_update_summary && - !flatpak_repo_update (repo, - (const char **) opt_gpg_key_ids, - opt_gpg_homedir, - cancellable, - error)) - return FALSE; + if (!opt_no_update_summary) + { + FlatpakRepoUpdateFlags flags = FLATPAK_REPO_UPDATE_FLAG_NONE; + + if (opt_no_summary_index) + flags |= FLATPAK_REPO_UPDATE_FLAG_DISABLE_INDEX; + + g_debug ("Updating summary"); + if (!flatpak_repo_update (repo, flags, + (const char **) opt_gpg_key_ids, + opt_gpg_homedir, + cancellable, + error)) + return FALSE; + } return TRUE; } diff --git a/app/flatpak-builtins-build-update-repo.c b/app/flatpak-builtins-build-update-repo.c index a0dbdb12..a2c5081b 100644 --- a/app/flatpak-builtins-build-update-repo.c +++ b/app/flatpak-builtins-build-update-repo.c @@ -43,6 +43,7 @@ static char *opt_default_branch; static char *opt_collection_id = NULL; static gboolean opt_deploy_sideload_collection_id = FALSE; static gboolean opt_deploy_collection_id = FALSE; +static gboolean opt_no_summary_index = FALSE; static char **opt_gpg_import; static char *opt_generate_delta_from; static char *opt_generate_delta_to; @@ -89,6 +90,7 @@ static GOptionEntry options[] = { { "generate-static-delta-from", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_from, NULL, NULL }, { "generate-static-delta-to", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_to, NULL, NULL }, { "generate-static-delta-ref", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_ref, NULL, NULL }, + { "no-summary-index", 0, 0, G_OPTION_ARG_NONE, &opt_no_summary_index, N_("Don't generate a summary index"), NULL }, { NULL } }; @@ -624,8 +626,13 @@ flatpak_builtin_build_update_repo (int argc, char **argv, if (!opt_no_update_summary) { + FlatpakRepoUpdateFlags flags = FLATPAK_REPO_UPDATE_FLAG_NONE; + + if (opt_no_summary_index) + flags |= FLATPAK_REPO_UPDATE_FLAG_DISABLE_INDEX; + g_print (_("Updating summary\n")); - if (!flatpak_repo_update (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error)) + if (!flatpak_repo_update (repo, flags, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error)) return FALSE; } diff --git a/common/flatpak-utils-private.h b/common/flatpak-utils-private.h index c280419d..ab163e47 100644 --- a/common/flatpak-utils-private.h +++ b/common/flatpak-utils-private.h @@ -499,11 +499,18 @@ gboolean flatpak_repo_set_deploy_sideload_collection_id (OstreeRepo *repo, gboolean flatpak_repo_set_gpg_keys (OstreeRepo *repo, GBytes *bytes, GError **error); -gboolean flatpak_repo_update (OstreeRepo *repo, - const char **gpg_key_ids, - const char *gpg_homedir, - GCancellable *cancellable, - GError **error); + +typedef enum { + FLATPAK_REPO_UPDATE_FLAG_NONE = 0, + FLATPAK_REPO_UPDATE_FLAG_DISABLE_INDEX = 1 << 0, +} FlatpakRepoUpdateFlags; + +gboolean flatpak_repo_update (OstreeRepo *repo, + FlatpakRepoUpdateFlags flags, + const char **gpg_key_ids, + const char *gpg_homedir, + GCancellable *cancellable, + GError **error); gboolean flatpak_repo_collect_sizes (OstreeRepo *repo, GFile *root, guint64 *installed_size, diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c index 596e48da..2af968b5 100644 --- a/common/flatpak-utils.c +++ b/common/flatpak-utils.c @@ -3495,6 +3495,24 @@ flatpak_repo_save_summary_index (OstreeRepo *repo, { int repo_dfd = ostree_repo_get_dfd (repo); + if (index == NULL) + { + if (unlinkat (repo_dfd, "summary.idx", 0) != 0 && + G_UNLIKELY (errno != ENOENT)) + { + glnx_set_error_from_errno (error); + return FALSE; + } + if (unlinkat (repo_dfd, "summary.idx.sig", 0) != 0 && + G_UNLIKELY (errno != ENOENT)) + { + glnx_set_error_from_errno (error); + return FALSE; + } + + return TRUE; + } + if (!glnx_file_replace_contents_at (repo_dfd, "summary.idx", g_variant_get_data (index), g_variant_get_size (index), @@ -4467,6 +4485,7 @@ generate_summary_index (OstreeRepo *repo, * security properties of collection IDs are broken). */ gboolean flatpak_repo_update (OstreeRepo *repo, + FlatpakRepoUpdateFlags flags, const char **gpg_key_ids, const char *gpg_homedir, GCancellable *cancellable, @@ -4484,6 +4503,7 @@ flatpak_repo_update (OstreeRepo *repo, g_autoptr(GHashTable) summaries = NULL; g_autoptr(GBytes) index_sig = NULL; GKeyFile *config; + gboolean disable_index = (flags & FLATPAK_REPO_UPDATE_FLAG_DISABLE_INDEX) != 0; config = ostree_repo_get_config (repo); @@ -4548,42 +4568,45 @@ flatpak_repo_update (OstreeRepo *repo, if (compat_summary == NULL) return FALSE; - GLNX_HASH_TABLE_FOREACH (subsets, const char *, subset) + if (!disable_index) { - GLNX_HASH_TABLE_FOREACH (arches, const char *, arch) + GLNX_HASH_TABLE_FOREACH (subsets, const char *, subset) { - const char *arch_v[] = { arch, NULL }; - g_autofree char *name = NULL; - g_autofree char *digest = NULL; + GLNX_HASH_TABLE_FOREACH (arches, const char *, arch) + { + const char *arch_v[] = { arch, NULL }; + g_autofree char *name = NULL; + g_autofree char *digest = NULL; - if (*subset == 0) - name = g_strdup (arch); - else - name = g_strconcat (subset, "-", arch, NULL); + if (*subset == 0) + name = g_strdup (arch); + else + name = g_strconcat (subset, "-", arch, NULL); - g_autoptr(GVariant) arch_summary = generate_summary (repo, FALSE, refs, commit_data_cache, NULL, subset, arch_v, - cancellable, error); - if (arch_summary == NULL) - return FALSE; + g_autoptr(GVariant) arch_summary = generate_summary (repo, FALSE, refs, commit_data_cache, NULL, subset, arch_v, + cancellable, error); + if (arch_summary == NULL) + return FALSE; - digest = flatpak_repo_save_digested_summary (repo, name, arch_summary, cancellable, error); - if (digest == NULL) - return FALSE; + digest = flatpak_repo_save_digested_summary (repo, name, arch_summary, cancellable, error); + if (digest == NULL) + return FALSE; - g_hash_table_insert (summaries, g_steal_pointer (&name), g_steal_pointer (&digest)); + g_hash_table_insert (summaries, g_steal_pointer (&name), g_steal_pointer (&digest)); + } } - } - summary_index = generate_summary_index (repo, old_index, summaries, - gpg_key_ids, gpg_homedir, - cancellable, error); - if (summary_index == NULL) - return FALSE; + summary_index = generate_summary_index (repo, old_index, summaries, + gpg_key_ids, gpg_homedir, + cancellable, error); + if (summary_index == NULL) + return FALSE; + } if (!ostree_repo_static_delta_reindex (repo, 0, NULL, cancellable, error)) return FALSE; - if (gpg_key_ids) + if (summary_index && gpg_key_ids) { g_autoptr(GBytes) index_bytes = g_variant_get_data_as_bytes (summary_index); |