"""Version-to-commit resolution against a real git history. These run against a temporary repository built for the test, so the pickaxe search and the history walk are exercised rather than stubbed. """ from __future__ import annotations import subprocess import sys import tempfile from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) from updater import changes # noqa: E402 def _repo(tmp: Path) -> Path: def run(*args: str) -> None: subprocess.run( ["git", "-C", str(tmp), "-c", "commit.gpgsign=false", *args], check=True, capture_output=True, ) run("init", "-q") run("config", "user.email", "t@example.invalid") run("config", "user.name", "t") return tmp def _commit(repo: Path, src: str, message: str) -> str: (repo / "PKGBUILD").write_text(src) subprocess.run( ["git", "-C", str(repo), "-c", "commit.gpgsign=false", "add", "PKGBUILD"], check=True, capture_output=True, ) subprocess.run( ["git", "-C", str(repo), "-c", "commit.gpgsign=false", "commit", "-qm", message], check=True, capture_output=True, ) return subprocess.run( ["git", "-C", str(repo), "rev-parse", "HEAD"], check=True, capture_output=True, text=True ).stdout.strip() def test_the_version_match_includes_pkgrel_and_epoch(): """`pkgver` alone is not the version. A maintainer bumps `pkgrel` for a dependency rebuild without touching `pkgver`, so matching on pkgver alone resolves both `1.0-1` and `1.0-2` to the commit that first declared `1.0` -- and the diff is then taken against a revision the machine never had, which makes everything the packager changed in between look like a fresh finding. """ assert changes.declared_version("pkgname=x\npkgver=1.0\npkgrel=2\n") == "1.0-2" assert changes.declared_version("pkgname=x\npkgver=1.0\npkgrel=1\n") == "1.0-1" assert changes.declared_version("pkgname=x\nepoch=2\npkgver=1.0\npkgrel=3\n") == "2:1.0-3" assert changes.declared_version("pkgname=x\n") == "" def test_a_pkgrel_bump_resolves_to_its_own_commit(): with tempfile.TemporaryDirectory() as td: repo = _repo(Path(td)) first = _commit(repo, "pkgname=x\npkgver=1.0\npkgrel=1\n", "1.0-1") second = _commit(repo, "pkgname=x\npkgver=1.0\npkgrel=2\n", "1.0-2") assert changes.commit_for_version(repo, "1.0-2") == second assert changes.commit_for_version(repo, "1.0-1") == first def test_an_unknown_version_resolves_to_nothing(): with tempfile.TemporaryDirectory() as td: repo = _repo(Path(td)) _commit(repo, "pkgname=x\npkgver=1.0\npkgrel=1\n", "1.0-1") assert changes.commit_for_version(repo, "9.9-9") == "" assert changes.commit_for_version(repo, "") == ""