From 2b8750d6b3f8a71679382a2c9dc487811d3cc0e3 Mon Sep 17 00:00:00 2001 From: Viktor Ashirov Date: Nov 12 2019 17:21:30 +0000 Subject: Issue #50712 - Version comparison doesn't work correctly on git builds Bug Description: ``` >>> get_ds_version() '1.4.2.3.20191112git7a7bc7872' >>> ds_is_older('1.4.0') True ``` This happens because packaging.version returns a different object for '1.4.2.3.20191112git7a7bc7872' (LegacyVersion) than for '1.4.0' (Version). And during comparison Version is always higher: ``` >>> x = Version('1.0') >>> y = LegacyVersion('2.0') >>> x > y True ``` Fix Description: Always use LegacyVersion during comparison Fixes: https://pagure.io/389-ds-base/issue/50712 Reviewed by: tbordaz (Thanks!) --- diff --git a/src/lib389/lib389/utils.py b/src/lib389/lib389/utils.py index e817468..41b05cb 100644 --- a/src/lib389/lib389/utils.py +++ b/src/lib389/lib389/utils.py @@ -39,7 +39,7 @@ import six import shlex import operator import subprocess -from packaging import version +from packaging.version import LegacyVersion from socket import getfqdn from ldapurl import LDAPUrl from contextlib import closing @@ -1078,7 +1078,7 @@ def ds_is_related(relation, *ver): if cmp_ver.startswith(ds_ver[:3]): return ops[relation](version.parse(ds_ver),version.parse(cmp_ver)) else: - return ops[relation](version.parse(ds_ver), version.parse(ver[0])) + return ops[relation](LegacyVersion(ds_ver), LegacyVersion(ver[0])) def ds_is_older(*ver):