int rpmostree_db_builtin_version (int argc, char **argv, GCancellable *cancellable, GError **error) { int exit_status = EXIT_FAILURE; GOptionContext *context; gs_unref_object OstreeRepo *repo = NULL; gs_unref_ptrarray GPtrArray *revs = NULL; gint ii; context = g_option_context_new ("COMMIT... - Show rpmdb version of packages within the commits"); if (!rpmostree_db_option_context_parse (context, db_version_entries, &argc, &argv, &repo, cancellable, error)) goto out; revs = g_ptr_array_new (); for (ii = 1; ii < argc; ii++) g_ptr_array_add (revs, argv[ii]); if (!_builtin_db_version (repo, revs, cancellable, error)) goto out; exit_status = EXIT_SUCCESS; out: g_option_context_free (context); return exit_status; }
gboolean rpmostree_db_builtin_version (int argc, char **argv, RpmOstreeCommandInvocation *invocation, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = g_option_context_new ("COMMIT..."); g_autoptr(OstreeRepo) repo = NULL; if (!rpmostree_db_option_context_parse (context, db_version_entries, &argc, &argv, invocation, &repo, cancellable, error)) return FALSE; g_autoptr(GPtrArray) revs = g_ptr_array_new (); for (int ii = 1; ii < argc; ii++) g_ptr_array_add (revs, argv[ii]); if (!_builtin_db_version (repo, revs, cancellable, error)) return FALSE; return TRUE; }
int rpmostree_db_builtin_diff (int argc, char **argv, GCancellable *cancellable, GError **error) { int exit_status = EXIT_FAILURE; GOptionContext *context; glnx_unref_object OstreeRepo *repo = NULL; struct RpmRevisionData *rpmrev1 = NULL; struct RpmRevisionData *rpmrev2 = NULL; context = g_option_context_new ("COMMIT COMMIT - Show package changes between two commits"); if (!rpmostree_db_option_context_parse (context, option_entries, &argc, &argv, &repo, cancellable, error)) goto out; if (argc != 3) { g_autofree char *message = NULL; message = g_strdup_printf ("\"%s\" takes exactly 2 arguments", g_get_prgname ()); rpmostree_usage_error (context, message, error); goto out; } if (!(rpmrev1 = rpmrev_new (repo, argv[1], NULL, cancellable, error))) goto out; if (!(rpmrev2 = rpmrev_new (repo, argv[2], NULL, cancellable, error))) goto out; if (!g_str_equal (argv[1], rpmrev_get_commit (rpmrev1))) printf ("ostree diff commit old: %s (%s)\n", argv[1], rpmrev_get_commit (rpmrev1)); else printf ("ostree diff commit old: %s\n", argv[1]); if (!g_str_equal (argv[2], rpmrev_get_commit (rpmrev2))) printf ("ostree diff commit new: %s (%s)\n", argv[2], rpmrev_get_commit (rpmrev2)); else printf ("ostree diff commit new: %s\n", argv[2]); if (opt_format == NULL) opt_format = "block"; if (g_str_equal (opt_format, "diff")) { rpmhdrs_diff_prnt_diff (rpmhdrs_diff (rpmrev_get_headers (rpmrev1), rpmrev_get_headers (rpmrev2))); } else if (g_str_equal (opt_format, "block")) { rpmhdrs_diff_prnt_block (rpmhdrs_diff (rpmrev_get_headers (rpmrev1), rpmrev_get_headers (rpmrev2))); } else { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Format argument is invalid, pick one of: diff, block"); goto out; } exit_status = EXIT_SUCCESS; out: /* Free the RpmRevisionData structs explicitly *before* possibly removing * the database directory, since rpmhdrs_free() depends on that directory * being there. */ rpmrev_free (rpmrev1); rpmrev_free (rpmrev2); g_option_context_free (context); return exit_status; }