diff --git a/kt/ktlib/ciq_helpers.py b/kt/ktlib/ciq_helpers.py index 05b0c4e..b695a71 100644 --- a/kt/ktlib/ciq_helpers.py +++ b/kt/ktlib/ciq_helpers.py @@ -521,10 +521,14 @@ def _read_spec_define(spec_lines, name, value_pattern): def read_spec_el_version(spec_lines): """Read the EL version number from spec file lines. - Returns the el_version string (e.g., '9'). - Raises ValueError if not found. + Returns the el_version string (e.g., '9'), or None if %define el_version + is not present in the spec or its value does not match the expected + numeric pattern. """ - return _read_spec_define(spec_lines, "el_version", r"\d+") + try: + return _read_spec_define(spec_lines, "el_version", r"\d+") + except ValueError: + return None FIPS_PROTECTED_DIRECTORIES = [ diff --git a/tests/kt/ktlib/test_ciq_helpers.py b/tests/kt/ktlib/test_ciq_helpers.py index d88668e..6d7d395 100644 --- a/tests/kt/ktlib/test_ciq_helpers.py +++ b/tests/kt/ktlib/test_ciq_helpers.py @@ -1,4 +1,4 @@ -from kt.ktlib.ciq_helpers import CIQ_cherry_pick_commit_standardization +from kt.ktlib.ciq_helpers import CIQ_cherry_pick_commit_standardization, read_spec_el_version UPSTREAM_SHA = "1234567890abcdef1234567890abcdef12345678" AUTHOR_TAG = "commit-author Upstream Author " @@ -29,3 +29,42 @@ def test_cherry_pick_standardization_stops_indenting_at_marker(): lines = standardized_cherry_pick_msg() assert lines[-2] == f"(cherry picked from commit {UPSTREAM_SHA})\n" assert lines[-1] == "Signed-off-by: Backporter \n" + + +# --- read_spec_el_version tests --- + + +def test_read_spec_el_version_returns_version(): + spec_lines = [ + "%define el_version 9\n", + "Name: kernel\n", + ] + assert read_spec_el_version(spec_lines) == "9" + + +def test_read_spec_el_version_returns_two_digit_version(): + spec_lines = [ + "%define el_version 10\n", + "Name: kernel\n", + ] + assert read_spec_el_version(spec_lines) == "10" + + +def test_read_spec_el_version_returns_none_when_missing(): + spec_lines = [ + "Name: kernel\n", + "%define kversion 6\n", + ] + assert read_spec_el_version(spec_lines) is None + + +def test_read_spec_el_version_returns_none_for_non_numeric(): + spec_lines = [ + "%define el_version abc\n", + "Name: kernel\n", + ] + assert read_spec_el_version(spec_lines) is None + + +def test_read_spec_el_version_empty_spec(): + assert read_spec_el_version([]) is None diff --git a/update_lt_spec.py b/update_lt_spec.py index 304e050..6334cb7 100755 --- a/update_lt_spec.py +++ b/update_lt_spec.py @@ -112,15 +112,9 @@ def update_spec_file( """ spec = _read_spec_file(spec_path) - # Extract el_version from spec file - try: - el_version = read_spec_el_version(spec) - except ValueError as e: - print(f"ERROR: {e}") - sys.exit(1) - - # Construct dist string from el_version for changelog - dist = f".el{el_version}" + # Construct dist string from el_version for changelog (omit if not defined) + el_version = read_spec_el_version(spec) + dist = f".el{el_version}" if el_version else "" # Get git user info, checking both repo-level and global config try: @@ -210,14 +204,9 @@ def bump_spec_file( spec = _read_spec_file(spec_path) - # Extract el_version from spec file - try: - el_version = read_spec_el_version(spec) - except ValueError as e: - print(f"ERROR: {e}") - sys.exit(1) - - dist = f".el{el_version}" + # Construct dist string from el_version for changelog (omit if not defined) + el_version = read_spec_el_version(spec) + dist = f".el{el_version}" if el_version else "" # Get git user info try: