mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-15 10:29:47 +00:00
fu-tool: add reinstall command
Closes #1914 Signed-off-by: Filipe Laíns <lains@archlinux.org>
This commit is contained in:
parent
d3a4fd3e1c
commit
b2f377a00c
@ -1133,6 +1133,74 @@ fu_util_update (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||
return fu_util_prompt_complete (priv->completion_flags, TRUE, error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
fu_util_reinstall (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||
{
|
||||
g_autoptr(FwupdRelease) rel = NULL;
|
||||
g_autoptr(GPtrArray) rels = NULL;
|
||||
g_autoptr(FuDevice) dev = NULL;
|
||||
|
||||
if (g_strv_length (values) != 1) {
|
||||
g_set_error_literal (error,
|
||||
FWUPD_ERROR,
|
||||
FWUPD_ERROR_INVALID_ARGS,
|
||||
"Invalid arguments");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!fu_util_start_engine (priv, FU_ENGINE_LOAD_FLAG_NONE, error))
|
||||
return FALSE;
|
||||
|
||||
dev = fu_engine_get_device (priv->engine, values[0], error);
|
||||
if (dev == NULL)
|
||||
return FALSE;
|
||||
|
||||
/* try to lookup/match release from client */
|
||||
rels = fu_engine_get_releases_for_device (priv->engine, dev, error);
|
||||
if (rels == NULL)
|
||||
return FALSE;
|
||||
|
||||
for (guint j = 0; j < rels->len; j++) {
|
||||
FwupdRelease *rel_tmp = g_ptr_array_index (rels, j);
|
||||
if (fu_common_vercmp_full (fwupd_release_get_version (rel_tmp),
|
||||
fu_device_get_version (dev),
|
||||
fu_device_get_version_format (dev)) == 0) {
|
||||
rel = g_object_ref (rel_tmp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (rel == NULL) {
|
||||
g_set_error (error,
|
||||
FWUPD_ERROR,
|
||||
FWUPD_ERROR_NOT_SUPPORTED,
|
||||
"Unable to locate release for %s version %s",
|
||||
fu_device_get_name (dev),
|
||||
fu_device_get_version (dev));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* update the console if composite devices are also updated */
|
||||
priv->current_operation = FU_UTIL_OPERATION_INSTALL;
|
||||
g_signal_connect (priv->engine, "device-changed",
|
||||
G_CALLBACK (fu_util_update_device_changed_cb), priv);
|
||||
priv->flags |= FWUPD_INSTALL_FLAG_ALLOW_REINSTALL;
|
||||
if (!fu_util_install_release (priv, rel, error))
|
||||
return FALSE;
|
||||
fu_util_display_current_message (priv);
|
||||
|
||||
/* we don't want to ask anything */
|
||||
if (priv->no_reboot_check) {
|
||||
g_debug ("skipping reboot check");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* save the device state for other applications to see */
|
||||
if (!fu_util_save_current_state (priv, error))
|
||||
return FALSE;
|
||||
|
||||
return fu_util_prompt_complete (priv->completion_flags, TRUE, error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
fu_util_detach (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||
{
|
||||
@ -1982,6 +2050,12 @@ main (int argc, char *argv[])
|
||||
/* TRANSLATORS: command description */
|
||||
_("Install a firmware file on this hardware"),
|
||||
fu_util_install);
|
||||
fu_util_cmd_array_add (cmd_array,
|
||||
"reinstall",
|
||||
"DEVICE-ID",
|
||||
/* TRANSLATORS: command description */
|
||||
_("Reinstall firmware on a device"),
|
||||
fu_util_reinstall);
|
||||
fu_util_cmd_array_add (cmd_array,
|
||||
"attach",
|
||||
"DEVICE-ID",
|
||||
|
Loading…
Reference in New Issue
Block a user