mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-07 18:35:46 +00:00
ch: Fix cloud-hypervisor version processing
Refactor the version processing logic in ch driver to support versions from non-release cloud-hypervisor binaries. This version also supports versions with branch prefixes in them. Signed-off-by: Praveen K Paladugu <prapal@linux.microsoft.com> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
16ad37c119
commit
efeaf5589c
@ -172,6 +172,29 @@ virCHDriverConfigDispose(void *obj)
|
|||||||
|
|
||||||
#define MIN_VERSION ((15 * 1000000) + (0 * 1000) + (0))
|
#define MIN_VERSION ((15 * 1000000) + (0 * 1000) + (0))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* chPreProcessVersionString:
|
||||||
|
*
|
||||||
|
* Returns: a pointer to numerical version without branch/commit info
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
chPreProcessVersionString(char *version)
|
||||||
|
{
|
||||||
|
char *tmp = strrchr(version, '/');
|
||||||
|
|
||||||
|
if (tmp)
|
||||||
|
version = tmp + 1;
|
||||||
|
|
||||||
|
if (version[0] == 'v')
|
||||||
|
version++;
|
||||||
|
|
||||||
|
tmp = strchr(version, '-');
|
||||||
|
if (tmp)
|
||||||
|
*tmp = '\0';
|
||||||
|
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
chExtractVersion(virCHDriver *driver)
|
chExtractVersion(virCHDriver *driver)
|
||||||
{
|
{
|
||||||
@ -193,13 +216,20 @@ chExtractVersion(virCHDriver *driver)
|
|||||||
|
|
||||||
tmp = help;
|
tmp = help;
|
||||||
|
|
||||||
/* expected format: cloud-hypervisor v<major>.<minor>.<micro> */
|
/* Below are example version formats and expected outputs:
|
||||||
if ((tmp = STRSKIP(tmp, "cloud-hypervisor v")) == NULL) {
|
* cloud-hypervisor v32.0.0 (expected: 32.0.0)
|
||||||
|
* cloud-hypervisor v33.0-104-ge0e3779e-dirty (expected: 33.0)
|
||||||
|
* cloud-hypervisor testing/v32.0.131-1-ga5d6db5c-dirty (expected: 32.0.131)
|
||||||
|
*/
|
||||||
|
if ((tmp = STRSKIP(tmp, "cloud-hypervisor ")) == NULL) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("Unexpected output of cloud-hypervisor binary"));
|
_("Unexpected output of cloud-hypervisor binary"));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmp = chPreProcessVersionString(tmp);
|
||||||
|
VIR_DEBUG("Cloud-Hypervisor version detected: %s", tmp);
|
||||||
|
|
||||||
if (virStringParseVersion(&version, tmp, true) < 0) {
|
if (virStringParseVersion(&version, tmp, true) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("Unable to parse cloud-hypervisor version: %1$s"), tmp);
|
_("Unable to parse cloud-hypervisor version: %1$s"), tmp);
|
||||||
|
Loading…
Reference in New Issue
Block a user