gboolean rpmostree_db_option_context_parse (GOptionContext *context, const GOptionEntry *main_entries, int *argc, char ***argv, OstreeRepo **out_repo, GCancellable *cancellable, GError **error) { gs_unref_object OstreeRepo *repo = NULL; gboolean success = FALSE; /* Entries are listed in --help output in the order added. We add the * main entries ourselves so that we can add the --repo entry first. */ g_option_context_add_main_entries (context, global_entries, NULL); if (!rpmostree_option_context_parse (context, main_entries, argc, argv, RPM_OSTREE_BUILTIN_FLAG_LOCAL_CMD, cancellable, NULL, error)) goto out; if (opt_repo == NULL) { gs_unref_object OstreeSysroot *sysroot = NULL; sysroot = ostree_sysroot_new_default (); if (!ostree_sysroot_load (sysroot, cancellable, error)) goto out; if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error)) goto out; } else { gs_unref_object GFile *repo_file = g_file_new_for_path (opt_repo); repo = ostree_repo_new (repo_file); if (!ostree_repo_open (repo, cancellable, error)) goto out; } if (rpmReadConfigFiles (NULL, NULL)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "rpm failed to init: %s", rpmlogMessage ()); goto out; } gs_transfer_out_value (out_repo, &repo); success = TRUE; out: return success; }
gboolean rpmostree_db_option_context_parse (GOptionContext *context, const GOptionEntry *main_entries, int *argc, char ***argv, OstreeRepo **out_repo, GFile **out_rpmdbdir, gboolean *out_rpmdbdir_is_tmp, GCancellable *cancellable, GError **error) { gs_unref_object OstreeRepo *repo = NULL; gs_unref_object GFile *rpmdbdir = NULL; gboolean rpmdbdir_is_tmp = FALSE; gboolean success = FALSE; /* Entries are listed in --help output in the order added. We add the * main entries ourselves so that we can add the --repo entry first. */ g_option_context_add_main_entries (context, global_entries, NULL); if (!rpmostree_option_context_parse (context, main_entries, argc, argv, error)) goto out; if (opt_repo == NULL) { gs_unref_object OstreeSysroot *sysroot = NULL; sysroot = ostree_sysroot_new_default (); if (!ostree_sysroot_load (sysroot, cancellable, error)) goto out; if (!ostree_sysroot_get_repo (sysroot, &repo, cancellable, error)) goto out; } else { gs_unref_object GFile *repo_file = g_file_new_for_path (opt_repo); repo = ostree_repo_new (repo_file); if (!ostree_repo_open (repo, cancellable, error)) goto out; } if (rpmReadConfigFiles (NULL, NULL)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "rpm failed to init: %s", rpmlogMessage ()); goto out; } if (opt_rpmdbdir != NULL) { rpmdbdir = g_file_new_for_path (opt_rpmdbdir); } else { /* tmp on tmpfs is much faster than /var/tmp, * and the rpmdb itself shouldn't be too big. */ gs_free char *tmpd = g_mkdtemp (g_strdup ("/tmp/rpm-ostree.XXXXXX")); rpmdbdir = g_file_new_for_path (tmpd); rpmdbdir_is_tmp = TRUE; ostree_repo_set_disable_fsync (repo, TRUE); } gs_transfer_out_value (out_repo, &repo); gs_transfer_out_value (out_rpmdbdir, &rpmdbdir); if (out_rpmdbdir_is_tmp != NULL) *out_rpmdbdir_is_tmp = rpmdbdir_is_tmp; success = TRUE; out: return success; }