static gboolean change_upgrader_refspec (OstreeSysroot *sysroot, OstreeSysrootUpgrader *upgrader, const gchar *refspec, GCancellable *cancellable, gchar **out_old_refspec, gchar **out_new_refspec, GError **error) { gboolean ret = FALSE; g_autofree gchar *old_refspec = NULL; g_autofree gchar *new_refspec = NULL; g_autoptr(GKeyFile) new_origin = NULL; GKeyFile *old_origin = NULL; /* owned by deployment */ old_origin = ostree_sysroot_upgrader_get_origin (upgrader); old_refspec = g_key_file_get_string (old_origin, "origin", "refspec", NULL); if (!rpmostreed_refspec_parse_partial (refspec, old_refspec, &new_refspec, error)) goto out; if (strcmp (old_refspec, new_refspec) == 0) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Old and new refs are equal: %s", new_refspec); goto out; } new_origin = ostree_sysroot_origin_new_from_refspec (sysroot, new_refspec); if (!ostree_sysroot_upgrader_set_origin (upgrader, new_origin, cancellable, error)) goto out; if (out_new_refspec != NULL) *out_new_refspec = g_steal_pointer (&new_refspec); if (out_old_refspec != NULL) *out_old_refspec = g_steal_pointer (&old_refspec); ret = TRUE; out: return ret; }
static gboolean change_upgrader_refspec (OstreeSysroot *sysroot, RpmOstreeSysrootUpgrader *upgrader, const gchar *refspec, GCancellable *cancellable, gchar **out_old_refspec, gchar **out_new_refspec, GError **error) { gboolean ret = FALSE; g_autofree gchar *new_refspec = NULL; g_autofree gchar *current_refspec = g_strdup (rpmostree_sysroot_upgrader_get_refspec (upgrader)); if (!rpmostreed_refspec_parse_partial (refspec, current_refspec, &new_refspec, error)) goto out; if (strcmp (current_refspec, new_refspec) == 0) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Old and new refs are equal: %s", new_refspec); goto out; } if (!rpmostree_sysroot_upgrader_set_origin_rebase (upgrader, new_refspec, error)) goto out; if (out_new_refspec != NULL) *out_new_refspec = g_steal_pointer (&new_refspec); if (out_old_refspec != NULL) *out_old_refspec = g_strdup (current_refspec); ret = TRUE; out: return ret; }