summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2020-10-21 14:02:20 +0200
committerAlexander Larsson <alexl@redhat.com>2020-10-26 13:50:15 +0100
commit5f42b5e116032e0c397b7b9c850d45a5711b0996 (patch)
tree29b511e7d1f4d195177b994a2f1cbcf2bcf93fe9
parent2165ba306aea447a02bd82b50413638162a6bc1c (diff)
downloadflatpak-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.c24
-rw-r--r--app/flatpak-builtins-build-export.c24
-rw-r--r--app/flatpak-builtins-build-import-bundle.c24
-rw-r--r--app/flatpak-builtins-build-update-repo.c9
-rw-r--r--common/flatpak-utils-private.h17
-rw-r--r--common/flatpak-utils.c71
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);