From 653ed4a34c7a3827525403f292a889ace0f4fdbb Mon Sep 17 00:00:00 2001 From: Pavel Esir Date: Sat, 12 Feb 2022 00:13:48 +0300 Subject: [PATCH] [MO] use revision hashes to compare IE & MO versions (#10230) * fixed version comparison: for comparsion extracted hashes are used * shortened 7 -> 11 to match the current version fromat from nightly * corrected regex, added comparing by minimal hash len --- .../tools/mo/utils/check_ie_bindings.py | 11 ++++++- tools/mo/openvino/tools/mo/utils/version.py | 12 +++++-- tools/mo/unit_tests/mo/utils/version_test.py | 31 +++++++++++++++++-- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py b/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py index 78fc47e87cf..acc20097c14 100644 --- a/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py +++ b/tools/mo/openvino/tools/mo/utils/check_ie_bindings.py @@ -71,7 +71,16 @@ def import_core_modules(silent: bool, path_to_module: str): print("{}: \t{}".format("Model Optimizer version", mo_version)) versions_mismatch = False - if mo_version != ie_version: + + mo_hash = v.extract_hash_from_version(mo_version) + ie_hash = v.extract_hash_from_version(ie_version) + + if mo_hash is not None and ie_hash is not None: + min_length = min(len(mo_hash), len(ie_hash)) + mo_hash = mo_hash[:min_length] + ie_hash = ie_hash[:min_length] + + if mo_hash != ie_hash or mo_hash is None or ie_hash is None: versions_mismatch = True extracted_mo_release_version = v.extract_release_version(mo_version) mo_is_custom = extracted_mo_release_version == (None, None) diff --git a/tools/mo/openvino/tools/mo/utils/version.py b/tools/mo/openvino/tools/mo/utils/version.py index 07b9d410f29..54f6c43d37d 100644 --- a/tools/mo/openvino/tools/mo/utils/version.py +++ b/tools/mo/openvino/tools/mo/utils/version.py @@ -8,8 +8,6 @@ import sys from openvino.tools.mo.utils.utils import get_mo_root_dir -mo_major_and_minor_version = 2022.1 - def get_version_file_path(): return os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir, "version.txt") @@ -24,7 +22,7 @@ def generate_mo_version(): mo_dir = get_mo_root_dir() branch_name = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"], cwd=mo_dir).strip().decode() commit_hash = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=mo_dir).strip().decode() - return "{}.custom_{}_{}".format(mo_major_and_minor_version, branch_name, commit_hash) + return "custom_{}_{}".format(branch_name, commit_hash) except Exception as e: return "unknown version" @@ -75,3 +73,11 @@ def get_simplified_ie_version(env=dict(), version=None): if m and len(m.groups()) == 3: return simplify_version(m.group(3)) return simplify_version(version) + + +def extract_hash_from_version(full_version: str): + res = re.findall(r'[-_]([a-f0-9]{7,40})', full_version) + if len(res) > 0: + return res[0] + else: + return None diff --git a/tools/mo/unit_tests/mo/utils/version_test.py b/tools/mo/unit_tests/mo/utils/version_test.py index 43a7146342a..f05b501befc 100644 --- a/tools/mo/unit_tests/mo/utils/version_test.py +++ b/tools/mo/unit_tests/mo/utils/version_test.py @@ -6,7 +6,8 @@ import unittest.mock as mock from unittest.mock import mock_open from unittest.mock import patch -from openvino.tools.mo.utils.version import get_version, extract_release_version, get_simplified_ie_version, get_simplified_mo_version +from openvino.tools.mo.utils.version import get_version, extract_release_version, get_simplified_ie_version, \ + get_simplified_mo_version, extract_hash_from_version class TestingVersion(unittest.TestCase): @@ -62,4 +63,30 @@ class TestingVersion(unittest.TestCase): self.assertEqual(get_simplified_ie_version(version="2.1.custom_my/branch/3_4c8eae"), "custom") def test_simplify_ie_version_custom(self): - self.assertEqual(get_simplified_ie_version(version="custom_my/branch/3_4c8eae"), "custom") \ No newline at end of file + self.assertEqual(get_simplified_ie_version(version="custom_my/branch/3_4c8eae"), "custom") + + def test_extracting_version_hash_full_with_build_number(self): + self.assertEqual(extract_hash_from_version(full_version="2021.1.0-1028-55e4d5673a8"), "55e4d5673a8") + + def test_extracting_version_hash_full_with_build_number_dirty(self): + self.assertEqual(extract_hash_from_version(full_version="2021.1.0-1028-55e4d5673a8-dirty"), "55e4d5673a8") + + def test_extracting_version_hash_full_with_build_number_private(self): + self.assertEqual(extract_hash_from_version(full_version="2021.1.0-1028-55e4d5673a8-private"), "55e4d5673a8") + + def test_extracting_version_hash_custom_master(self): + self.assertEqual(extract_hash_from_version(full_version="custom_master_55e4d5673a833abab638ee9837bc87a0b7c3a043"), + "55e4d5673a833abab638ee9837bc87a0b7c3a043") + + def test_extracting_version_hash_mo_format(self): + self.assertEqual(extract_hash_from_version(full_version="2022.1.custom_master_55e4d5673a833abab638ee9837bc87a0b7c3a043"), + "55e4d5673a833abab638ee9837bc87a0b7c3a043") + + def test_negative_extracting_version_hash(self): + self.assertEqual(extract_hash_from_version(full_version="2022.1.custom_master"), + None) + + # format from the current nightly wheel + def test_extracting_version_hash_from_old_format(self): + self.assertEqual(extract_hash_from_version(full_version="2022.1.0-6311-a90bb1f"), + "a90bb1f")