LarryHu0217 commented on code in PR #50669: URL: https://github.com/apache/arrow/pull/50669#discussion_r3665596360
########## dev/archery/archery/crossbow/tests/test_core.py: ########## @@ -17,16 +17,103 @@ from archery.utils.source import ArrowSources from archery.crossbow import Config, Queue -from archery.crossbow.core import CrossbowError, Repo, TaskAssets, TaskStatus +from archery.crossbow.core import ( + CrossbowError, + Repo, + TaskAssets, + TaskStatus, + get_version, +) import pathlib +import subprocess from datetime import date from unittest import mock import pytest from github import GithubException [email protected]( + ("description", "expected"), + [ + ("apache-arrow-4.0.0-0-gabcdef\n", "5.0.0.dev0"), + ("apache-arrow-4.0.0-12-gabcdef-dirty\n", "5.0.0.dev12"), + ("apache-arrow-5.0.0.dev-7-gabcdef\n", "5.0.0.dev7"), + ("apache-arrow-5.0.0-rc1-2-gabcdef\n", "6.0.0.dev2"), + ], +) +def test_get_version(description, expected): + with mock.patch("archery.crossbow.core.subprocess.run") as mocked_run: + mocked_run.return_value.stdout = description + + assert get_version("/arrow") == expected + + mocked_run.assert_called_once_with( + [ + "git", + "describe", + "--dirty", + "--tags", + "--long", + "--match", + "apache-arrow-[0-9]*.*", + ], + cwd="/arrow", + check=True, + stdout=mock.ANY, + text=True, + ) + + +def test_get_version_rejects_unexpected_describe_output(): + with mock.patch("archery.crossbow.core.subprocess.run") as mocked_run: + mocked_run.return_value.stdout = "not-an-arrow-version\n" + + with pytest.raises(CrossbowError, match="git describe output"): + get_version("/arrow") + + +def test_get_version_from_git_repository(tmp_path): + def run_git(*args): + subprocess.run( + ["git", *args], + cwd=tmp_path, + check=True, + capture_output=True, + text=True, + ) + + run_git("init") + version_file = tmp_path / "version.txt" + version_file.write_text("released\n") + run_git("add", "version.txt") Review Comment: Removed `version.txt`; the integration test now uses two `--allow-empty` commits only to establish the tagged commit and distance. ########## dev/archery/archery/crossbow/core.py: ########## @@ -17,6 +17,7 @@ import os import re +import subprocess Review Comment: Reordered the standard-library imports. ########## dev/archery/archery/crossbow/tests/test_core.py: ########## @@ -17,16 +17,103 @@ from archery.utils.source import ArrowSources from archery.crossbow import Config, Queue -from archery.crossbow.core import CrossbowError, Repo, TaskAssets, TaskStatus +from archery.crossbow.core import ( + CrossbowError, + Repo, + TaskAssets, + TaskStatus, + get_version, +) import pathlib +import subprocess from datetime import date from unittest import mock import pytest from github import GithubException [email protected]( + ("description", "expected"), + [ + ("apache-arrow-4.0.0-0-gabcdef\n", "5.0.0.dev0"), + ("apache-arrow-4.0.0-12-gabcdef-dirty\n", "5.0.0.dev12"), + ("apache-arrow-5.0.0.dev-7-gabcdef\n", "5.0.0.dev7"), + ("apache-arrow-5.0.0-rc1-2-gabcdef\n", "6.0.0.dev2"), + ], +) +def test_get_version(description, expected): + with mock.patch("archery.crossbow.core.subprocess.run") as mocked_run: + mocked_run.return_value.stdout = description + + assert get_version("/arrow") == expected + + mocked_run.assert_called_once_with( + [ + "git", + "describe", + "--dirty", + "--tags", + "--long", + "--match", + "apache-arrow-[0-9]*.*", + ], + cwd="/arrow", + check=True, + stdout=mock.ANY, + text=True, + ) + + +def test_get_version_rejects_unexpected_describe_output(): + with mock.patch("archery.crossbow.core.subprocess.run") as mocked_run: + mocked_run.return_value.stdout = "not-an-arrow-version\n" + + with pytest.raises(CrossbowError, match="git describe output"): + get_version("/arrow") + + +def test_get_version_from_git_repository(tmp_path): + def run_git(*args): Review Comment: Added a `pytest.mark.skipif` guard using `shutil.which("git")`. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
