mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-12 22:23:46 +00:00
Use the device version format when converting the release version
This is arguably the more correct fix, regardless of the UEFI quirk use as each release was reading and converting the exact same property from the component. Fixes https://github.com/hughsie/fwupd/issues/1156
This commit is contained in:
parent
21ab7f588c
commit
2c40b3734f
@ -263,11 +263,10 @@ fu_engine_set_device_version_format (FuEngine *self, FuDevice *device, XbNode *c
|
|||||||
|
|
||||||
/* convert hex and decimal versions to dotted style */
|
/* convert hex and decimal versions to dotted style */
|
||||||
static gchar *
|
static gchar *
|
||||||
fu_engine_get_release_version (FuEngine *self, XbNode *component, XbNode *rel, GError **error)
|
fu_engine_get_release_version (FuEngine *self, FuDevice *dev, XbNode *rel, GError **error)
|
||||||
{
|
{
|
||||||
FuVersionFormat fmt = FU_VERSION_FORMAT_TRIPLET;
|
FuVersionFormat fmt = FU_VERSION_FORMAT_TRIPLET;
|
||||||
const gchar *version;
|
const gchar *version;
|
||||||
const gchar *version_format;
|
|
||||||
guint64 ver_uint32;
|
guint64 ver_uint32;
|
||||||
|
|
||||||
/* get version */
|
/* get version */
|
||||||
@ -284,21 +283,16 @@ fu_engine_get_release_version (FuEngine *self, XbNode *component, XbNode *rel, G
|
|||||||
if (g_strstr_len (version, -1, ".") != NULL)
|
if (g_strstr_len (version, -1, ".") != NULL)
|
||||||
return g_strdup (version);
|
return g_strdup (version);
|
||||||
|
|
||||||
/* specified in metadata */
|
/* specified in metadata or from a quirk */
|
||||||
version_format = xb_node_query_text (component,
|
fmt = fu_device_get_version_format (dev);
|
||||||
"custom/value[@key='LVFS::VersionFormat']",
|
|
||||||
NULL);
|
|
||||||
if (version_format != NULL) {
|
|
||||||
fmt = fu_common_version_format_from_string (version_format);
|
|
||||||
if (fmt == FU_VERSION_FORMAT_UNKNOWN) {
|
if (fmt == FU_VERSION_FORMAT_UNKNOWN) {
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
FWUPD_ERROR,
|
FWUPD_ERROR,
|
||||||
FWUPD_ERROR_NOT_SUPPORTED,
|
FWUPD_ERROR_NOT_SUPPORTED,
|
||||||
"version format %s unsupported",
|
"version format unset and version %s ambiguous",
|
||||||
version_format);
|
version);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* don't touch my version! */
|
/* don't touch my version! */
|
||||||
if (fmt == FU_VERSION_FORMAT_PLAIN)
|
if (fmt == FU_VERSION_FORMAT_PLAIN)
|
||||||
@ -315,6 +309,7 @@ fu_engine_get_release_version (FuEngine *self, XbNode *component, XbNode *rel, G
|
|||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
fu_engine_set_release_from_appstream (FuEngine *self,
|
fu_engine_set_release_from_appstream (FuEngine *self,
|
||||||
|
FuDevice *dev,
|
||||||
FwupdRelease *rel,
|
FwupdRelease *rel,
|
||||||
XbNode *component,
|
XbNode *component,
|
||||||
XbNode *release,
|
XbNode *release,
|
||||||
@ -349,7 +344,7 @@ fu_engine_set_release_from_appstream (FuEngine *self,
|
|||||||
fwupd_release_set_vendor (rel, tmp);
|
fwupd_release_set_vendor (rel, tmp);
|
||||||
|
|
||||||
/* the version is fixed up at runtime */
|
/* the version is fixed up at runtime */
|
||||||
version_rel = fu_engine_get_release_version (self, component, release, error);
|
version_rel = fu_engine_get_release_version (self, dev, release, error);
|
||||||
if (version_rel == NULL)
|
if (version_rel == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
fwupd_release_set_version (rel, version_rel);
|
fwupd_release_set_version (rel, version_rel);
|
||||||
@ -1567,7 +1562,7 @@ fu_engine_install (FuEngine *self,
|
|||||||
|
|
||||||
/* schedule this for the next reboot if not in system-update.target,
|
/* schedule this for the next reboot if not in system-update.target,
|
||||||
* but first check if allowed on battery power */
|
* but first check if allowed on battery power */
|
||||||
version_rel = fu_engine_get_release_version (self, component, rel, error);
|
version_rel = fu_engine_get_release_version (self, device, rel, error);
|
||||||
if (version_rel == NULL) {
|
if (version_rel == NULL) {
|
||||||
g_prefix_error (error, "failed to get release version: ");
|
g_prefix_error (error, "failed to get release version: ");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -2914,6 +2909,7 @@ fu_engine_add_releases_for_device_component (FuEngine *self,
|
|||||||
|
|
||||||
/* create new FwupdRelease for the XbNode */
|
/* create new FwupdRelease for the XbNode */
|
||||||
if (!fu_engine_set_release_from_appstream (self,
|
if (!fu_engine_set_release_from_appstream (self,
|
||||||
|
device,
|
||||||
rel,
|
rel,
|
||||||
component,
|
component,
|
||||||
release,
|
release,
|
||||||
@ -3678,6 +3674,7 @@ fu_engine_add_device (FuEngine *self, FuDevice *device)
|
|||||||
g_autoptr(FwupdRelease) rel = fwupd_release_new ();
|
g_autoptr(FwupdRelease) rel = fwupd_release_new ();
|
||||||
g_autoptr(GError) error_local = NULL;
|
g_autoptr(GError) error_local = NULL;
|
||||||
if (!fu_engine_set_release_from_appstream (self,
|
if (!fu_engine_set_release_from_appstream (self,
|
||||||
|
device,
|
||||||
rel,
|
rel,
|
||||||
component,
|
component,
|
||||||
release,
|
release,
|
||||||
|
@ -739,6 +739,7 @@ fu_engine_device_unlock_func (void)
|
|||||||
fu_device_set_id (device, "UEFI-dummy-dev0");
|
fu_device_set_id (device, "UEFI-dummy-dev0");
|
||||||
fu_device_add_guid (device, "2d47f29b-83a2-4f31-a2e8-63474f4d4c2e");
|
fu_device_add_guid (device, "2d47f29b-83a2-4f31-a2e8-63474f4d4c2e");
|
||||||
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_LOCKED);
|
fu_device_add_flag (device, FWUPD_DEVICE_FLAG_LOCKED);
|
||||||
|
fu_device_set_version_format (device, FU_VERSION_FORMAT_PLAIN);
|
||||||
fu_engine_add_device (engine, device);
|
fu_engine_add_device (engine, device);
|
||||||
|
|
||||||
/* ensure the metainfo was matched */
|
/* ensure the metainfo was matched */
|
||||||
|
Loading…
Reference in New Issue
Block a user