diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2023-03-24 11:53:28 +0100 |
---|---|---|
committer | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2023-03-29 17:04:12 +0200 |
commit | c47fc2bea58870b44b88bf6f4f0347eaa04e4620 (patch) | |
tree | 1ccb1d799f306770169175c57700afb619b89d32 | |
parent | 71e839f1d7a74ce7f2f24d3661ef76524d2ed814 (diff) | |
download | setuptools-scm-c47fc2bea58870b44b88bf6f4f0347eaa04e4620.tar.gz |
make scmworkdir.path always a Path
-rw-r--r-- | src/setuptools_scm/git.py | 17 | ||||
-rw-r--r-- | src/setuptools_scm/hg.py | 2 | ||||
-rw-r--r-- | src/setuptools_scm/hg_git.py | 11 | ||||
-rw-r--r-- | src/setuptools_scm/scm_workdir.py | 10 | ||||
-rw-r--r-- | testing/test_git.py | 8 | ||||
-rw-r--r-- | testing/test_mercurial.py | 2 |
6 files changed, 20 insertions, 30 deletions
diff --git a/src/setuptools_scm/git.py b/src/setuptools_scm/git.py index e2a5a79..bcbeb97 100644 --- a/src/setuptools_scm/git.py +++ b/src/setuptools_scm/git.py @@ -55,30 +55,29 @@ def run_git( class GitWorkdir(Workdir): """experimental, may change at any time""" - COMMAND = "git" - @classmethod def from_potential_worktree(cls, wd: _t.PathT) -> GitWorkdir | None: - require_command(cls.COMMAND) - wd = os.path.abspath(wd) - res = run_git(["rev-parse", "--show-prefix"], Path(wd)) + require_command("git") + wd = Path(wd).resolve() + res = run_git(["rev-parse", "--show-prefix"], wd) real_wd = res.stdout[:-1] # remove the trailing pathsep if res.returncode: return None if not real_wd: - real_wd = wd + real_wd = os.fspath(wd) else: - assert wd.replace("\\", "/").endswith(real_wd) + str_wd = os.fspath(wd) + assert str_wd.replace("\\", "/").endswith(real_wd) # In windows wd contains ``\`` which should be replaced by ``/`` # for this assertion to work. Length of string isn't changed by replace # ``\\`` is just and escape for `\` - real_wd = wd[: -len(real_wd)] + real_wd = str_wd[: -len(real_wd)] log.debug("real root %s", real_wd) if not samefile(real_wd, wd): return None - return cls(real_wd) + return cls(Path(real_wd)) def is_dirty(self) -> bool: res = run_git(["status", "--porcelain", "--untracked-files=no"], self.path) diff --git a/src/setuptools_scm/hg.py b/src/setuptools_scm/hg.py index cb45e03..44fa652 100644 --- a/src/setuptools_scm/hg.py +++ b/src/setuptools_scm/hg.py @@ -31,7 +31,7 @@ class HgWorkdir(Workdir): res = _run(["hg", "root"], wd) if res.returncode: return None - return cls(res.stdout) + return cls(Path(res.stdout)) def get_meta(self, config: Configuration) -> ScmVersion | None: node: str diff --git a/src/setuptools_scm/hg_git.py b/src/setuptools_scm/hg_git.py index f2ea360..b3ce4b2 100644 --- a/src/setuptools_scm/hg_git.py +++ b/src/setuptools_scm/hg_git.py @@ -4,7 +4,7 @@ import logging import os from contextlib import suppress from datetime import date -from datetime import datetime +from pathlib import Path from subprocess import CompletedProcess from . import _types as _t @@ -31,7 +31,7 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir): res = _run(["hg", "root"], cwd=wd) if res.returncode: return None - return cls(res.stdout) + return cls(Path(res.stdout)) def is_dirty(self) -> bool: res = _run(["hg", "id", "-T", "{dirty}"], cwd=self.path, check=True) @@ -47,12 +47,9 @@ class GitWorkdirHgClient(GitWorkdir, HgWorkdir): def get_head_date(self) -> date | None: res = _run('hg log -r . -T "{shortdate(date)}"', cwd=self.path) if res.returncode: - log.info( - "head date err %s", - res, - ) + log.info("head date err %s", res) return None - return datetime.strptime(res.stdout, r"%Y-%m-%d").date() + return date.fromisoformat(res.stdout) def is_shallow(self) -> bool: return False diff --git a/src/setuptools_scm/scm_workdir.py b/src/setuptools_scm/scm_workdir.py index 8f6a1cd..ec6933e 100644 --- a/src/setuptools_scm/scm_workdir.py +++ b/src/setuptools_scm/scm_workdir.py @@ -1,15 +1,9 @@ from __future__ import annotations +from dataclasses import dataclass from pathlib import Path -from typing import TYPE_CHECKING - - -if TYPE_CHECKING: - from . import _types as _t +@dataclass() class Workdir: path: Path - - def __init__(self, path: _t.PathT): - self.path = Path(path) diff --git a/testing/test_git.py b/testing/test_git.py index a661e02..c256eb9 100644 --- a/testing/test_git.py +++ b/testing/test_git.py @@ -388,7 +388,7 @@ def test_git_archive_run_from_subdirectory( def test_git_branch_names_correct(wd: WorkDir) -> None: wd.commit_testfile() wd("git checkout -b test/fun") - wd_git = git.GitWorkdir(os.fspath(wd.cwd)) + wd_git = git.GitWorkdir(wd.cwd) assert wd_git.get_branch() == "test/fun" @@ -460,7 +460,7 @@ def test_git_getdate(wd: WorkDir) -> None: assert parsed.node_date is not None return parsed.node_date - git_wd = git.GitWorkdir(os.fspath(wd.cwd)) + git_wd = git.GitWorkdir(wd.cwd) assert git_wd.get_head_date() is None assert parse_date() == today @@ -473,7 +473,7 @@ def test_git_getdate_badgit( wd: WorkDir, caplog: pytest.LogCaptureFixture, monkeypatch: pytest.MonkeyPatch ) -> None: wd.commit_testfile() - git_wd = git.GitWorkdir(os.fspath(wd.cwd)) + git_wd = git.GitWorkdir(wd.cwd) fake_date_result = subprocess.CompletedProcess( args=[], stdout="%cI", stderr="", returncode=0 ) @@ -514,7 +514,7 @@ Expire-Date: 0 def test_git_getdate_signed_commit(signed_commit_wd: WorkDir) -> None: today = date.today() signed_commit_wd.commit_testfile(signed=True) - git_wd = git.GitWorkdir(os.fspath(signed_commit_wd.cwd)) + git_wd = git.GitWorkdir(signed_commit_wd.cwd) assert git_wd.get_head_date() == today diff --git a/testing/test_mercurial.py b/testing/test_mercurial.py index 7de7ca2..262d424 100644 --- a/testing/test_mercurial.py +++ b/testing/test_mercurial.py @@ -7,9 +7,9 @@ import pytest import setuptools_scm._file_finders from setuptools_scm import Configuration +from setuptools_scm._run_cmd import has_command from setuptools_scm.hg import archival_to_version from setuptools_scm.hg import parse -from setuptools_scm.utils import has_command from setuptools_scm.version import format_version from testing.wd_wrapper import WorkDir |