1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
from __future__ import annotations
import contextlib
import os
import shutil
import sys
from pathlib import Path
from types import TracebackType
from typing import Any
from typing import Iterator
import pytest
from setuptools_scm._run_cmd import run
if sys.version_info >= (3, 11):
from typing import Self
else:
from typing_extensions import Self
from .wd_wrapper import WorkDir
def pytest_configure() -> None:
# 2009-02-13T23:31:30+00:00
os.environ["SOURCE_DATE_EPOCH"] = "1234567890"
os.environ["SETUPTOOLS_SCM_DEBUG"] = "1"
if "SETUPTOOLS_SCM_PRETEND_VERSION" in os.environ:
del os.environ["SETUPTOOLS_SCM_PRETEND_VERSION"]
VERSION_PKGS = ["setuptools", "setuptools_scm", "packaging", "build", "wheel"]
def pytest_report_header() -> list[str]:
from importlib.metadata import version
res = []
for pkg in VERSION_PKGS:
pkg_version = version(pkg)
path = __import__(pkg).__file__
if path and "site-packages" in path:
# Replace everything up to and including site-packages with site::
parts = path.split("site-packages", 1)
if len(parts) > 1:
path = "site:." + parts[1]
elif path and str(Path.cwd()) in path:
# Replace current working directory with CWD::
path = path.replace(str(Path.cwd()), "CWD:.")
res.append(f"{pkg} version {pkg_version} from {path}")
return res
def pytest_addoption(parser: Any) -> None:
group = parser.getgroup("setuptools_scm")
group.addoption(
"--test-legacy", dest="scm_test_virtualenv", default=False, action="store_true"
)
class DebugMode(contextlib.AbstractContextManager): # type: ignore[type-arg]
from setuptools_scm import _log as __module
def __init__(self) -> None:
self.__stack = contextlib.ExitStack()
def __enter__(self) -> Self:
self.enable()
return self
def __exit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> None:
self.disable()
def enable(self) -> None:
self.__stack.enter_context(self.__module.defer_to_pytest())
def disable(self) -> None:
self.__stack.close()
@pytest.fixture(autouse=True)
def debug_mode() -> Iterator[DebugMode]:
with DebugMode() as debug_mode:
yield debug_mode
@pytest.fixture
def wd(tmp_path: Path) -> WorkDir:
target_wd = tmp_path.resolve() / "wd"
target_wd.mkdir()
return WorkDir(target_wd)
@pytest.fixture(scope="session")
def hg_exe() -> str:
hg = shutil.which("hg")
if hg is None:
pytest.skip("hg executable not found")
return hg
@pytest.fixture
def repositories_hg_git(tmp_path: Path) -> tuple[WorkDir, WorkDir]:
tmp_path = tmp_path.resolve()
path_git = tmp_path / "repo_git"
path_git.mkdir()
wd = WorkDir(path_git)
wd("git init")
wd("git config user.email test@example.com")
wd('git config user.name "a test"')
wd.add_command = "git add ."
wd.commit_command = "git commit -m test-{reason}"
path_hg = tmp_path / "repo_hg"
run(["hg", "clone", path_git, path_hg, "--config", "extensions.hggit="], tmp_path)
assert path_hg.exists()
with open(path_hg / ".hg/hgrc", "a") as file:
file.write("[extensions]\nhggit =\n")
wd_hg = WorkDir(path_hg)
wd_hg.add_command = "hg add ."
wd_hg.commit_command = 'hg commit -m test-{reason} -u test -d "0 0"'
return wd_hg, wd
|