summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-03-09 20:00:27 +0100
committerRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-03-11 22:06:31 +0100
commit594964b3b21ef78fc7c6faaadfffecf553c25b08 (patch)
treeacce44893cc788511052d1e2df6d48795c6711ea
parent7d851ecb653d0d8cac3aa332b7a43b6e786d4c79 (diff)
downloadsetuptools-scm-594964b3b21ef78fc7c6faaadfffecf553c25b08.tar.gz
refactor: command running - migrate more code to it
-rw-r--r--.pre-commit-config.yaml3
-rw-r--r--src/setuptools_scm/__init__.py2
-rw-r--r--src/setuptools_scm/_run_cmd.py3
-rw-r--r--src/setuptools_scm/hg.py23
-rw-r--r--testing/test_basic_api.py4
-rw-r--r--testing/test_git.py18
-rw-r--r--testing/test_integration.py8
-rw-r--r--testing/wd_wrapper.py2
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