diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2023-03-09 20:00:27 +0100 |
---|---|---|
committer | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2023-03-11 22:06:31 +0100 |
commit | 594964b3b21ef78fc7c6faaadfffecf553c25b08 (patch) | |
tree | acce44893cc788511052d1e2df6d48795c6711ea | |
parent | 7d851ecb653d0d8cac3aa332b7a43b6e786d4c79 (diff) | |
download | setuptools-scm-594964b3b21ef78fc7c6faaadfffecf553c25b08.tar.gz |
refactor: command running - migrate more code to it
-rw-r--r-- | .pre-commit-config.yaml | 3 | ||||
-rw-r--r-- | src/setuptools_scm/__init__.py | 2 | ||||
-rw-r--r-- | src/setuptools_scm/_run_cmd.py | 3 | ||||
-rw-r--r-- | src/setuptools_scm/hg.py | 23 | ||||
-rw-r--r-- | testing/test_basic_api.py | 4 | ||||
-rw-r--r-- | testing/test_git.py | 18 | ||||
-rw-r--r-- | testing/test_integration.py | 8 | ||||
-rw-r--r-- | testing/wd_wrapper.py | 2 |
8 files changed, 33 insertions, 30 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c32c140..15273bf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,7 +34,7 @@ repos: - id: pyproject-fmt - repo: https://github.com/pre-commit/mirrors-mypy - rev: 'v1.0.0' + rev: 'v1.0.1' hooks: - id: mypy args: [--strict] @@ -44,3 +44,4 @@ repos: - tokenize-rt==3.2.0 - pytest == 7.1 - importlib_metadata + - typing-extensions>=4.5 diff --git a/src/setuptools_scm/__init__.py b/src/setuptools_scm/__init__.py index e15eeb1..eccc68f 100644 --- a/src/setuptools_scm/__init__.py +++ b/src/setuptools_scm/__init__.py @@ -106,7 +106,7 @@ def _version_missing(config: Configuration) -> NoReturn: def get_version( - root: str = ".", + root: _t.PathT = ".", version_scheme: _t.VERSION_SCHEME = DEFAULT_VERSION_SCHEME, local_scheme: _t.VERSION_SCHEME = DEFAULT_LOCAL_SCHEME, write_to: _t.PathT | None = None, diff --git a/src/setuptools_scm/_run_cmd.py b/src/setuptools_scm/_run_cmd.py index 14fda9c..bcefb1f 100644 --- a/src/setuptools_scm/_run_cmd.py +++ b/src/setuptools_scm/_run_cmd.py @@ -65,6 +65,7 @@ def run( strip: bool = True, trace: bool = True, timeout: int = 20, + check: bool = False, ) -> subprocess.CompletedProcess[str]: if isinstance(cmd, str): cmd = shlex.split(cmd) @@ -96,4 +97,6 @@ def run( _trace.trace("err:\n", res.stderr, indent=True) if res.returncode: _trace.trace("ret:", res.returncode) + if check: + res.check_returncode() return res diff --git a/src/setuptools_scm/hg.py b/src/setuptools_scm/hg.py index c325d0f..e7295bc 100644 --- a/src/setuptools_scm/hg.py +++ b/src/setuptools_scm/hg.py @@ -10,7 +10,6 @@ from ._trace import trace from ._version_cls import Version from .scm_workdir import Workdir from .utils import data_from_mime -from .utils import do_ex from .utils import require_command from .version import meta from .version import ScmVersion @@ -19,6 +18,8 @@ from .version import tag_to_version if TYPE_CHECKING: from . import _types as _t +from ._run_cmd import run as _run + class HgWorkdir(Workdir): COMMAND = "hg" @@ -26,10 +27,10 @@ class HgWorkdir(Workdir): @classmethod def from_potential_worktree(cls, wd: _t.PathT) -> HgWorkdir | None: require_command(cls.COMMAND) - root, err, ret = do_ex("hg root", wd) - if ret: + res = _run("hg root", wd) + if res.returncode: return None - return cls(root) + return cls(res.stdout) def get_meta(self, config: Configuration) -> ScmVersion | None: node: str @@ -48,10 +49,7 @@ class HgWorkdir(Workdir): ["hg", "id", "-T", "{branch}\n{if(dirty, 1, 0)}\n{date|shortdate}"] ).split("\n") dirty = bool(int(dirty_str)) - # todo: fromiso - node_date = datetime.date( - *map(int, (dirty_date if dirty else node_date_str).split("-")) - ) + node_date = datetime.date.fromisoformat(dirty_date if dirty else node_date_str) if node.count("0") == len(node): trace("initial node", self.path) @@ -106,7 +104,8 @@ class HgWorkdir(Workdir): def hg_log(self, revset: str, template: str) -> str: cmd = ["hg", "log", "-r", revset, "-T", template] - return self.do(cmd) + + return _run(cmd, cwd=self.path, check=True).stdout def get_latest_normalizable_tag(self) -> str | None: # Gets all tags containing a '.' (see #229) from oldest to newest @@ -141,9 +140,9 @@ class HgWorkdir(Workdir): def parse(root: _t.PathT, config: Configuration) -> ScmVersion | None: if os.path.exists(os.path.join(root, ".hg/git")): - paths, _, ret = do_ex("hg path", root) - if not ret: - for line in paths.split("\n"): + res = _run(["hg", "path"], root) + if not res.returncode: + for line in res.stdout.split("\n"): if line.startswith("default ="): path = Path(line.split()[2]) if path.name.endswith(".git") or (path / ".git").exists(): diff --git a/testing/test_basic_api.py b/testing/test_basic_api.py index 1aef0bd..bf21a47 100644 --- a/testing/test_basic_api.py +++ b/testing/test_basic_api.py @@ -90,8 +90,8 @@ def test_fallback(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: setup(use_scm_version={"fallback_version": "12.34"}) """ ) - res = do([sys.executable, "setup.py", "--version"], p) - assert res == "12.34" + res = run([sys.executable, "setup.py", "--version"], p) + assert res.stdout == "12.34" def test_empty_pretend_version(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: diff --git a/testing/test_git.py b/testing/test_git.py index 35ea1ec..13a8fec 100644 --- a/testing/test_git.py +++ b/testing/test_git.py @@ -21,9 +21,9 @@ from setuptools_scm import Configuration from setuptools_scm import git from setuptools_scm import integration from setuptools_scm import NonNormalizedVersion +from setuptools_scm._run_cmd import run from setuptools_scm.file_finder_git import git_find_files from setuptools_scm.git import archival_to_version -from setuptools_scm.utils import do from setuptools_scm.utils import has_command from setuptools_scm.version import format_version @@ -69,8 +69,8 @@ setup(use_scm_version={"root": "../..", "relative_to": __file__}) """ ) - res = do([sys.executable, "setup.py", "--version"], p) - assert res == "0.1.dev0" + res = run([sys.executable, "setup.py", "--version"], p) + assert res.stdout == "0.1.dev0" def test_root_search_parent_directories( @@ -84,8 +84,8 @@ def test_root_search_parent_directories( setup(use_scm_version={"search_parent_directories": True}) """ ) - res = do([sys.executable, "setup.py", "--version"], p) - assert res == "0.1.dev0" + res = run([sys.executable, "setup.py", "--version"], p) + assert res.stdout == "0.1.dev0" def test_git_gone(wd: WorkDir, monkeypatch: pytest.MonkeyPatch) -> None: @@ -285,9 +285,9 @@ def test_git_worktree_support(wd: WorkDir, tmp_path: Path) -> None: worktree = tmp_path / "work_tree" wd("git worktree add -b work-tree %s" % worktree) - res = do([sys.executable, "-m", "setuptools_scm", "ls"], cwd=worktree) - assert "test.txt" in res - assert str(worktree) in res + res = run([sys.executable, "-m", "setuptools_scm", "ls"], cwd=worktree) + assert "test.txt" in res.stdout + assert str(worktree) in res.stdout @pytest.fixture @@ -296,7 +296,7 @@ def shallow_wd(wd: WorkDir, tmp_path: Path) -> Path: wd.commit_testfile() wd.commit_testfile() target = tmp_path / "wd_shallow" - do(["git", "clone", "file://%s" % wd.cwd, str(target), "--depth=1"]) + run(["git", "clone", f"file://{wd.cwd}", target, "--depth=1"], tmp_path, check=True) return target diff --git a/testing/test_integration.py b/testing/test_integration.py index 0ab1548..cba0f98 100644 --- a/testing/test_integration.py +++ b/testing/test_integration.py @@ -10,8 +10,8 @@ import setuptools_scm._integration.setuptools from .wd_wrapper import WorkDir from setuptools_scm import PRETEND_KEY from setuptools_scm import PRETEND_KEY_NAMED +from setuptools_scm._run_cmd import run from setuptools_scm.integration import _warn_on_old_setuptools -from setuptools_scm.utils import do @pytest.fixture @@ -45,8 +45,8 @@ def test_pyproject_support(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> N encoding="utf-8", ) pkg.joinpath("setup.py").write_text("__import__('setuptools').setup()") - res = do([sys.executable, "setup.py", "--version"], pkg) - assert res == "12.34" + res = run([sys.executable, "setup.py", "--version"], pkg) + assert res.stdout == "12.34" PYPROJECT_FILES = { @@ -145,7 +145,7 @@ def testwarn_on_broken_setuptools() -> None: @pytest.mark.issue(611) -def test_distribution_procides_extras() -> None: +def test_distribution_provides_extras() -> None: try: from importlib.metadata import distribution # type: ignore except ImportError: diff --git a/testing/wd_wrapper.py b/testing/wd_wrapper.py index de578c4..1587f82 100644 --- a/testing/wd_wrapper.py +++ b/testing/wd_wrapper.py @@ -67,7 +67,7 @@ class WorkDir: __tracebackhide__ = True from setuptools_scm import get_version - version = get_version(root=str(self.cwd), fallback_root=str(self.cwd), **kw) + version = get_version(root=self.cwd, fallback_root=self.cwd, **kw) print(version) return version |