summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-03-24 11:53:28 +0100
committerRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-03-29 17:04:12 +0200
commitc47fc2bea58870b44b88bf6f4f0347eaa04e4620 (patch)
tree1ccb1d799f306770169175c57700afb619b89d32
parent71e839f1d7a74ce7f2f24d3661ef76524d2ed814 (diff)
downloadsetuptools-scm-c47fc2bea58870b44b88bf6f4f0347eaa04e4620.tar.gz
make scmworkdir.path always a Path
-rw-r--r--src/setuptools_scm/git.py17
-rw-r--r--src/setuptools_scm/hg.py2
-rw-r--r--src/setuptools_scm/hg_git.py11
-rw-r--r--src/setuptools_scm/scm_workdir.py10
-rw-r--r--testing/test_git.py8
-rw-r--r--testing/test_mercurial.py2
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